| 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 27d4e5383ecb5823e8fb21460ad55cba704b626b..9d86b4d61592fd19f287a3de055b8df40a6c7b40 100644
|
| --- a/media/filters/decrypting_video_decoder_unittest.cc
|
| +++ b/media/filters/decrypting_video_decoder_unittest.cc
|
| @@ -46,10 +46,6 @@ static scoped_refptr<DecoderBuffer> CreateFakeEncryptedBuffer() {
|
| // times across multiple test files. Sadly we can't use static for them.
|
| namespace {
|
|
|
| -ACTION_P(ReturnBuffer, buffer) {
|
| - arg0.Run(buffer.get() ? DemuxerStream::kOk : DemuxerStream::kAborted, buffer);
|
| -}
|
| -
|
| ACTION_P(RunCallbackIfNotNull, param) {
|
| if (!arg0.is_null())
|
| arg0.Run(param);
|
| @@ -74,7 +70,6 @@ class DecryptingVideoDecoderTest : public testing::Test {
|
| &DecryptingVideoDecoderTest::RequestDecryptorNotification,
|
| base::Unretained(this)))),
|
| decryptor_(new StrictMock<MockDecryptor>()),
|
| - demuxer_(new StrictMock<MockDemuxerStream>(DemuxerStream::VIDEO)),
|
| encrypted_buffer_(CreateFakeEncryptedBuffer()),
|
| decoded_video_frame_(VideoFrame::CreateBlackFrame(
|
| TestVideoConfig::NormalCodedSize())),
|
| @@ -90,8 +85,7 @@ class DecryptingVideoDecoderTest : public testing::Test {
|
|
|
| void InitializeAndExpectStatus(const VideoDecoderConfig& config,
|
| PipelineStatus status) {
|
| - demuxer_->set_video_decoder_config(config);
|
| - decoder_->Initialize(demuxer_.get(), NewExpectedStatusCB(status),
|
| + decoder_->Initialize(config, NewExpectedStatusCB(status),
|
| base::Bind(&MockStatisticsCB::OnStatistics,
|
| base::Unretained(&statistics_cb_)));
|
| message_loop_.RunUntilIdle();
|
| @@ -112,6 +106,7 @@ class DecryptingVideoDecoderTest : public testing::Test {
|
| }
|
|
|
| void ReadAndExpectFrameReadyWith(
|
| + const scoped_refptr<DecoderBuffer>& buffer,
|
| VideoDecoder::Status status,
|
| const scoped_refptr<VideoFrame>& video_frame) {
|
| if (status != VideoDecoder::kOk)
|
| @@ -121,68 +116,55 @@ class DecryptingVideoDecoderTest : public testing::Test {
|
| else
|
| EXPECT_CALL(*this, FrameReady(status, video_frame));
|
|
|
| - decoder_->Read(base::Bind(&DecryptingVideoDecoderTest::FrameReady,
|
| - base::Unretained(this)));
|
| + decoder_->Decode(buffer,
|
| + base::Bind(&DecryptingVideoDecoderTest::FrameReady,
|
| + base::Unretained(this)));
|
| message_loop_.RunUntilIdle();
|
| }
|
|
|
| // Sets up expectations and actions to put DecryptingVideoDecoder in an
|
| // active normal decoding state.
|
| void EnterNormalDecodingState() {
|
| - EXPECT_CALL(*demuxer_, Read(_))
|
| - .WillOnce(ReturnBuffer(encrypted_buffer_))
|
| - .WillRepeatedly(ReturnBuffer(DecoderBuffer::CreateEOSBuffer()));
|
| EXPECT_CALL(*decryptor_, DecryptAndDecodeVideo(_, _))
|
| .WillOnce(RunCallback<1>(Decryptor::kSuccess, decoded_video_frame_))
|
| .WillRepeatedly(RunCallback<1>(Decryptor::kNeedMoreData,
|
| scoped_refptr<VideoFrame>()));
|
| EXPECT_CALL(statistics_cb_, OnStatistics(_));
|
|
|
| - ReadAndExpectFrameReadyWith(VideoDecoder::kOk, decoded_video_frame_);
|
| + ReadAndExpectFrameReadyWith(
|
| + encrypted_buffer_, VideoDecoder::kOk, decoded_video_frame_);
|
| }
|
|
|
| // Sets up expectations and actions to put DecryptingVideoDecoder in an end
|
| // of stream state. This function must be called after
|
| // EnterNormalDecodingState() to work.
|
| void EnterEndOfStreamState() {
|
| - ReadAndExpectFrameReadyWith(VideoDecoder::kOk, end_of_stream_video_frame_);
|
| - }
|
| -
|
| - // Make the read callback pending by saving and not firing it.
|
| - void EnterPendingReadState() {
|
| - EXPECT_TRUE(pending_demuxer_read_cb_.is_null());
|
| - EXPECT_CALL(*demuxer_, Read(_))
|
| - .WillOnce(SaveArg<0>(&pending_demuxer_read_cb_));
|
| - decoder_->Read(base::Bind(&DecryptingVideoDecoderTest::FrameReady,
|
| - base::Unretained(this)));
|
| - message_loop_.RunUntilIdle();
|
| - // Make sure the Read() on the decoder triggers a Read() on the demuxer.
|
| - EXPECT_FALSE(pending_demuxer_read_cb_.is_null());
|
| + ReadAndExpectFrameReadyWith(DecoderBuffer::CreateEOSBuffer(),
|
| + VideoDecoder::kOk,
|
| + end_of_stream_video_frame_);
|
| }
|
|
|
| // Make the video decode callback pending by saving and not firing it.
|
| void EnterPendingDecodeState() {
|
| EXPECT_TRUE(pending_video_decode_cb_.is_null());
|
| - EXPECT_CALL(*demuxer_, Read(_))
|
| - .WillRepeatedly(ReturnBuffer(encrypted_buffer_));
|
| EXPECT_CALL(*decryptor_, DecryptAndDecodeVideo(encrypted_buffer_, _))
|
| .WillOnce(SaveArg<1>(&pending_video_decode_cb_));
|
|
|
| - decoder_->Read(base::Bind(&DecryptingVideoDecoderTest::FrameReady,
|
| - base::Unretained(this)));
|
| + decoder_->Decode(encrypted_buffer_,
|
| + base::Bind(&DecryptingVideoDecoderTest::FrameReady,
|
| + base::Unretained(this)));
|
| message_loop_.RunUntilIdle();
|
| - // Make sure the Read() on the decoder triggers a DecryptAndDecode() on the
|
| - // decryptor.
|
| + // Make sure the Decode() on the decoder triggers a DecryptAndDecode() on
|
| + // the decryptor.
|
| EXPECT_FALSE(pending_video_decode_cb_.is_null());
|
| }
|
|
|
| void EnterWaitingForKeyState() {
|
| - EXPECT_CALL(*demuxer_, Read(_))
|
| - .WillRepeatedly(ReturnBuffer(encrypted_buffer_));
|
| EXPECT_CALL(*decryptor_, DecryptAndDecodeVideo(_, _))
|
| .WillRepeatedly(RunCallback<1>(Decryptor::kNoKey, null_video_frame_));
|
| - decoder_->Read(base::Bind(&DecryptingVideoDecoderTest::FrameReady,
|
| - base::Unretained(this)));
|
| + decoder_->Decode(encrypted_buffer_,
|
| + base::Bind(&DecryptingVideoDecoderTest::FrameReady,
|
| + base::Unretained(this)));
|
| message_loop_.RunUntilIdle();
|
| }
|
|
|
| @@ -232,15 +214,13 @@ class DecryptingVideoDecoderTest : public testing::Test {
|
| base::MessageLoop message_loop_;
|
| scoped_ptr<DecryptingVideoDecoder> decoder_;
|
| scoped_ptr<StrictMock<MockDecryptor> > decryptor_;
|
| - scoped_ptr<StrictMock<MockDemuxerStream> > demuxer_;
|
| MockStatisticsCB statistics_cb_;
|
|
|
| - DemuxerStream::ReadCB pending_demuxer_read_cb_;
|
| Decryptor::DecoderInitCB pending_init_cb_;
|
| Decryptor::NewKeyCB key_added_cb_;
|
| Decryptor::VideoDecodeCB pending_video_decode_cb_;
|
|
|
| - // Constant buffer/frames to be returned by the |demuxer_| and |decryptor_|.
|
| + // Constant buffer/frames.
|
| scoped_refptr<DecoderBuffer> encrypted_buffer_;
|
| scoped_refptr<VideoFrame> decoded_video_frame_;
|
| scoped_refptr<VideoFrame> null_video_frame_;
|
| @@ -300,16 +280,16 @@ TEST_F(DecryptingVideoDecoderTest, DecryptAndDecode_Normal) {
|
| TEST_F(DecryptingVideoDecoderTest, DecryptAndDecode_DecodeError) {
|
| Initialize();
|
|
|
| - EXPECT_CALL(*demuxer_, Read(_))
|
| - .WillRepeatedly(ReturnBuffer(encrypted_buffer_));
|
| EXPECT_CALL(*decryptor_, DecryptAndDecodeVideo(_, _))
|
| .WillRepeatedly(RunCallback<1>(Decryptor::kError,
|
| - scoped_refptr<VideoFrame>(NULL)));
|
| + scoped_refptr<VideoFrame>(NULL)));
|
|
|
| - ReadAndExpectFrameReadyWith(VideoDecoder::kDecodeError, null_video_frame_);
|
| + ReadAndExpectFrameReadyWith(
|
| + encrypted_buffer_, VideoDecoder::kDecodeError, null_video_frame_);
|
|
|
| // After a decode error occurred, all following read returns kDecodeError.
|
| - ReadAndExpectFrameReadyWith(VideoDecoder::kDecodeError, null_video_frame_);
|
| + ReadAndExpectFrameReadyWith(
|
| + encrypted_buffer_, VideoDecoder::kDecodeError, null_video_frame_);
|
| }
|
|
|
| // Test the case where the decryptor returns kNeedMoreData to ask for more
|
| @@ -317,9 +297,6 @@ TEST_F(DecryptingVideoDecoderTest, DecryptAndDecode_DecodeError) {
|
| TEST_F(DecryptingVideoDecoderTest, DecryptAndDecode_NeedMoreData) {
|
| Initialize();
|
|
|
| - EXPECT_CALL(*demuxer_, Read(_))
|
| - .Times(2)
|
| - .WillRepeatedly(ReturnBuffer(encrypted_buffer_));
|
| EXPECT_CALL(*decryptor_, DecryptAndDecodeVideo(_, _))
|
| .WillOnce(RunCallback<1>(Decryptor::kNeedMoreData,
|
| scoped_refptr<VideoFrame>()))
|
| @@ -328,7 +305,10 @@ TEST_F(DecryptingVideoDecoderTest, DecryptAndDecode_NeedMoreData) {
|
| EXPECT_CALL(statistics_cb_, OnStatistics(_))
|
| .Times(2);
|
|
|
| - ReadAndExpectFrameReadyWith(VideoDecoder::kOk, decoded_video_frame_);
|
| + ReadAndExpectFrameReadyWith(
|
| + encrypted_buffer_, VideoDecoder::kNotEnoughData, decoded_video_frame_);
|
| + ReadAndExpectFrameReadyWith(
|
| + encrypted_buffer_, VideoDecoder::kOk, decoded_video_frame_);
|
| }
|
|
|
| // Test the case where the decryptor receives end-of-stream buffer.
|
| @@ -338,17 +318,6 @@ 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 the case where the a key is added when the decryptor is in
|
| // kWaitingForKey state.
|
| TEST_F(DecryptingVideoDecoderTest, KeyAdded_DuringWaitingForKey) {
|
| @@ -398,35 +367,6 @@ TEST_F(DecryptingVideoDecoderTest, Reset_DuringIdleAfterDecodedOneFrame) {
|
| Reset();
|
| }
|
|
|
| -// 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();
|
| -
|
| - EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, IsNull()));
|
| -
|
| - Reset();
|
| - base::ResetAndReturn(&pending_demuxer_read_cb_).Run(DemuxerStream::kOk,
|
| - encrypted_buffer_);
|
| - 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 kPendingDecode state.
|
| TEST_F(DecryptingVideoDecoderTest, Reset_DuringPendingDecode) {
|
| Initialize();
|
| @@ -466,11 +406,10 @@ TEST_F(DecryptingVideoDecoderTest, Reset_AfterReset) {
|
|
|
| // Test stopping when the decoder is in kDecryptorRequested state.
|
| TEST_F(DecryptingVideoDecoderTest, Stop_DuringDecryptorRequested) {
|
| - demuxer_->set_video_decoder_config(TestVideoConfig::NormalEncrypted());
|
| DecryptorReadyCB decryptor_ready_cb;
|
| EXPECT_CALL(*this, RequestDecryptorNotification(_))
|
| .WillOnce(SaveArg<0>(&decryptor_ready_cb));
|
| - decoder_->Initialize(demuxer_.get(),
|
| + decoder_->Initialize(TestVideoConfig::NormalEncrypted(),
|
| NewExpectedStatusCB(DECODER_ERROR_NOT_SUPPORTED),
|
| base::Bind(&MockStatisticsCB::OnStatistics,
|
| base::Unretained(&statistics_cb_)));
|
| @@ -513,19 +452,6 @@ TEST_F(DecryptingVideoDecoderTest, Stop_DuringIdleAfterDecodedOneFrame) {
|
| Stop();
|
| }
|
|
|
| -// Test stopping when the decoder is in kPendingDemuxerRead state.
|
| -TEST_F(DecryptingVideoDecoderTest, Stop_DuringPendingDemuxerRead) {
|
| - Initialize();
|
| - EnterPendingReadState();
|
| -
|
| - EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, IsNull()));
|
| -
|
| - Stop();
|
| - base::ResetAndReturn(&pending_demuxer_read_cb_).Run(DemuxerStream::kOk,
|
| - encrypted_buffer_);
|
| - message_loop_.RunUntilIdle();
|
| -}
|
| -
|
| // Test stopping when the decoder is in kPendingDecode state.
|
| TEST_F(DecryptingVideoDecoderTest, Stop_DuringPendingDecode) {
|
| Initialize();
|
|
|