Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1482)

Unified Diff: media/filters/decrypting_video_decoder_unittest.cc

Issue 11745026: Encrypted Media: Add config change support in DecryptingVideoDecoder. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« media/filters/decrypting_video_decoder.cc ('K') | « media/filters/decrypting_video_decoder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698