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..731287d64ac785094ad99eb4141f64a8d4b3a8fe 100644 |
--- a/media/filters/decrypting_video_decoder_unittest.cc |
+++ b/media/filters/decrypting_video_decoder_unittest.cc |
@@ -339,6 +339,51 @@ TEST_F(DecryptingVideoDecoderTest, DecryptAndDecode_EndOfStream) { |
EnterEndOfStreamState(); |
} |
+// Test aborted read on the demuxer stream. |
+TEST_F(DecryptingVideoDecoderTest, DemuxerRead_Aborted) { |
+ Initialize(); |
+ |
+ // ReturnBuffer() with NULL triggers aborted demuxer read. |
+ EXPECT_CALL(*demuxer_, Read(_)) |
+ .WillOnce(ReturnBuffer(scoped_refptr<DecoderBuffer>())); |
+ |
+ ReadAndExpectFrameReadyWith(VideoDecoder::kOk, null_video_frame_); |
+} |
+ |
+// Test config change on the demuxer stream. |
+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>())) |
+ .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_)); |
+ |
+ ReadAndExpectFrameReadyWith(VideoDecoder::kDecodeError, null_video_frame_); |
+} |
+ |
// Test the case where the a key is added when the decryptor is in |
// kWaitingForKey state. |
TEST_F(DecryptingVideoDecoderTest, KeyAdded_DuringWaitingForKey) { |
@@ -388,8 +433,9 @@ TEST_F(DecryptingVideoDecoderTest, Reset_DuringIdleAfterDecodedOneFrame) { |
Reset(); |
} |
-// Test resetting when the decoder is in kPendingDemuxerRead state. |
-TEST_F(DecryptingVideoDecoderTest, Reset_DuringPendingDemuxerRead) { |
+// Test resetting when the decoder is in kPendingDemuxerRead state and the read |
+// callback is returned with kOk. |
+TEST_F(DecryptingVideoDecoderTest, Reset_DuringDemuxerRead_Ok) { |
Initialize(); |
EnterPendingReadState(); |
@@ -401,6 +447,85 @@ TEST_F(DecryptingVideoDecoderTest, Reset_DuringPendingDemuxerRead) { |
message_loop_.RunUntilIdle(); |
} |
+// Test resetting when the decoder is in kPendingDemuxerRead state and the read |
+// callback is returned with kAborted. |
+TEST_F(DecryptingVideoDecoderTest, Reset_DuringDemuxerRead_Aborted) { |
+ Initialize(); |
+ EnterPendingReadState(); |
+ |
+ // Make sure we get a NULL video frame returned. |
+ EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, IsNull())); |
+ |
+ Reset(); |
+ base::ResetAndReturn(&pending_demuxer_read_cb_).Run(DemuxerStream::kAborted, |
+ NULL); |
+ message_loop_.RunUntilIdle(); |
+} |
+ |
+// Test resetting when the decoder is in kPendingDemuxerRead state and the read |
+// callback is returned with kConfigChanged. |
+TEST_F(DecryptingVideoDecoderTest, Reset_DuringDemuxerRead_ConfigChange) { |
+ 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 resetting when the decoder is in kPendingDemuxerRead state, the read |
+// callback is returned with kConfigChanged and the config change fails. |
+TEST_F(DecryptingVideoDecoderTest, Reset_DuringDemuxerRead_ConfigChangeFailed) { |
+ 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(); |
+} |
+ |
+// 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))); |
+ message_loop_.RunUntilIdle(); |
+ 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 kPendingDecode state. |
TEST_F(DecryptingVideoDecoderTest, Reset_DuringPendingDecode) { |
Initialize(); |
@@ -493,6 +618,28 @@ 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))); |
+ message_loop_.RunUntilIdle(); |
+ 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(); |
@@ -565,42 +712,4 @@ TEST_F(DecryptingVideoDecoderTest, Stop_AfterStop) { |
Stop(); |
} |
-// Test aborted read on the demuxer stream. |
-TEST_F(DecryptingVideoDecoderTest, DemuxerRead_Aborted) { |
- Initialize(); |
- |
- // ReturnBuffer() with NULL triggers aborted demuxer read. |
- EXPECT_CALL(*demuxer_, Read(_)) |
- .WillOnce(ReturnBuffer(scoped_refptr<DecoderBuffer>())); |
- |
- ReadAndExpectFrameReadyWith(VideoDecoder::kOk, null_video_frame_); |
-} |
- |
-// Test aborted read on the demuxer stream when the decoder is being reset. |
-TEST_F(DecryptingVideoDecoderTest, DemuxerRead_AbortedDuringReset) { |
- Initialize(); |
- EnterPendingReadState(); |
- |
- // Make sure we get a NULL video frame returned. |
- EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, IsNull())); |
- |
- Reset(); |
- base::ResetAndReturn(&pending_demuxer_read_cb_).Run(DemuxerStream::kAborted, |
- NULL); |
- message_loop_.RunUntilIdle(); |
-} |
- |
-// Test config change on the demuxer stream. |
-TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChanged) { |
- Initialize(); |
- |
- EXPECT_CALL(*demuxer_, Read(_)) |
- .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
- scoped_refptr<DecoderBuffer>())); |
- |
- // TODO(xhwang): Update this test when kConfigChanged is supported in |
- // DecryptingVideoDecoder. |
- ReadAndExpectFrameReadyWith(VideoDecoder::kDecodeError, null_video_frame_); |
-} |
- |
} // namespace media |