Index: webrtc/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc |
diff --git a/webrtc/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc b/webrtc/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc |
index de4254595480f94ebb0c5698d2f047cde28d8c77..16991d21b7cea8c330efddf59d1fb13c4a94d798 100644 |
--- a/webrtc/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc |
+++ b/webrtc/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc |
@@ -27,7 +27,7 @@ class VideoDecoderSoftwareFallbackWrapperTest : public ::testing::Test { |
int32_t InitDecode(const VideoCodec* codec_settings, |
int32_t number_of_cores) override { |
++init_decode_count_; |
- return WEBRTC_VIDEO_CODEC_OK; |
+ return init_decode_return_code_; |
} |
int32_t Decode(const EncodedImage& input_image, |
@@ -56,6 +56,7 @@ class VideoDecoderSoftwareFallbackWrapperTest : public ::testing::Test { |
int init_decode_count_ = 0; |
int decode_count_ = 0; |
+ int32_t init_decode_return_code_ = WEBRTC_VIDEO_CODEC_OK; |
int32_t decode_return_code_ = WEBRTC_VIDEO_CODEC_OK; |
DecodedImageCallback* decode_complete_callback_ = nullptr; |
int release_count_ = 0; |
@@ -69,6 +70,32 @@ TEST_F(VideoDecoderSoftwareFallbackWrapperTest, InitializesDecoder) { |
VideoCodec codec = {}; |
fallback_wrapper_.InitDecode(&codec, 2); |
EXPECT_EQ(1, fake_decoder_.init_decode_count_); |
+ |
+ EncodedImage encoded_image; |
+ encoded_image._frameType = kVideoFrameKey; |
+ fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1); |
+ EXPECT_EQ(1, fake_decoder_.init_decode_count_) |
+ << "Initialized decoder should not be reinitialized."; |
+ EXPECT_EQ(1, fake_decoder_.decode_count_); |
+} |
+ |
+TEST_F(VideoDecoderSoftwareFallbackWrapperTest, |
+ UsesFallbackDecoderAfterOnInitDecodeFailure) { |
+ VideoCodec codec = {}; |
+ fake_decoder_.init_decode_return_code_ = WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE; |
+ fallback_wrapper_.InitDecode(&codec, 2); |
+ EXPECT_EQ(1, fake_decoder_.init_decode_count_); |
+ |
+ EncodedImage encoded_image; |
+ encoded_image._frameType = kVideoFrameKey; |
+ fallback_wrapper_.Decode(encoded_image, false, nullptr, nullptr, -1); |
+ EXPECT_EQ(2, fake_decoder_.init_decode_count_) |
+ << "Should have attempted reinitializing the fallback decoder on " |
+ "keyframe."; |
+ // Unfortunately faking a VP8 frame is hard. Rely on no Decode -> using SW |
+ // decoder. |
+ EXPECT_EQ(0, fake_decoder_.decode_count_) |
+ << "Decoder used even though no InitDecode had succeeded."; |
} |
TEST_F(VideoDecoderSoftwareFallbackWrapperTest, |