diff --git a/api/video_codecs/vp8_frame_buffer_controller.h b/api/video_codecs/vp8_frame_buffer_controller.h index e0d48515af..94e08a9aea 100644 --- a/api/video_codecs/vp8_frame_buffer_controller.h +++ b/api/video_codecs/vp8_frame_buffer_controller.h @@ -16,6 +16,7 @@ #include #include "absl/types/optional.h" +#include "api/fec_controller_override.h" #include "api/video_codecs/video_codec.h" #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/vp8_frame_config.h" @@ -105,6 +106,13 @@ class Vp8FrameBufferController { // The limits are suggestion-only; the controller is allowed to exceed them. virtual void SetQpLimits(size_t stream_index, int min_qp, int max_qp) = 0; + // Set a FecControllerOverride, through which the bandwidth allocation + // decisions made by FecController may be overridden. + // TODO(bugs.webrtc.org/10769): Update downstream projects, then make + // this pure-virtual. + virtual void SetFecControllerOverride( + FecControllerOverride* fec_controller_override) {} + // Number of streamed controlled by |this|. virtual size_t StreamCount() const = 0; diff --git a/api/video_codecs/vp8_temporal_layers.cc b/api/video_codecs/vp8_temporal_layers.cc index 22916a7dd5..b29cf65474 100644 --- a/api/video_codecs/vp8_temporal_layers.cc +++ b/api/video_codecs/vp8_temporal_layers.cc @@ -35,6 +35,11 @@ void Vp8TemporalLayers::SetQpLimits(size_t stream_index, return controllers_[stream_index]->SetQpLimits(0, min_qp, max_qp); } +void Vp8TemporalLayers::SetFecControllerOverride( + FecControllerOverride* fec_controller_override) { + // Ignore. +} + size_t Vp8TemporalLayers::StreamCount() const { return controllers_.size(); } diff --git a/api/video_codecs/vp8_temporal_layers.h b/api/video_codecs/vp8_temporal_layers.h index 4194352ded..efd013e4cd 100644 --- a/api/video_codecs/vp8_temporal_layers.h +++ b/api/video_codecs/vp8_temporal_layers.h @@ -14,6 +14,7 @@ #include #include +#include "api/fec_controller_override.h" #include "api/video_codecs/video_codec.h" #include "api/video_codecs/vp8_frame_buffer_controller.h" #include "api/video_codecs/vp8_frame_config.h" @@ -37,6 +38,9 @@ class Vp8TemporalLayers final : public Vp8FrameBufferController { void SetQpLimits(size_t stream_index, int min_qp, int max_qp) override; + void SetFecControllerOverride( + FecControllerOverride* fec_controller_override) override; + size_t StreamCount() const override; bool SupportsEncoderFrameDropping(size_t stream_index) const override; diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index 1938a8869c..1646fe6053 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -416,6 +416,7 @@ rtc_static_library("webrtc_vp8_temporal_layers") { ":video_coding_utility", "..:module_api", "../..:webrtc_common", + "../../api:fec_controller_api", "../../api/video_codecs:video_codecs_api", "../../rtc_base:checks", "../../rtc_base:rtc_base_approved", diff --git a/modules/video_coding/codecs/vp8/default_temporal_layers.cc b/modules/video_coding/codecs/vp8/default_temporal_layers.cc index 84e948e8e2..07d6c16054 100644 --- a/modules/video_coding/codecs/vp8/default_temporal_layers.cc +++ b/modules/video_coding/codecs/vp8/default_temporal_layers.cc @@ -257,6 +257,11 @@ void DefaultTemporalLayers::SetQpLimits(size_t stream_index, // Ignore. } +void DefaultTemporalLayers::SetFecControllerOverride( + FecControllerOverride* fec_controller_override) { + // Ignore. +} + size_t DefaultTemporalLayers::StreamCount() const { return 1; } diff --git a/modules/video_coding/codecs/vp8/default_temporal_layers.h b/modules/video_coding/codecs/vp8/default_temporal_layers.h index 9f86d408ad..e8a1cee9bb 100644 --- a/modules/video_coding/codecs/vp8/default_temporal_layers.h +++ b/modules/video_coding/codecs/vp8/default_temporal_layers.h @@ -22,6 +22,7 @@ #include #include "absl/types/optional.h" +#include "api/fec_controller_override.h" #include "api/video_codecs/vp8_frame_config.h" #include "api/video_codecs/vp8_temporal_layers.h" #include "modules/video_coding/codecs/vp8/include/temporal_layers_checker.h" @@ -36,6 +37,9 @@ class DefaultTemporalLayers final : public Vp8FrameBufferController { void SetQpLimits(size_t stream_index, int min_qp, int max_qp) override; + void SetFecControllerOverride( + FecControllerOverride* fec_controller_override) override; + size_t StreamCount() const override; bool SupportsEncoderFrameDropping(size_t stream_index) const override; diff --git a/modules/video_coding/codecs/vp8/screenshare_layers.cc b/modules/video_coding/codecs/vp8/screenshare_layers.cc index b5b963e2a9..84f3d1178b 100644 --- a/modules/video_coding/codecs/vp8/screenshare_layers.cc +++ b/modules/video_coding/codecs/vp8/screenshare_layers.cc @@ -87,6 +87,11 @@ void ScreenshareLayers::SetQpLimits(size_t stream_index, } } +void ScreenshareLayers::SetFecControllerOverride( + FecControllerOverride* fec_controller_override) { + // Ignore. +} + size_t ScreenshareLayers::StreamCount() const { return 1; } diff --git a/modules/video_coding/codecs/vp8/screenshare_layers.h b/modules/video_coding/codecs/vp8/screenshare_layers.h index 5270ffe81c..770ea01e99 100644 --- a/modules/video_coding/codecs/vp8/screenshare_layers.h +++ b/modules/video_coding/codecs/vp8/screenshare_layers.h @@ -14,6 +14,7 @@ #include #include +#include "api/fec_controller_override.h" #include "api/video_codecs/vp8_frame_config.h" #include "api/video_codecs/vp8_temporal_layers.h" #include "modules/video_coding/codecs/vp8/include/temporal_layers_checker.h" @@ -38,6 +39,9 @@ class ScreenshareLayers final : public Vp8FrameBufferController { void SetQpLimits(size_t stream_index, int min_qp, int max_qp) override; + void SetFecControllerOverride( + FecControllerOverride* fec_controller_override) override; + size_t StreamCount() const override; bool SupportsEncoderFrameDropping(size_t stream_index) const override;