| Index: webrtc/media/engine/videoencodersoftwarefallbackwrapper_unittest.cc
|
| diff --git a/webrtc/media/engine/videoencodersoftwarefallbackwrapper_unittest.cc b/webrtc/media/engine/videoencodersoftwarefallbackwrapper_unittest.cc
|
| index ecf719948f0b7911ef29391ee3904cbd684a5fed..f8521ab888f52c80ea601f2d69f989e10ae19fb9 100644
|
| --- a/webrtc/media/engine/videoencodersoftwarefallbackwrapper_unittest.cc
|
| +++ b/webrtc/media/engine/videoencodersoftwarefallbackwrapper_unittest.cc
|
| @@ -39,7 +39,9 @@ class VideoEncoderSoftwareFallbackWrapperTest : public ::testing::Test {
|
| explicit VideoEncoderSoftwareFallbackWrapperTest(
|
| const std::string& field_trials)
|
| : override_field_trials_(field_trials),
|
| - fallback_wrapper_(cricket::VideoCodec("VP8"), &fake_encoder_) {}
|
| + fake_encoder_(new CountingFakeEncoder()),
|
| + fallback_wrapper_(cricket::VideoCodec("VP8"),
|
| + std::unique_ptr<VideoEncoder>(fake_encoder_)) {}
|
|
|
| class CountingFakeEncoder : public VideoEncoder {
|
| public:
|
| @@ -134,7 +136,8 @@ class VideoEncoderSoftwareFallbackWrapperTest : public ::testing::Test {
|
|
|
| test::ScopedFieldTrials override_field_trials_;
|
| FakeEncodedImageCallback callback_;
|
| - CountingFakeEncoder fake_encoder_;
|
| + // |fake_encoder_| is owned and released by |fallback_wrapper_|.
|
| + CountingFakeEncoder* fake_encoder_;
|
| VideoEncoderSoftwareFallbackWrapper fallback_wrapper_;
|
| VideoCodec codec_ = {};
|
| std::unique_ptr<VideoFrame> frame_;
|
| @@ -157,7 +160,7 @@ void VideoEncoderSoftwareFallbackWrapperTest::EncodeFrame(int expected_ret) {
|
|
|
| void VideoEncoderSoftwareFallbackWrapperTest::UtilizeFallbackEncoder() {
|
| fallback_wrapper_.RegisterEncodeCompleteCallback(&callback_);
|
| - EXPECT_EQ(&callback_, fake_encoder_.encode_complete_callback_);
|
| + EXPECT_EQ(&callback_, fake_encoder_->encode_complete_callback_);
|
|
|
| // Register with failing fake encoder. Should succeed with VP8 fallback.
|
| codec_.codecType = kVideoCodecVP8;
|
| @@ -171,7 +174,7 @@ void VideoEncoderSoftwareFallbackWrapperTest::UtilizeFallbackEncoder() {
|
| rate_allocator_.reset(
|
| new SimulcastRateAllocator(codec_, std::move(tl_factory)));
|
|
|
| - fake_encoder_.init_encode_return_code_ = WEBRTC_VIDEO_CODEC_ERROR;
|
| + fake_encoder_->init_encode_return_code_ = WEBRTC_VIDEO_CODEC_ERROR;
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
|
| fallback_wrapper_.InitEncode(&codec_, kNumCores, kMaxPayloadSize));
|
| EXPECT_EQ(
|
| @@ -180,9 +183,9 @@ void VideoEncoderSoftwareFallbackWrapperTest::UtilizeFallbackEncoder() {
|
| rate_allocator_->GetAllocation(300000, kFramerate), kFramerate));
|
|
|
| int callback_count = callback_.callback_count_;
|
| - int encode_count = fake_encoder_.encode_count_;
|
| + int encode_count = fake_encoder_->encode_count_;
|
| EncodeFrame();
|
| - EXPECT_EQ(encode_count, fake_encoder_.encode_count_);
|
| + EXPECT_EQ(encode_count, fake_encoder_->encode_count_);
|
| EXPECT_EQ(callback_count + 1, callback_.callback_count_);
|
| }
|
|
|
| @@ -203,30 +206,30 @@ void VideoEncoderSoftwareFallbackWrapperTest::FallbackFromEncodeRequest() {
|
| WEBRTC_VIDEO_CODEC_OK,
|
| fallback_wrapper_.SetRateAllocation(
|
| rate_allocator_->GetAllocation(300000, kFramerate), kFramerate));
|
| - EXPECT_EQ(1, fake_encoder_.init_encode_count_);
|
| + EXPECT_EQ(1, fake_encoder_->init_encode_count_);
|
|
|
| // Have the non-fallback encoder request a software fallback.
|
| - fake_encoder_.encode_return_code_ = WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE;
|
| + fake_encoder_->encode_return_code_ = WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE;
|
| int callback_count = callback_.callback_count_;
|
| - int encode_count = fake_encoder_.encode_count_;
|
| + int encode_count = fake_encoder_->encode_count_;
|
| EncodeFrame();
|
| // Single encode request, which returned failure.
|
| - EXPECT_EQ(encode_count + 1, fake_encoder_.encode_count_);
|
| + EXPECT_EQ(encode_count + 1, fake_encoder_->encode_count_);
|
| EXPECT_EQ(callback_count + 1, callback_.callback_count_);
|
| }
|
|
|
| TEST_F(VideoEncoderSoftwareFallbackWrapperTest, InitializesEncoder) {
|
| VideoCodec codec = {};
|
| fallback_wrapper_.InitEncode(&codec, 2, kMaxPayloadSize);
|
| - EXPECT_EQ(1, fake_encoder_.init_encode_count_);
|
| + EXPECT_EQ(1, fake_encoder_->init_encode_count_);
|
| }
|
|
|
| TEST_F(VideoEncoderSoftwareFallbackWrapperTest, EncodeRequestsFallback) {
|
| FallbackFromEncodeRequest();
|
| // After fallback, further encodes shouldn't hit the fake encoder.
|
| - int encode_count = fake_encoder_.encode_count_;
|
| + int encode_count = fake_encoder_->encode_count_;
|
| EncodeFrame();
|
| - EXPECT_EQ(encode_count, fake_encoder_.encode_count_);
|
| + EXPECT_EQ(encode_count, fake_encoder_->encode_count_);
|
| }
|
|
|
| TEST_F(VideoEncoderSoftwareFallbackWrapperTest, CanUtilizeFallbackEncoder) {
|
| @@ -236,20 +239,20 @@ TEST_F(VideoEncoderSoftwareFallbackWrapperTest, CanUtilizeFallbackEncoder) {
|
|
|
| TEST_F(VideoEncoderSoftwareFallbackWrapperTest,
|
| InternalEncoderReleasedDuringFallback) {
|
| - EXPECT_EQ(0, fake_encoder_.release_count_);
|
| + EXPECT_EQ(0, fake_encoder_->release_count_);
|
| UtilizeFallbackEncoder();
|
| - EXPECT_EQ(1, fake_encoder_.release_count_);
|
| + EXPECT_EQ(1, fake_encoder_->release_count_);
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release());
|
| // No extra release when the fallback is released.
|
| - EXPECT_EQ(1, fake_encoder_.release_count_);
|
| + EXPECT_EQ(1, fake_encoder_->release_count_);
|
| }
|
|
|
| TEST_F(VideoEncoderSoftwareFallbackWrapperTest,
|
| InternalEncoderNotEncodingDuringFallback) {
|
| UtilizeFallbackEncoder();
|
| - int encode_count = fake_encoder_.encode_count_;
|
| + int encode_count = fake_encoder_->encode_count_;
|
| EncodeFrame();
|
| - EXPECT_EQ(encode_count, fake_encoder_.encode_count_);
|
| + EXPECT_EQ(encode_count, fake_encoder_->encode_count_);
|
|
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release());
|
| }
|
| @@ -261,7 +264,7 @@ TEST_F(VideoEncoderSoftwareFallbackWrapperTest,
|
| // encoder is being used.
|
| FakeEncodedImageCallback callback2;
|
| fallback_wrapper_.RegisterEncodeCompleteCallback(&callback2);
|
| - EXPECT_EQ(&callback2, fake_encoder_.encode_complete_callback_);
|
| + EXPECT_EQ(&callback2, fake_encoder_->encode_complete_callback_);
|
|
|
| // Encoding a frame using the fallback should arrive at the new callback.
|
| std::vector<FrameType> types(1, kVideoFrameKey);
|
| @@ -275,32 +278,32 @@ TEST_F(VideoEncoderSoftwareFallbackWrapperTest,
|
| TEST_F(VideoEncoderSoftwareFallbackWrapperTest,
|
| SetChannelParametersForwardedDuringFallback) {
|
| UtilizeFallbackEncoder();
|
| - EXPECT_EQ(0, fake_encoder_.set_channel_parameters_count_);
|
| + EXPECT_EQ(0, fake_encoder_->set_channel_parameters_count_);
|
| fallback_wrapper_.SetChannelParameters(1, 1);
|
| - EXPECT_EQ(1, fake_encoder_.set_channel_parameters_count_);
|
| + EXPECT_EQ(1, fake_encoder_->set_channel_parameters_count_);
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release());
|
| }
|
|
|
| TEST_F(VideoEncoderSoftwareFallbackWrapperTest,
|
| SetRatesForwardedDuringFallback) {
|
| UtilizeFallbackEncoder();
|
| - EXPECT_EQ(1, fake_encoder_.set_rates_count_);
|
| + EXPECT_EQ(1, fake_encoder_->set_rates_count_);
|
| fallback_wrapper_.SetRateAllocation(BitrateAllocation(), 1);
|
| - EXPECT_EQ(2, fake_encoder_.set_rates_count_);
|
| + EXPECT_EQ(2, fake_encoder_->set_rates_count_);
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release());
|
| }
|
|
|
| TEST_F(VideoEncoderSoftwareFallbackWrapperTest,
|
| SupportsNativeHandleForwardedWithoutFallback) {
|
| fallback_wrapper_.SupportsNativeHandle();
|
| - EXPECT_EQ(1, fake_encoder_.supports_native_handle_count_);
|
| + EXPECT_EQ(1, fake_encoder_->supports_native_handle_count_);
|
| }
|
|
|
| TEST_F(VideoEncoderSoftwareFallbackWrapperTest,
|
| SupportsNativeHandleNotForwardedDuringFallback) {
|
| UtilizeFallbackEncoder();
|
| fallback_wrapper_.SupportsNativeHandle();
|
| - EXPECT_EQ(0, fake_encoder_.supports_native_handle_count_);
|
| + EXPECT_EQ(0, fake_encoder_->supports_native_handle_count_);
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.Release());
|
| }
|
|
|
| @@ -343,7 +346,7 @@ class ForcedFallbackTest : public VideoEncoderSoftwareFallbackWrapperTest {
|
| ConfigureVp8Codec();
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, fallback_wrapper_.InitEncode(
|
| &codec_, kNumCores, kMaxPayloadSize));
|
| - EXPECT_EQ(1, fake_encoder_.init_encode_count_);
|
| + EXPECT_EQ(1, fake_encoder_->init_encode_count_);
|
| }
|
|
|
| void TearDown() override {
|
| @@ -509,7 +512,7 @@ TEST_F(ForcedFallbackTestEnabled, MultipleStartEndFallback) {
|
| }
|
|
|
| TEST_F(ForcedFallbackTestEnabled, DropsFirstNonNativeFrameAfterFallbackEnds) {
|
| - fake_encoder_.supports_native_handle_ = true;
|
| + fake_encoder_->supports_native_handle_ = true;
|
|
|
| // Bitrate at low threshold.
|
| SetRateAllocation(kLowKbps);
|
| @@ -536,7 +539,7 @@ TEST_F(ForcedFallbackTestEnabled, FallbackIsKeptWhenInitEncodeIsCalled) {
|
| // Re-initialize encoder, still expect fallback.
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
|
| fallback_wrapper_.InitEncode(&codec_, kNumCores, kMaxPayloadSize));
|
| - EXPECT_EQ(1, fake_encoder_.init_encode_count_); // No change.
|
| + EXPECT_EQ(1, fake_encoder_->init_encode_count_); // No change.
|
| SetRateAllocation(kLowKbps);
|
| EncodeFrameAndVerifyLastName("libvpx");
|
| }
|
| @@ -553,7 +556,7 @@ TEST_F(ForcedFallbackTestEnabled, FallbackIsEndedWhenResolutionIsTooLarge) {
|
| codec_.width += 1;
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
|
| fallback_wrapper_.InitEncode(&codec_, kNumCores, kMaxPayloadSize));
|
| - EXPECT_EQ(2, fake_encoder_.init_encode_count_);
|
| + EXPECT_EQ(2, fake_encoder_->init_encode_count_);
|
| SetRateAllocation(kLowKbps);
|
| EncodeFrameAndVerifyLastName("fake-encoder");
|
| }
|
| @@ -570,7 +573,7 @@ TEST_F(ForcedFallbackTestEnabled, FallbackIsEndedForNonValidSettings) {
|
| codec_.VP8()->numberOfTemporalLayers = 2;
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
|
| fallback_wrapper_.InitEncode(&codec_, kNumCores, kMaxPayloadSize));
|
| - EXPECT_EQ(2, fake_encoder_.init_encode_count_);
|
| + EXPECT_EQ(2, fake_encoder_->init_encode_count_);
|
| SetRateAllocation(kLowKbps);
|
| EncodeFrameAndVerifyLastName("fake-encoder");
|
|
|
| @@ -578,7 +581,7 @@ TEST_F(ForcedFallbackTestEnabled, FallbackIsEndedForNonValidSettings) {
|
| codec_.VP8()->numberOfTemporalLayers = 1;
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
|
| fallback_wrapper_.InitEncode(&codec_, kNumCores, kMaxPayloadSize));
|
| - EXPECT_EQ(3, fake_encoder_.init_encode_count_);
|
| + EXPECT_EQ(3, fake_encoder_->init_encode_count_);
|
| // Bitrate at low threshold.
|
| SetRateAllocation(kLowKbps);
|
| EncodeFrameAndVerifyLastName("fake-encoder");
|
| @@ -622,7 +625,7 @@ TEST_F(ForcedFallbackTestEnabled, FallbackIsKeptIfResolutionIsTooSmall) {
|
| codec_.height = kMinPixelsStop / codec_.width - 1;
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
|
| fallback_wrapper_.InitEncode(&codec_, kNumCores, kMaxPayloadSize));
|
| - EXPECT_EQ(1, fake_encoder_.init_encode_count_); // No change
|
| + EXPECT_EQ(1, fake_encoder_->init_encode_count_); // No change
|
| SetRateAllocation(kHighKbps - 1);
|
| EncodeFrameAndVerifyLastName("libvpx");
|
| // Bitrate at high threshold but resolution too small for fallback to end.
|
| @@ -633,7 +636,7 @@ TEST_F(ForcedFallbackTestEnabled, FallbackIsKeptIfResolutionIsTooSmall) {
|
| codec_.height++;
|
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
|
| fallback_wrapper_.InitEncode(&codec_, kNumCores, kMaxPayloadSize));
|
| - EXPECT_EQ(1, fake_encoder_.init_encode_count_); // No change
|
| + EXPECT_EQ(1, fake_encoder_->init_encode_count_); // No change
|
| SetRateAllocation(kHighKbps - 1);
|
| EncodeFrameAndVerifyLastName("libvpx");
|
| // Bitrate at high threshold and resolution large enough for fallback to end.
|
|
|