| Index: media/filters/audio_renderer_impl_unittest.cc
|
| diff --git a/media/filters/audio_renderer_impl_unittest.cc b/media/filters/audio_renderer_impl_unittest.cc
|
| index 92391f83859a5f21a936541c176a4544b5d07654..0976e7e29300a8bd2af099524ec3936472e8061b 100644
|
| --- a/media/filters/audio_renderer_impl_unittest.cc
|
| +++ b/media/filters/audio_renderer_impl_unittest.cc
|
| @@ -29,6 +29,7 @@ using ::testing::_;
|
| using ::testing::AnyNumber;
|
| using ::testing::Invoke;
|
| using ::testing::Return;
|
| +using ::testing::SaveArg;
|
|
|
| namespace media {
|
|
|
| @@ -77,9 +78,10 @@ class AudioRendererImplTest : public ::testing::Test {
|
| EXPECT_CALL(*decoder_, Reset(_))
|
| .WillRepeatedly(Invoke(this, &AudioRendererImplTest::ResetDecoder));
|
|
|
| - // Mock out demuxer reads
|
| + // Mock out demuxer reads.
|
| EXPECT_CALL(demuxer_stream_, Read(_)).WillRepeatedly(
|
| - RunCallback<0>(DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer()));
|
| + RunCallback<0>(DemuxerStream::kOk,
|
| + scoped_refptr<DecoderBuffer>(new DecoderBuffer(0))));
|
| EXPECT_CALL(demuxer_stream_, SupportsConfigChanges())
|
| .WillRepeatedly(Return(true));
|
| AudioParameters out_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
|
| @@ -112,8 +114,9 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void ExpectUnsupportedAudioDecoder() {
|
| - EXPECT_CALL(*decoder_, Initialize(_, _))
|
| - .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED));
|
| + EXPECT_CALL(*decoder_, Initialize(_, _, _))
|
| + .WillOnce(DoAll(SaveArg<2>(&output_cb_),
|
| + RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED)));
|
| }
|
|
|
| MOCK_METHOD1(OnStatistics, void(const PipelineStatistics&));
|
| @@ -141,8 +144,9 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void Initialize() {
|
| - EXPECT_CALL(*decoder_, Initialize(_, _))
|
| - .WillOnce(RunCallback<1>(PIPELINE_OK));
|
| + EXPECT_CALL(*decoder_, Initialize(_, _, _))
|
| + .WillOnce(DoAll(SaveArg<2>(&output_cb_),
|
| + RunCallback<1>(PIPELINE_OK)));
|
| EXPECT_CALL(*decoder_, Stop());
|
| InitializeWithStatus(PIPELINE_OK);
|
|
|
| @@ -162,8 +166,9 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void InitializeAndStop() {
|
| - EXPECT_CALL(*decoder_, Initialize(_, _))
|
| - .WillOnce(RunCallback<1>(PIPELINE_OK));
|
| + EXPECT_CALL(*decoder_, Initialize(_, _, _))
|
| + .WillOnce(DoAll(SaveArg<2>(&output_cb_),
|
| + RunCallback<1>(PIPELINE_OK)));
|
| EXPECT_CALL(*decoder_, Stop());
|
|
|
| WaitableMessageLoopEvent event;
|
| @@ -178,8 +183,9 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void InitializeAndStopDuringDecoderInit() {
|
| - EXPECT_CALL(*decoder_, Initialize(_, _))
|
| - .WillOnce(EnterPendingDecoderInitStateAction(this));
|
| + EXPECT_CALL(*decoder_, Initialize(_, _, _))
|
| + .WillOnce(DoAll(SaveArg<2>(&output_cb_),
|
| + EnterPendingDecoderInitStateAction(this)));
|
| EXPECT_CALL(*decoder_, Stop());
|
|
|
| WaitableMessageLoopEvent event;
|
| @@ -223,9 +229,6 @@ class AudioRendererImplTest : public ::testing::Test {
|
| WaitForPendingRead();
|
| DeliverRemainingAudio();
|
| event.RunAndWaitForStatus(PIPELINE_OK);
|
| -
|
| - // We should have no reads.
|
| - EXPECT_TRUE(decode_cb_.is_null());
|
| }
|
|
|
| void StartRendering() {
|
| @@ -284,6 +287,7 @@ class AudioRendererImplTest : public ::testing::Test {
|
| next_timestamp_->AddFrames(size);
|
|
|
| DeliverBuffer(AudioDecoder::kOk, buffer);
|
| + message_loop_.RunUntilIdle();
|
| }
|
|
|
| void AbortPendingRead() {
|
| @@ -291,13 +295,17 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void DeliverEndOfStream() {
|
| - DeliverBuffer(AudioDecoder::kOk, AudioBuffer::CreateEOSBuffer());
|
| + while (!decode_cb_.is_null()) {
|
| + DeliverBuffer(AudioDecoder::kOk, AudioBuffer::CreateEOSBuffer());
|
| + message_loop_.RunUntilIdle();
|
| + }
|
| }
|
|
|
| // Delivers frames until |renderer_|'s internal buffer is full and no longer
|
| // has pending reads.
|
| void DeliverRemainingAudio() {
|
| SatisfyPendingRead(frames_remaining_in_buffer());
|
| + message_loop_.RunUntilIdle();
|
| }
|
|
|
| // Attempts to consume |requested_frames| frames from |renderer_|'s internal
|
| @@ -465,8 +473,10 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void ResetDecoder(const base::Closure& reset_cb) {
|
| - CHECK(decode_cb_.is_null())
|
| - << "Reset overlapping with reads is not permitted";
|
| + if (!decode_cb_.is_null()) {
|
| + reset_cb_ = reset_cb;
|
| + return;
|
| + }
|
|
|
| message_loop_.PostTask(FROM_HERE, reset_cb);
|
| }
|
| @@ -474,7 +484,12 @@ class AudioRendererImplTest : public ::testing::Test {
|
| void DeliverBuffer(AudioDecoder::Status status,
|
| const scoped_refptr<AudioBuffer>& buffer) {
|
| CHECK(!decode_cb_.is_null());
|
| - base::ResetAndReturn(&decode_cb_).Run(status, buffer);
|
| + if (buffer)
|
| + output_cb_.Run(buffer);
|
| + base::ResetAndReturn(&decode_cb_).Run(status);
|
| +
|
| + if (!reset_cb_.is_null())
|
| + base::ResetAndReturn(&reset_cb_).Run();
|
| }
|
|
|
| MockDemuxerStream demuxer_stream_;
|
| @@ -485,7 +500,9 @@ class AudioRendererImplTest : public ::testing::Test {
|
| TimeTicks time_;
|
|
|
| // Used for satisfying reads.
|
| + AudioDecoder::OutputCB output_cb_;
|
| AudioDecoder::DecodeCB decode_cb_;
|
| + base::Closure reset_cb_;
|
| scoped_ptr<AudioTimestampHelper> next_timestamp_;
|
|
|
| WaitableMessageLoopEvent ended_event_;
|
|
|