webrtc/modules/video_coding/frame_dependencies_calculator.h
Danil Chapovalov cf1308fddd Ignore frame type when calculating generic frame dependencies.
When spatial scalability is used, both vpx and aom set key frame flag
for all spatial layers of the first frame, while rtp code expect it to
be set only on the frame without spatial dependencies.

That creates confusion for the frame dependency calculator.
Simplest solution seems to ignore that confusing signal and instead
rely encoder wrappers update frame buffer usages when key frame is generated.

Bug: webrtc:11999
Change-Id: Ica24f1d8d42d32dd24664beabf32ac24872cd15a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/194002
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32667}
2020-11-23 10:52:06 +00:00

49 lines
1.5 KiB
C++

/*
* Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef MODULES_VIDEO_CODING_FRAME_DEPENDENCIES_CALCULATOR_H_
#define MODULES_VIDEO_CODING_FRAME_DEPENDENCIES_CALCULATOR_H_
#include <stdint.h>
#include <vector>
#include "absl/container/inlined_vector.h"
#include "absl/types/optional.h"
#include "api/array_view.h"
#include "common_video/generic_frame_descriptor/generic_frame_info.h"
namespace webrtc {
// This class is thread compatible.
class FrameDependenciesCalculator {
public:
FrameDependenciesCalculator() = default;
FrameDependenciesCalculator(const FrameDependenciesCalculator&) = default;
FrameDependenciesCalculator& operator=(const FrameDependenciesCalculator&) =
default;
// Calculates frame dependencies based on previous encoder buffer usage.
absl::InlinedVector<int64_t, 5> FromBuffersUsage(
int64_t frame_id,
rtc::ArrayView<const CodecBufferUsage> buffers_usage);
private:
struct BufferUsage {
absl::optional<int64_t> frame_id;
absl::InlinedVector<int64_t, 4> dependencies;
};
absl::InlinedVector<BufferUsage, 4> buffers_;
};
} // namespace webrtc
#endif // MODULES_VIDEO_CODING_FRAME_DEPENDENCIES_CALCULATOR_H_