diff --git a/api/BUILD.gn b/api/BUILD.gn index 7882103e0a..60eb7514c2 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -515,19 +515,6 @@ if (rtc_include_tests) { ] } - rtc_source_set("mock_video_encoder") { - testonly = true - sources = [ - "test/mock_video_encoder.cc", - "test/mock_video_encoder.h", - ] - - deps = [ - "../api/video_codecs:video_codecs_api", - "../test:test_support", - ] - } - rtc_source_set("rtc_api_unittests") { testonly = true diff --git a/api/test/mock_video_encoder.cc b/api/test/mock_video_encoder.cc deleted file mode 100644 index a0d82b1c33..0000000000 --- a/api/test/mock_video_encoder.cc +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2018 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. - */ - -#include "api/test/mock_video_encoder.h" - -namespace webrtc { - -MockEncodedImageCallback::MockEncodedImageCallback() = default; -MockEncodedImageCallback::~MockEncodedImageCallback() = default; -MockVideoEncoder::MockVideoEncoder() = default; -MockVideoEncoder::~MockVideoEncoder() = default; - -} // namespace webrtc diff --git a/api/test/mock_video_encoder.h b/api/test/mock_video_encoder.h deleted file mode 100644 index e2f0942c25..0000000000 --- a/api/test/mock_video_encoder.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2018 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 API_TEST_MOCK_VIDEO_ENCODER_H_ -#define API_TEST_MOCK_VIDEO_ENCODER_H_ - -#include - -#include "api/video_codecs/video_encoder.h" -#include "test/gmock.h" - -namespace webrtc { - -class MockEncodedImageCallback : public EncodedImageCallback { - public: - MockEncodedImageCallback(); - ~MockEncodedImageCallback(); - MOCK_METHOD3(OnEncodedImage, - Result(const EncodedImage& encodedImage, - const CodecSpecificInfo* codecSpecificInfo, - const RTPFragmentationHeader* fragmentation)); -}; - -class MockVideoEncoder : public VideoEncoder { - public: - MockVideoEncoder(); - ~MockVideoEncoder(); - MOCK_CONST_METHOD2(Version, int32_t(int8_t* version, int32_t length)); - MOCK_METHOD3(InitEncode, - int32_t(const VideoCodec* codecSettings, - int32_t numberOfCores, - size_t maxPayloadSize)); - MOCK_METHOD3(Encode, - int32_t(const VideoFrame& inputImage, - const CodecSpecificInfo* codecSpecificInfo, - const std::vector* frame_types)); - MOCK_METHOD1(RegisterEncodeCompleteCallback, - int32_t(EncodedImageCallback* callback)); - MOCK_METHOD0(Release, int32_t()); - MOCK_METHOD0(Reset, int32_t()); - MOCK_METHOD2(SetChannelParameters, int32_t(uint32_t packetLoss, int64_t rtt)); - MOCK_METHOD2(SetRates, int32_t(uint32_t newBitRate, uint32_t frameRate)); - MOCK_METHOD2(SetRateAllocation, - int32_t(const VideoBitrateAllocation& newBitRate, - uint32_t frameRate)); - MOCK_CONST_METHOD0(HasTrustedRateController, bool(void)); -}; - -} // namespace webrtc - -#endif // API_TEST_MOCK_VIDEO_ENCODER_H_ diff --git a/api/video_codecs/test/BUILD.gn b/api/video_codecs/test/BUILD.gn index a76447f36d..fa191625a1 100644 --- a/api/video_codecs/test/BUILD.gn +++ b/api/video_codecs/test/BUILD.gn @@ -21,7 +21,6 @@ if (rtc_include_tests) { "..:builtin_video_encoder_factory", "..:rtc_software_fallback_wrappers", "..:video_codecs_api", - "../../../api:mock_video_encoder", "../../../modules/video_coding:video_codec_interface", "../../../modules/video_coding:video_coding_utility", "../../../modules/video_coding:webrtc_vp8", diff --git a/api/video_codecs/test/video_encoder_software_fallback_wrapper_unittest.cc b/api/video_codecs/test/video_encoder_software_fallback_wrapper_unittest.cc index 49ddce4e21..98ebed2305 100644 --- a/api/video_codecs/test/video_encoder_software_fallback_wrapper_unittest.cc +++ b/api/video_codecs/test/video_encoder_software_fallback_wrapper_unittest.cc @@ -12,7 +12,6 @@ #include -#include "api/test/mock_video_encoder.h" #include "api/video/i420_buffer.h" #include "api/video/video_bitrate_allocation.h" #include "modules/video_coding/codecs/vp8/include/vp8.h" @@ -23,12 +22,9 @@ #include "rtc_base/checks.h" #include "rtc_base/fakeclock.h" #include "test/field_trial.h" -#include "test/gmock.h" #include "test/gtest.h" namespace webrtc { -using ::testing::Return; - namespace { const int kWidth = 320; const int kHeight = 240; @@ -533,88 +529,4 @@ TEST_F(ForcedFallbackTestEnabled, ScalingDisabledIfResizeOff) { EXPECT_FALSE(settings.thresholds.has_value()); } -TEST(SoftwareFallbackEncoderTest, BothRateControllersNotTrusted) { - auto* sw_encoder = new testing::NiceMock(); - auto* hw_encoder = new testing::NiceMock(); - EXPECT_CALL(*sw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(false)); - EXPECT_CALL(*hw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(false)); - - std::unique_ptr wrapper = - CreateVideoEncoderSoftwareFallbackWrapper( - std::unique_ptr(sw_encoder), - std::unique_ptr(hw_encoder)); - EXPECT_FALSE(wrapper->HasTrustedRateController()); -} - -TEST(SoftwareFallbackEncoderTest, SwRateControllerTrusted) { - auto* sw_encoder = new testing::NiceMock(); - auto* hw_encoder = new testing::NiceMock(); - EXPECT_CALL(*sw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(true)); - EXPECT_CALL(*hw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(false)); - - std::unique_ptr wrapper = - CreateVideoEncoderSoftwareFallbackWrapper( - std::unique_ptr(sw_encoder), - std::unique_ptr(hw_encoder)); - EXPECT_FALSE(wrapper->HasTrustedRateController()); -} - -TEST(SoftwareFallbackEncoderTest, SwRateControllerTrustedNoHw) { - auto* sw_encoder = new testing::NiceMock(); - EXPECT_CALL(*sw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(true)); - - std::unique_ptr wrapper = - CreateVideoEncoderSoftwareFallbackWrapper( - std::unique_ptr(sw_encoder), - std::unique_ptr()); - EXPECT_TRUE(wrapper->HasTrustedRateController()); -} - -TEST(SoftwareFallbackEncoderTest, HwRateControllerTrusted) { - auto* sw_encoder = new testing::NiceMock(); - auto* hw_encoder = new testing::NiceMock(); - EXPECT_CALL(*sw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(false)); - EXPECT_CALL(*hw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(true)); - - std::unique_ptr wrapper = - CreateVideoEncoderSoftwareFallbackWrapper( - std::unique_ptr(sw_encoder), - std::unique_ptr(hw_encoder)); - EXPECT_FALSE(wrapper->HasTrustedRateController()); -} - -TEST(SoftwareFallbackEncoderTest, HwRateControllerTrustedNoSw) { - auto* hw_encoder = new testing::NiceMock(); - EXPECT_CALL(*hw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(true)); - - std::unique_ptr wrapper = - CreateVideoEncoderSoftwareFallbackWrapper( - std::unique_ptr(), - std::unique_ptr(hw_encoder)); - EXPECT_TRUE(wrapper->HasTrustedRateController()); -} - -TEST(SoftwareFallbackEncoderTest, BothRateControllersTrusted) { - auto* sw_encoder = new testing::NiceMock(); - auto* hw_encoder = new testing::NiceMock(); - EXPECT_CALL(*sw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(true)); - EXPECT_CALL(*hw_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(true)); - - std::unique_ptr wrapper = - CreateVideoEncoderSoftwareFallbackWrapper( - std::unique_ptr(sw_encoder), - std::unique_ptr(hw_encoder)); - EXPECT_TRUE(wrapper->HasTrustedRateController()); -} - } // namespace webrtc diff --git a/api/video_codecs/video_encoder.cc b/api/video_codecs/video_encoder.cc index 6d60b25832..008780e38c 100644 --- a/api/video_codecs/video_encoder.cc +++ b/api/video_codecs/video_encoder.cc @@ -101,8 +101,4 @@ bool VideoEncoder::SupportsNativeHandle() const { const char* VideoEncoder::ImplementationName() const { return "unknown"; } - -bool VideoEncoder::HasTrustedRateController() const { - return false; -} } // namespace webrtc diff --git a/api/video_codecs/video_encoder.h b/api/video_codecs/video_encoder.h index b64ccf0ab3..4a4a8b6ad9 100644 --- a/api/video_codecs/video_encoder.h +++ b/api/video_codecs/video_encoder.h @@ -202,21 +202,6 @@ class VideoEncoder { virtual bool SupportsNativeHandle() const; virtual const char* ImplementationName() const; - - // If this method returns true, the encoder rate controller must perform well - // even in difficult situations, and produce close to the specified target - // bitrate seen over a reasonable time window, drop frames if necessary in - // order to keep the rate correct, and react quickly to changing bitrate - // targets. - // If this method returns true, we disable the frame dropper in the media - // optimization module and rely entirely on the encoder to produce media at a - // bitrate that closely matches the target. Any overshooting may result in - // delay buildup. - // If this method returns false (default behavior), the media opt frame - // dropper will drop input frames if it suspect encoder misbehavior. - // Misbehavior is common, especially in hardware codecs. Disable media opt at - // your own risk. - virtual bool HasTrustedRateController() const; }; } // namespace webrtc #endif // API_VIDEO_CODECS_VIDEO_ENCODER_H_ diff --git a/api/video_codecs/video_encoder_software_fallback_wrapper.cc b/api/video_codecs/video_encoder_software_fallback_wrapper.cc index 21e85d66cc..99f29707e4 100644 --- a/api/video_codecs/video_encoder_software_fallback_wrapper.cc +++ b/api/video_codecs/video_encoder_software_fallback_wrapper.cc @@ -93,7 +93,6 @@ class VideoEncoderSoftwareFallbackWrapper final : public VideoEncoder { bool SupportsNativeHandle() const override; ScalingSettings GetScalingSettings() const override; const char* ImplementationName() const override; - bool HasTrustedRateController() const override; private: bool InitFallbackEncoder(); @@ -143,8 +142,6 @@ class VideoEncoderSoftwareFallbackWrapper final : public VideoEncoder { bool forced_fallback_possible_; ForcedFallbackParams forced_fallback_; - - const bool trust_rate_controller_; }; VideoEncoderSoftwareFallbackWrapper::VideoEncoderSoftwareFallbackWrapper( @@ -161,11 +158,7 @@ VideoEncoderSoftwareFallbackWrapper::VideoEncoderSoftwareFallbackWrapper( encoder_(std::move(hw_encoder)), fallback_encoder_(std::move(sw_encoder)), callback_(nullptr), - forced_fallback_possible_(EnableForcedFallback()), - trust_rate_controller_( - (encoder_ ? encoder_->HasTrustedRateController() : true) && - (fallback_encoder_ ? fallback_encoder_->HasTrustedRateController() - : true)) { + forced_fallback_possible_(EnableForcedFallback()) { if (forced_fallback_possible_) { GetForcedFallbackParamsFromFieldTrialGroup( &forced_fallback_.min_pixels_, &forced_fallback_.max_pixels_, @@ -326,10 +319,6 @@ const char* VideoEncoderSoftwareFallbackWrapper::ImplementationName() const { : encoder_->ImplementationName(); } -bool VideoEncoderSoftwareFallbackWrapper::HasTrustedRateController() const { - return trust_rate_controller_; -} - bool VideoEncoderSoftwareFallbackWrapper::IsForcedFallbackActive() const { return (forced_fallback_possible_ && use_fallback_encoder_ && forced_fallback_.active_); diff --git a/media/engine/scopedvideoencoder.cc b/media/engine/scopedvideoencoder.cc index 09847ac484..026654e072 100644 --- a/media/engine/scopedvideoencoder.cc +++ b/media/engine/scopedvideoencoder.cc @@ -40,7 +40,6 @@ class ScopedVideoEncoder : public webrtc::VideoEncoder { ScalingSettings GetScalingSettings() const override; bool SupportsNativeHandle() const override; const char* ImplementationName() const override; - bool HasTrustedRateController() const override; ~ScopedVideoEncoder() override; @@ -104,10 +103,6 @@ const char* ScopedVideoEncoder::ImplementationName() const { return encoder_->ImplementationName(); } -bool ScopedVideoEncoder::HasTrustedRateController() const { - return encoder_->HasTrustedRateController(); -} - ScopedVideoEncoder::~ScopedVideoEncoder() { factory_->DestroyVideoEncoder(encoder_); } diff --git a/media/engine/simulcast_encoder_adapter.cc b/media/engine/simulcast_encoder_adapter.cc index ead73726a5..30da68ec85 100644 --- a/media/engine/simulcast_encoder_adapter.cc +++ b/media/engine/simulcast_encoder_adapter.cc @@ -128,8 +128,7 @@ SimulcastEncoderAdapter::SimulcastEncoderAdapter(VideoEncoderFactory* factory, video_format_(format), encoded_complete_callback_(nullptr), implementation_name_("SimulcastEncoderAdapter"), - experimental_boosted_screenshare_qp_(GetScreenshareBoostedQpValue()), - trusted_rate_controller_(false) { + experimental_boosted_screenshare_qp_(GetScreenshareBoostedQpValue()) { RTC_DCHECK(factory_); // The adapter is typically created on the worker thread, but operated on @@ -205,7 +204,6 @@ int SimulcastEncoderAdapter::InitEncode(const VideoCodec* inst, } std::string implementation_name; - trusted_rate_controller_ = true; // Create |number_of_streams| of encoder instances and init them. for (int i = 0; i < number_of_streams; ++i) { VideoCodec stream_codec; @@ -252,7 +250,6 @@ int SimulcastEncoderAdapter::InitEncode(const VideoCodec* inst, std::unique_ptr callback( new AdapterEncodedImageCallback(this, i)); encoder->RegisterEncodeCompleteCallback(callback.get()); - trusted_rate_controller_ &= encoder->HasTrustedRateController(); streaminfos_.emplace_back(std::move(encoder), std::move(callback), stream_codec.width, stream_codec.height, send_stream); @@ -548,9 +545,4 @@ const char* SimulcastEncoderAdapter::ImplementationName() const { return implementation_name_.c_str(); } -bool SimulcastEncoderAdapter::HasTrustedRateController() const { - RTC_DCHECK_CALLED_SEQUENTIALLY(&encoder_queue_); - return trusted_rate_controller_; -} - } // namespace webrtc diff --git a/media/engine/simulcast_encoder_adapter.h b/media/engine/simulcast_encoder_adapter.h index 3255936b68..52643aa79b 100644 --- a/media/engine/simulcast_encoder_adapter.h +++ b/media/engine/simulcast_encoder_adapter.h @@ -65,7 +65,6 @@ class SimulcastEncoderAdapter : public VideoEncoder { bool SupportsNativeHandle() const override; const char* ImplementationName() const override; - bool HasTrustedRateController() const override; private: struct StreamInfo { @@ -115,7 +114,6 @@ class SimulcastEncoderAdapter : public VideoEncoder { std::stack> stored_encoders_; const absl::optional experimental_boosted_screenshare_qp_; - bool trusted_rate_controller_; }; } // namespace webrtc diff --git a/media/engine/simulcast_encoder_adapter_unittest.cc b/media/engine/simulcast_encoder_adapter_unittest.cc index ff0da4e4ec..bd39595f0c 100644 --- a/media/engine/simulcast_encoder_adapter_unittest.cc +++ b/media/engine/simulcast_encoder_adapter_unittest.cc @@ -242,8 +242,6 @@ class MockVideoEncoder : public VideoEncoder { MOCK_CONST_METHOD0(ImplementationName, const char*()); - MOCK_CONST_METHOD0(HasTrustedRateController, bool(void)); - private: MockVideoEncoderFactory* const factory_; bool supports_native_handle_ = false; @@ -956,58 +954,5 @@ TEST_F(TestSimulcastEncoderAdapterFake, ActivatesCorrectStreamsInInitEncode) { frame_types.resize(3, kVideoFrameKey); EXPECT_EQ(0, adapter_->Encode(input_frame, nullptr, &frame_types)); } - -TEST_F(TestSimulcastEncoderAdapterFake, TrustedRateControl) { - // Set up common settings for three streams. - SimulcastTestFixtureImpl::DefaultSettings( - &codec_, static_cast(kTestTemporalLayerProfile), - kVideoCodecVP8); - rate_allocator_.reset(new SimulcastRateAllocator(codec_)); - adapter_->RegisterEncodeCompleteCallback(this); - - // Only enough start bitrate for the lowest stream. - ASSERT_EQ(3u, codec_.numberOfSimulcastStreams); - codec_.startBitrate = codec_.simulcastStream[0].targetBitrate + - codec_.simulcastStream[1].minBitrate - 1; - - // Input data. - rtc::scoped_refptr buffer(I420Buffer::Create(1280, 720)); - VideoFrame input_frame(buffer, 100, 1000, kVideoRotation_180); - - // No encoder trusted, so simulcast adapter should not be either. - EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); - EXPECT_FALSE(adapter_->HasTrustedRateController()); - - // Encode with three streams. - std::vector original_encoders = - helper_->factory()->encoders(); - - { - // All encoders are trusted, so simulcast adapter should be too. - EXPECT_CALL(*original_encoders[0], HasTrustedRateController()) - .WillRepeatedly(Return(true)); - EXPECT_CALL(*original_encoders[1], HasTrustedRateController()) - .WillRepeatedly(Return(true)); - EXPECT_CALL(*original_encoders[2], HasTrustedRateController()) - .WillRepeatedly(Return(true)); - - EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); - EXPECT_TRUE(adapter_->HasTrustedRateController()); - } - - { - // One encoder not trusted, so simulcast adapter should not be either. - EXPECT_CALL(*original_encoders[0], HasTrustedRateController()) - .WillRepeatedly(Return(true)); - EXPECT_CALL(*original_encoders[1], HasTrustedRateController()) - .WillRepeatedly(Return(true)); - EXPECT_CALL(*original_encoders[2], HasTrustedRateController()) - .WillRepeatedly(Return(false)); - - EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); - EXPECT_FALSE(adapter_->HasTrustedRateController()); - } -} - } // namespace test } // namespace webrtc diff --git a/media/engine/vp8_encoder_simulcast_proxy.cc b/media/engine/vp8_encoder_simulcast_proxy.cc index 957f8d16d6..4d858630b5 100644 --- a/media/engine/vp8_encoder_simulcast_proxy.cc +++ b/media/engine/vp8_encoder_simulcast_proxy.cc @@ -81,8 +81,4 @@ const char* VP8EncoderSimulcastProxy::ImplementationName() const { return encoder_->ImplementationName(); } -bool VP8EncoderSimulcastProxy::HasTrustedRateController() const { - return encoder_->HasTrustedRateController(); -} - } // namespace webrtc diff --git a/media/engine/vp8_encoder_simulcast_proxy.h b/media/engine/vp8_encoder_simulcast_proxy.h index 8b178411cc..685bcbed6e 100644 --- a/media/engine/vp8_encoder_simulcast_proxy.h +++ b/media/engine/vp8_encoder_simulcast_proxy.h @@ -50,7 +50,6 @@ class VP8EncoderSimulcastProxy : public VideoEncoder { bool SupportsNativeHandle() const override; const char* ImplementationName() const override; - bool HasTrustedRateController() const override; private: VideoEncoderFactory* const factory_; diff --git a/media/engine/vp8_encoder_simulcast_proxy_unittest.cc b/media/engine/vp8_encoder_simulcast_proxy_unittest.cc index d7f6e46278..d1dc9a31df 100644 --- a/media/engine/vp8_encoder_simulcast_proxy_unittest.cc +++ b/media/engine/vp8_encoder_simulcast_proxy_unittest.cc @@ -55,8 +55,6 @@ class MockEncoder : public VideoEncoder { MOCK_METHOD2(SetChannelParameters, int32_t(uint32_t packetLoss, int64_t rtt)); MOCK_CONST_METHOD0(ImplementationName, const char*()); - - MOCK_CONST_METHOD0(HasTrustedRateController, bool(void)); }; TEST(VP8EncoderSimulcastProxy, ChoosesCorrectImplementation) { @@ -155,29 +153,5 @@ TEST(VP8EncoderSimulcastProxy, ChoosesCorrectImplementation) { simulcast_disabled_proxy.Release(); } -TEST(VP8EncoderSimulcastProxy, ForwardsTrustedSetting) { - NiceMock* mock_encoder = new NiceMock(); - NiceMock simulcast_factory; - - EXPECT_CALL(*mock_encoder, InitEncode(_, _, _)) - .WillOnce(Return(WEBRTC_VIDEO_CODEC_OK)); - - EXPECT_CALL(simulcast_factory, CreateVideoEncoderProxy(_)) - .Times(1) - .WillOnce(Return(mock_encoder)); - - VP8EncoderSimulcastProxy simulcast_enabled_proxy(&simulcast_factory, - SdpVideoFormat("VP8")); - VideoCodec codec_settings; - webrtc::test::CodecSettings(kVideoCodecVP8, &codec_settings); - EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, - simulcast_enabled_proxy.InitEncode(&codec_settings, 4, 1200)); - - EXPECT_CALL(*mock_encoder, HasTrustedRateController()) - .WillRepeatedly(Return(true)); - - EXPECT_TRUE(simulcast_enabled_proxy.HasTrustedRateController()); -} - } // namespace testing } // namespace webrtc diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index db1cc3f4fb..e97f4c82eb 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -577,7 +577,6 @@ if (rtc_include_tests) { ":video_coding", ":video_coding_utility", "../../:webrtc_common", - "../../api:mock_video_encoder", "../../api:simulcast_test_fixture_api", "../../api/video:encoded_image", "../../api/video:video_frame", @@ -736,7 +735,6 @@ if (rtc_include_tests) { "../..:webrtc_common", "../../api:create_videocodec_test_fixture_api", "../../api:mock_video_codec_factory", - "../../api:mock_video_encoder", "../../api:videocodec_test_fixture_api", "../../api/video:video_frame", "../../api/video:video_frame_i420", @@ -855,7 +853,6 @@ if (rtc_include_tests) { "..:module_api", "../..:webrtc_common", "../../api:create_simulcast_test_fixture_api", - "../../api:mock_video_encoder", "../../api:simulcast_test_fixture_api", "../../api:videocodec_test_fixture_api", "../../api/video:video_bitrate_allocator", diff --git a/modules/video_coding/codecs/multiplex/include/multiplex_encoder_adapter.h b/modules/video_coding/codecs/multiplex/include/multiplex_encoder_adapter.h index 2d98be4f96..531d07870e 100644 --- a/modules/video_coding/codecs/multiplex/include/multiplex_encoder_adapter.h +++ b/modules/video_coding/codecs/multiplex/include/multiplex_encoder_adapter.h @@ -51,7 +51,6 @@ class MultiplexEncoderAdapter : public VideoEncoder { uint32_t new_framerate) override; int Release() override; const char* ImplementationName() const override; - bool HasTrustedRateController() const override; EncodedImageCallback::Result OnEncodedImage( AlphaCodecStream stream_idx, @@ -82,8 +81,6 @@ class MultiplexEncoderAdapter : public VideoEncoder { const bool supports_augmented_data_; int augmenting_data_size_ = 0; - - bool has_trusted_rate_controllers_; }; } // namespace webrtc diff --git a/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc b/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc index 8cc5d3f4ad..ce645743d1 100644 --- a/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc +++ b/modules/video_coding/codecs/multiplex/multiplex_encoder_adapter.cc @@ -53,8 +53,7 @@ MultiplexEncoderAdapter::MultiplexEncoderAdapter( : factory_(factory), associated_format_(associated_format), encoded_complete_callback_(nullptr), - supports_augmented_data_(supports_augmented_data), - has_trusted_rate_controllers_(false) {} + supports_augmented_data_(supports_augmented_data) {} MultiplexEncoderAdapter::~MultiplexEncoderAdapter() { Release(); @@ -93,7 +92,6 @@ int MultiplexEncoderAdapter::InitEncode(const VideoCodec* inst, break; } - has_trusted_rate_controllers_ = true; for (size_t i = 0; i < kAlphaCodecStreams; ++i) { std::unique_ptr encoder = factory_->CreateVideoEncoder(associated_format_); @@ -103,7 +101,6 @@ int MultiplexEncoderAdapter::InitEncode(const VideoCodec* inst, RTC_LOG(LS_ERROR) << "Failed to create multiplex codec index " << i; return rv; } - has_trusted_rate_controllers_ &= encoder->HasTrustedRateController(); adapter_callbacks_.emplace_back(new AdapterEncodedImageCallback( this, static_cast(i))); encoder->RegisterEncodeCompleteCallback(adapter_callbacks_.back().get()); @@ -245,10 +242,6 @@ const char* MultiplexEncoderAdapter::ImplementationName() const { return "MultiplexEncoderAdapter"; } -bool MultiplexEncoderAdapter::HasTrustedRateController() const { - return has_trusted_rate_controllers_; -} - EncodedImageCallback::Result MultiplexEncoderAdapter::OnEncodedImage( AlphaCodecStream stream_idx, const EncodedImage& encodedImage, diff --git a/modules/video_coding/codecs/test/videoprocessor_unittest.cc b/modules/video_coding/codecs/test/videoprocessor_unittest.cc index 8c95a929a1..589a3d898a 100644 --- a/modules/video_coding/codecs/test/videoprocessor_unittest.cc +++ b/modules/video_coding/codecs/test/videoprocessor_unittest.cc @@ -11,7 +11,6 @@ #include #include "absl/memory/memory.h" -#include "api/test/mock_video_encoder.h" #include "api/test/videocodec_test_fixture.h" #include "api/video/i420_buffer.h" #include "common_types.h" // NOLINT(build/include) diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc index df22967ab7..06b2b22095 100644 --- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc +++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc @@ -28,8 +28,6 @@ namespace webrtc { namespace { const char kVp8GfBoostFieldTrial[] = "WebRTC-VP8-GfBoost"; -const char kVp8TrustedRateControllerFieldTrial[] = - "WebRTC-Vp8TrustedRateController"; // QP is obtained from VP8-bitstream for HW, so the QP corresponds to the // bitstream range of [0, 127] and not the user-level range of [0,63]. @@ -160,8 +158,6 @@ LibvpxVp8Encoder::LibvpxVp8Encoder() LibvpxVp8Encoder::LibvpxVp8Encoder(std::unique_ptr interface) : libvpx_(std::move(interface)), use_gf_boost_(webrtc::field_trial::IsEnabled(kVp8GfBoostFieldTrial)), - trusted_rate_controller_( - webrtc::field_trial::IsEnabled(kVp8TrustedRateControllerFieldTrial)), encoded_complete_callback_(nullptr), inited_(false), timestamp_(0), @@ -286,10 +282,6 @@ const char* LibvpxVp8Encoder::ImplementationName() const { return "libvpx"; } -bool LibvpxVp8Encoder::HasTrustedRateController() const { - return trusted_rate_controller_; -} - void LibvpxVp8Encoder::SetStreamState(bool send_stream, int stream_idx) { if (send_stream && !send_stream_[stream_idx]) { // Need a key frame if we have not sent this stream before. diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h index f946a1329d..93888e8ed3 100644 --- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h +++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h @@ -56,8 +56,6 @@ class LibvpxVp8Encoder : public VideoEncoder { const char* ImplementationName() const override; - bool HasTrustedRateController() const override; - static vpx_enc_frame_flags_t EncodeFlags( const TemporalLayers::FrameConfig& references); @@ -90,7 +88,6 @@ class LibvpxVp8Encoder : public VideoEncoder { const std::unique_ptr libvpx_; const bool use_gf_boost_; - const bool trusted_rate_controller_; EncodedImageCallback* encoded_complete_callback_; VideoCodec codec_; diff --git a/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc b/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc index e45d82c8f4..23f141696b 100644 --- a/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc +++ b/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc @@ -12,7 +12,6 @@ #include -#include "api/test/mock_video_encoder.h" #include "common_video/libyuv/include/webrtc_libyuv.h" #include "modules/video_coding/codecs/test/video_codec_unittest.h" #include "modules/video_coding/codecs/vp8/include/vp8.h" diff --git a/modules/video_coding/generic_encoder.cc b/modules/video_coding/generic_encoder.cc index f34398c7c0..b1d7c28abd 100644 --- a/modules/video_coding/generic_encoder.cc +++ b/modules/video_coding/generic_encoder.cc @@ -169,11 +169,6 @@ bool VCMGenericEncoder::SupportsNativeHandle() const { return encoder_->SupportsNativeHandle(); } -bool VCMGenericEncoder::HasTrustedRateController() const { - RTC_DCHECK_RUNS_SERIALIZED(&race_checker_); - return encoder_->HasTrustedRateController(); -} - VCMEncodedFrameCallback::VCMEncodedFrameCallback( EncodedImageCallback* post_encode_callback, media_optimization::MediaOptimization* media_opt) diff --git a/modules/video_coding/generic_encoder.h b/modules/video_coding/generic_encoder.h index 241dd99211..151e93e497 100644 --- a/modules/video_coding/generic_encoder.h +++ b/modules/video_coding/generic_encoder.h @@ -147,7 +147,6 @@ class VCMGenericEncoder { int32_t RequestFrame(const std::vector& frame_types); bool InternalSource() const; bool SupportsNativeHandle() const; - bool HasTrustedRateController() const; private: rtc::RaceChecker race_checker_; diff --git a/modules/video_coding/include/mock/mock_video_codec_interface.h b/modules/video_coding/include/mock/mock_video_codec_interface.h index 8d8dba30b6..c29efeead6 100644 --- a/modules/video_coding/include/mock/mock_video_codec_interface.h +++ b/modules/video_coding/include/mock/mock_video_codec_interface.h @@ -19,6 +19,36 @@ namespace webrtc { +class MockEncodedImageCallback : public EncodedImageCallback { + public: + MOCK_METHOD3(OnEncodedImage, + Result(const EncodedImage& encodedImage, + const CodecSpecificInfo* codecSpecificInfo, + const RTPFragmentationHeader* fragmentation)); +}; + +class MockVideoEncoder : public VideoEncoder { + public: + MOCK_CONST_METHOD2(Version, int32_t(int8_t* version, int32_t length)); + MOCK_METHOD3(InitEncode, + int32_t(const VideoCodec* codecSettings, + int32_t numberOfCores, + size_t maxPayloadSize)); + MOCK_METHOD3(Encode, + int32_t(const VideoFrame& inputImage, + const CodecSpecificInfo* codecSpecificInfo, + const std::vector* frame_types)); + MOCK_METHOD1(RegisterEncodeCompleteCallback, + int32_t(EncodedImageCallback* callback)); + MOCK_METHOD0(Release, int32_t()); + MOCK_METHOD0(Reset, int32_t()); + MOCK_METHOD2(SetChannelParameters, int32_t(uint32_t packetLoss, int64_t rtt)); + MOCK_METHOD2(SetRates, int32_t(uint32_t newBitRate, uint32_t frameRate)); + MOCK_METHOD2(SetRateAllocation, + int32_t(const VideoBitrateAllocation& newBitRate, + uint32_t frameRate)); +}; + class MockDecodedImageCallback : public DecodedImageCallback { public: MOCK_METHOD1(Decoded, int32_t(VideoFrame& decodedImage)); // NOLINT diff --git a/modules/video_coding/utility/simulcast_test_fixture_impl.h b/modules/video_coding/utility/simulcast_test_fixture_impl.h index 558c5150b1..1e64ac5817 100644 --- a/modules/video_coding/utility/simulcast_test_fixture_impl.h +++ b/modules/video_coding/utility/simulcast_test_fixture_impl.h @@ -14,15 +14,14 @@ #include #include -#include "api/test/mock_video_encoder.h" #include "api/test/simulcast_test_fixture.h" #include "api/video/i420_buffer.h" #include "api/video/video_frame.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" #include "common_types.h" // NOLINT(build/include) -#include "modules/video_coding/include/mock/mock_video_codec_interface.h" #include "modules/video_coding/utility/simulcast_rate_allocator.h" +#include "modules/video_coding/include/mock/mock_video_codec_interface.h" namespace webrtc { namespace test { diff --git a/modules/video_coding/video_sender.cc b/modules/video_coding/video_sender.cc index e9db379f8e..4c1e243612 100644 --- a/modules/video_coding/video_sender.cc +++ b/modules/video_coding/video_sender.cc @@ -96,15 +96,10 @@ int32_t VideoSender::RegisterSendCodec(const VideoCodec* sendCodec, numLayers = 1; } - // Disable frame dropper if either: - // * We have screensharing with layers. - // * "WebRTC-FrameDropper" field trial is "Disabled". - // * Encoder has a trusted rate controller. + // If we have screensharing and we have layers, we disable frame dropper. const bool disable_frame_dropper = field_trial::IsDisabled(kFrameDropperFieldTrial) || - (numLayers > 1 && sendCodec->mode == VideoCodecMode::kScreensharing) || - _encoder->HasTrustedRateController(); - + (numLayers > 1 && sendCodec->mode == VideoCodecMode::kScreensharing); if (disable_frame_dropper) { _mediaOpt.EnableFrameDropper(false); } else if (frame_dropper_enabled_) { diff --git a/modules/video_coding/video_sender_unittest.cc b/modules/video_coding/video_sender_unittest.cc index 6c1b7f03fd..3cd9caf65c 100644 --- a/modules/video_coding/video_sender_unittest.cc +++ b/modules/video_coding/video_sender_unittest.cc @@ -11,7 +11,6 @@ #include #include -#include "api/test/mock_video_encoder.h" #include "api/video/i420_buffer.h" #include "modules/video_coding/codecs/vp8/include/vp8.h" #include "modules/video_coding/codecs/vp8/include/vp8_temporal_layers.h" @@ -393,17 +392,6 @@ TEST_F(TestVideoSenderWithMockEncoder, AddFrame(); } -TEST_F(TestVideoSenderWithMockEncoder, ChecksTrustedRateController) { - // Checks that encoder is asked if rate controller is trusted. - EXPECT_CALL(encoder_, HasTrustedRateController()) - .Times(1) - .WillOnce(Return(true)); - - VideoCodec codec; - webrtc::test::CodecSettings(kVideoCodecVP8, &codec); - EXPECT_EQ(0, sender_->RegisterSendCodec(&codec, 1, 1200)); -} - class TestVideoSenderWithVp8 : public TestVideoSender { public: TestVideoSenderWithVp8() diff --git a/video/full_stack_tests.cc b/video/full_stack_tests.cc index 0980fe4283..21a8e621bc 100644 --- a/video/full_stack_tests.cc +++ b/video/full_stack_tests.cc @@ -49,8 +49,6 @@ namespace { static const int kFullStackTestDurationSecs = 45; const char kPacerPushBackExperiment[] = "WebRTC-PacerPushbackExperiment/Enabled/"; -const char kVp8TrustedRateControllerFieldTrial[] = - "WebRTC-Vp8TrustedRateController/Enabled/"; struct ParamsWithLogging : public VideoQualityTest::Params { public: @@ -234,25 +232,6 @@ TEST_P(GenericDescriptorTest, ForemanCif30kbpsWithoutPacketLoss) { fixture->RunWithAnalyzer(foreman_cif); } -// TODO(webrtc:9722): Remove when experiment is cleaned up. -TEST_P(GenericDescriptorTest, - ForemanCif30kbpsWithoutPacketLossTrustedRateControl) { - test::ScopedFieldTrials override_field_trials( - AppendFieldTrials(kVp8TrustedRateControllerFieldTrial)); - auto fixture = CreateVideoQualityTestFixture(); - - ParamsWithLogging foreman_cif; - foreman_cif.call.send_side_bwe = true; - foreman_cif.video[0] = {true, 352, 288, 10, 30000, 30000, 30000, - false, "VP8", 1, 0, 0, false, false, - false, "foreman_cif"}; - foreman_cif.analyzer = { - GetTestName("foreman_cif_30kbps_net_delay_0_0_plr_0_trusted_rate_ctrl"), - 0.0, 0.0, kFullStackTestDurationSecs}; - foreman_cif.call.generic_descriptor = GenericDescriptorEnabled(); - fixture->RunWithAnalyzer(foreman_cif); -} - // Link capacity below default start rate. Automatic down scaling enabled. TEST(FullStackTest, ForemanCifLink150kbpsWithoutPacketLoss) { auto fixture = CreateVideoQualityTestFixture(); @@ -384,9 +363,9 @@ TEST_P(GenericDescriptorTest, ForemanCifPlr5H264) { } TEST(FullStackTest, ForemanCifPlr5H264SpsPpsIdrIsKeyframe) { + auto fixture = CreateVideoQualityTestFixture(); test::ScopedFieldTrials override_field_trials( AppendFieldTrials("WebRTC-SpsPpsIdrIsH264Keyframe/Enabled/")); - auto fixture = CreateVideoQualityTestFixture(); ParamsWithLogging foreman_cif; foreman_cif.call.send_side_bwe = true; @@ -540,21 +519,16 @@ TEST(FullStackTest, ConferenceMotionHd2000kbps100msLimitedQueue) { fixture->RunWithAnalyzer(conf_motion_hd); } -// TODO(webrtc:9722): Remove when experiment is cleaned up. -TEST(FullStackTest, ConferenceMotionHd1TLModerateLimitsWhitelistVp8) { - test::ScopedFieldTrials override_field_trials( - AppendFieldTrials(kVp8TrustedRateControllerFieldTrial)); +TEST(FullStackTest, ConferenceMotionHd1TLModerateLimits) { auto fixture = CreateVideoQualityTestFixture(); - ParamsWithLogging conf_motion_hd; conf_motion_hd.call.send_side_bwe = true; conf_motion_hd.video[0] = { true, 1280, 720, 50, 30000, 3000000, 3000000, false, "VP8", 1, -1, 0, false, false, false, "ConferenceMotion_1280_720_50"}; - conf_motion_hd.analyzer = { - "conference_motion_hd_1tl_moderate_limits_trusted_rate_ctrl", 0.0, 0.0, - kFullStackTestDurationSecs}; + conf_motion_hd.analyzer = {"conference_motion_hd_1tl_moderate_limits", 0.0, + 0.0, kFullStackTestDurationSecs}; conf_motion_hd.config->queue_length_packets = 50; conf_motion_hd.config->loss_percent = 3; conf_motion_hd.config->queue_delay_ms = 100; @@ -616,9 +590,9 @@ TEST(FullStackTest, ConferenceMotionHd4TLModerateLimits) { } TEST(FullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) { + auto fixture = CreateVideoQualityTestFixture(); test::ScopedFieldTrials field_trial( AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/")); - auto fixture = CreateVideoQualityTestFixture(); ParamsWithLogging conf_motion_hd; conf_motion_hd.call.send_side_bwe = true; conf_motion_hd.video[0] = { @@ -672,9 +646,8 @@ const char kScreenshareSimulcastExperiment[] = "WebRTC-SimulcastScreenshare/Enabled/"; TEST(FullStackTest, ScreenshareSlidesVP8_3TL_Simulcast) { - test::ScopedFieldTrials field_trial( - AppendFieldTrials(kScreenshareSimulcastExperiment)); auto fixture = CreateVideoQualityTestFixture(); + test::ScopedFieldTrials field_trial(kScreenshareSimulcastExperiment); ParamsWithLogging screenshare; screenshare.call.send_side_bwe = true; screenshare.screenshare[0] = {true, false, 10}; diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc index 70008c1b98..7e1fd977ea 100644 --- a/video/video_quality_test.cc +++ b/video/video_quality_test.cc @@ -177,9 +177,6 @@ class QualityTestVideoEncoder : public VideoEncoder, const char* ImplementationName() const override { return encoder_->ImplementationName(); } - bool HasTrustedRateController() const override { - return encoder_->HasTrustedRateController(); - } private: // Implement EncodedImageCallback diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc index 3ee2fef940..786ded4c82 100644 --- a/video/video_stream_encoder.cc +++ b/video/video_stream_encoder.cc @@ -363,8 +363,6 @@ VideoStreamEncoder::VideoStreamEncoder( max_framerate_(-1), pending_encoder_reconfiguration_(false), pending_encoder_creation_(false), - crop_width_(0), - crop_height_(0), encoder_start_bitrate_bps_(0), max_data_payload_length_(0), last_observed_bitrate_bps_(0), @@ -378,7 +376,6 @@ VideoStreamEncoder::VideoStreamEncoder( last_frame_log_ms_(clock_->TimeInMilliseconds()), captured_frame_count_(0), dropped_frame_count_(0), - pending_frame_post_time_us_(0), bitrate_observer_(nullptr), encoder_queue_("EncoderQueue") { RTC_DCHECK(encoder_stats_observer);