Index: media/filters/decrypting_video_decoder_unittest.cc |
diff --git a/media/filters/decrypting_video_decoder_unittest.cc b/media/filters/decrypting_video_decoder_unittest.cc |
index 32ea01c84800953552e9921a8cf0fce1899d416a..d30c928bb55aa8b3f2a7382232ac063fc14bf02d 100644 |
--- a/media/filters/decrypting_video_decoder_unittest.cc |
+++ b/media/filters/decrypting_video_decoder_unittest.cc |
@@ -388,6 +388,29 @@ TEST_F(DecryptingVideoDecoderTest, Reset_DuringIdleAfterDecodedOneFrame) { |
Reset(); |
} |
+// Test resetting when the decoder is in kPendingConfigChange state. |
+TEST_F(DecryptingVideoDecoderTest, Reset_DuringPendingConfigChange) { |
+ Initialize(); |
+ EnterNormalDecodingState(); |
+ |
+ EXPECT_CALL(*demuxer_, Read(_)) |
+ .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
+ scoped_refptr<DecoderBuffer>())); |
+ EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
+ EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
+ .WillOnce(SaveArg<1>(&pending_init_cb_)); |
+ |
+ decoder_->Read(base::Bind(&DecryptingVideoDecoderTest::FrameReady, |
+ base::Unretained(this))); |
+ EXPECT_FALSE(pending_init_cb_.is_null()); |
+ |
+ EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, IsNull())); |
+ |
+ Reset(); |
+ base::ResetAndReturn(&pending_init_cb_).Run(true); |
+ message_loop_.RunUntilIdle(); |
+} |
+ |
// Test resetting when the decoder is in kPendingDemuxerRead state. |
TEST_F(DecryptingVideoDecoderTest, Reset_DuringPendingDemuxerRead) { |
Initialize(); |
@@ -493,6 +516,27 @@ TEST_F(DecryptingVideoDecoderTest, Stop_DuringIdleAfterDecodedOneFrame) { |
Stop(); |
} |
+// Test stopping when the decoder is in kPendingConfigChange state. |
+TEST_F(DecryptingVideoDecoderTest, Stop_DuringPendingConfigChange) { |
+ Initialize(); |
+ EnterNormalDecodingState(); |
+ |
+ EXPECT_CALL(*demuxer_, Read(_)) |
+ .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
+ scoped_refptr<DecoderBuffer>())); |
+ EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
+ EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
+ .WillOnce(SaveArg<1>(&pending_init_cb_)); |
+ |
+ decoder_->Read(base::Bind(&DecryptingVideoDecoderTest::FrameReady, |
+ base::Unretained(this))); |
+ EXPECT_FALSE(pending_init_cb_.is_null()); |
+ |
+ EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, IsNull())); |
+ |
+ Stop(); |
+} |
+ |
// Test stopping when the decoder is in kPendingDemuxerRead state. |
TEST_F(DecryptingVideoDecoderTest, Stop_DuringPendingDemuxerRead) { |
Initialize(); |
@@ -591,16 +635,75 @@ TEST_F(DecryptingVideoDecoderTest, DemuxerRead_AbortedDuringReset) { |
} |
// Test config change on the demuxer stream. |
-TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChanged) { |
+TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChange) { |
Initialize(); |
+ EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
+ EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
+ .WillOnce(RunCallback<1>(true)); |
EXPECT_CALL(*demuxer_, Read(_)) |
.WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
- scoped_refptr<DecoderBuffer>())); |
+ scoped_refptr<DecoderBuffer>())) |
+ .WillRepeatedly(ReturnBuffer(encrypted_buffer_)); |
+ EXPECT_CALL(*decryptor_, DecryptAndDecodeVideo(_, _)) |
+ .WillRepeatedly(RunCallback<1>(Decryptor::kSuccess, |
+ decoded_video_frame_)); |
+ EXPECT_CALL(statistics_cb_, OnStatistics(_)); |
+ |
+ ReadAndExpectFrameReadyWith(VideoDecoder::kOk, decoded_video_frame_); |
+} |
+ |
+// Test config change failure. |
+TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChangeFailed) { |
+ Initialize(); |
+ |
+ EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
+ EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
+ .WillOnce(RunCallback<1>(false)); |
+ EXPECT_CALL(*demuxer_, Read(_)) |
+ .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
+ scoped_refptr<DecoderBuffer>())) |
+ .WillRepeatedly(ReturnBuffer(encrypted_buffer_)); |
- // TODO(xhwang): Update this test when kConfigChanged is supported in |
- // DecryptingVideoDecoder. |
ReadAndExpectFrameReadyWith(VideoDecoder::kDecodeError, null_video_frame_); |
} |
+// Test config change on the demuxer stream during a pending reset. |
+TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChangeDuringReset) { |
acolwell GONE FROM CHROMIUM
2013/01/04 16:03:20
How is this test different from Reset_DuringPendin
xhwang
2013/01/05 00:09:55
Renamed (reordered) these tests so that they are m
|
+ Initialize(); |
+ EnterPendingReadState(); |
+ |
+ Reset(); |
+ |
+ // Even during pending reset, the decoder still needs to be initialized with |
+ // the new config. |
+ EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
+ EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
+ .WillOnce(RunCallback<1>(true)); |
+ EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, null_video_frame_)); |
+ |
+ base::ResetAndReturn(&pending_demuxer_read_cb_) |
+ .Run(DemuxerStream::kConfigChanged, NULL); |
+ message_loop_.RunUntilIdle(); |
+} |
+ |
+// Test failed config change during a pending reset. |
+TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChangeFailedDuringReset) { |
+ Initialize(); |
+ EnterPendingReadState(); |
+ |
+ Reset(); |
+ |
+ // Even during pending reset, the decoder still needs to be initialized with |
+ // the new config. |
+ EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
+ EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
+ .WillOnce(RunCallback<1>(false)); |
+ EXPECT_CALL(*this, FrameReady(VideoDecoder::kDecodeError, null_video_frame_)); |
+ |
+ base::ResetAndReturn(&pending_demuxer_read_cb_) |
+ .Run(DemuxerStream::kConfigChanged, NULL); |
+ message_loop_.RunUntilIdle(); |
+} |
+ |
} // namespace media |