| 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 c84ccbafcdc69265e651733bb8c45b715db77b52..0f58c7afd0f04866a0da6ed8ef9b5a916a5fdc26 100644
|
| --- a/media/filters/audio_renderer_impl_unittest.cc
|
| +++ b/media/filters/audio_renderer_impl_unittest.cc
|
| @@ -64,8 +64,8 @@ class AudioRendererImplTest : public ::testing::Test {
|
| demuxer_stream_.set_audio_decoder_config(audio_config);
|
|
|
| // Used to save callbacks and run them at a later time.
|
| - EXPECT_CALL(*decoder_, Read(_))
|
| - .WillRepeatedly(Invoke(this, &AudioRendererImplTest::ReadDecoder));
|
| + EXPECT_CALL(*decoder_, Decode(_, _))
|
| + .WillRepeatedly(Invoke(this, &AudioRendererImplTest::DecodeDecoder));
|
|
|
| EXPECT_CALL(*decoder_, Reset(_))
|
| .WillRepeatedly(Invoke(this, &AudioRendererImplTest::ResetDecoder));
|
| @@ -81,6 +81,10 @@ class AudioRendererImplTest : public ::testing::Test {
|
| EXPECT_CALL(*decoder_, samples_per_second())
|
| .WillRepeatedly(Return(audio_config.samples_per_second()));
|
|
|
| + // Mock out demuxer reads
|
| + EXPECT_CALL(demuxer_stream_, Read(_)).WillRepeatedly(
|
| + RunCallback<0>(DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer()));
|
| +
|
| ScopedVector<AudioDecoder> decoders;
|
| decoders.push_back(decoder_);
|
| sink_ = new FakeAudioRendererSink();
|
| @@ -105,7 +109,7 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void ExpectUnsupportedAudioDecoder() {
|
| - EXPECT_CALL(*decoder_, Initialize(_, _, _))
|
| + EXPECT_CALL(*decoder_, Initialize(_, _))
|
| .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED));
|
| }
|
|
|
| @@ -116,7 +120,7 @@ class AudioRendererImplTest : public ::testing::Test {
|
| .WillRepeatedly(Return(CHANNEL_LAYOUT_UNSUPPORTED));
|
| EXPECT_CALL(*decoder_, samples_per_second())
|
| .WillRepeatedly(Return(0));
|
| - EXPECT_CALL(*decoder_, Initialize(_, _, _))
|
| + EXPECT_CALL(*decoder_, Initialize(_, _))
|
| .WillOnce(RunCallback<1>(PIPELINE_OK));
|
| }
|
|
|
| @@ -130,7 +134,7 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void Initialize() {
|
| - EXPECT_CALL(*decoder_, Initialize(_, _, _))
|
| + EXPECT_CALL(*decoder_, Initialize(_, _))
|
| .WillOnce(RunCallback<1>(PIPELINE_OK));
|
| InitializeWithStatus(PIPELINE_OK);
|
|
|
| @@ -159,11 +163,11 @@ class AudioRendererImplTest : public ::testing::Test {
|
| event.RunAndWaitForStatus(expected);
|
|
|
| // We should have no reads.
|
| - EXPECT_TRUE(read_cb_.is_null());
|
| + EXPECT_TRUE(decode_cb_.is_null());
|
| }
|
|
|
| void InitializeAndStop() {
|
| - EXPECT_CALL(*decoder_, Initialize(_, _, _))
|
| + EXPECT_CALL(*decoder_, Initialize(_, _))
|
| .WillOnce(RunCallback<1>(PIPELINE_OK));
|
| WaitableMessageLoopEvent event;
|
| renderer_->Initialize(
|
| @@ -189,7 +193,7 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| void InitializeAndStopDuringDecoderInit() {
|
| - EXPECT_CALL(*decoder_, Initialize(_, _, _))
|
| + EXPECT_CALL(*decoder_, Initialize(_, _))
|
| .WillOnce(EnterPendingDecoderInitStateAction(this));
|
| WaitableMessageLoopEvent event;
|
| renderer_->Initialize(
|
| @@ -242,12 +246,12 @@ class AudioRendererImplTest : public ::testing::Test {
|
| // Fill entire buffer to complete prerolling.
|
| WaitableMessageLoopEvent event;
|
| renderer_->Preroll(timestamp, event.GetPipelineStatusCB());
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
| DeliverRemainingAudio();
|
| event.RunAndWaitForStatus(PIPELINE_OK);
|
|
|
| // We should have no reads.
|
| - EXPECT_TRUE(read_cb_.is_null());
|
| + EXPECT_TRUE(decode_cb_.is_null());
|
| }
|
|
|
| void Play() {
|
| @@ -278,28 +282,28 @@ class AudioRendererImplTest : public ::testing::Test {
|
| }
|
|
|
| bool IsReadPending() const {
|
| - return !read_cb_.is_null();
|
| + return !decode_cb_.is_null();
|
| }
|
|
|
| - void WaitForPendingRead() {
|
| - SCOPED_TRACE("WaitForPendingRead()");
|
| - if (!read_cb_.is_null())
|
| + void WaitForPendingDecode() {
|
| + SCOPED_TRACE("WaitForPendingDecode()");
|
| + if (!decode_cb_.is_null())
|
| return;
|
|
|
| - DCHECK(wait_for_pending_read_cb_.is_null());
|
| + DCHECK(wait_for_pending_decode_cb_.is_null());
|
|
|
| WaitableMessageLoopEvent event;
|
| - wait_for_pending_read_cb_ = event.GetClosure();
|
| + wait_for_pending_decode_cb_ = event.GetClosure();
|
| event.RunAndWait();
|
|
|
| - DCHECK(!read_cb_.is_null());
|
| - DCHECK(wait_for_pending_read_cb_.is_null());
|
| + DCHECK(!decode_cb_.is_null());
|
| + DCHECK(wait_for_pending_decode_cb_.is_null());
|
| }
|
|
|
| // Delivers |size| frames with value kPlayingAudio to |renderer_|.
|
| void SatisfyPendingRead(int size) {
|
| CHECK_GT(size, 0);
|
| - CHECK(!read_cb_.is_null());
|
| + CHECK(!decode_cb_.is_null());
|
|
|
| scoped_refptr<AudioBuffer> buffer =
|
| MakePlanarAudioBuffer<float>(kSampleFormat,
|
| @@ -409,7 +413,7 @@ class AudioRendererImplTest : public ::testing::Test {
|
| // Drain internal buffer, we should have a pending read.
|
| int total_frames = frames_buffered();
|
| int frames_filled = ConsumeAllBufferedData();
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| // Due to how the cross-fade algorithm works we won't get an exact match
|
| // between the ideal and expected number of frames consumed. In the faster
|
| @@ -466,28 +470,29 @@ class AudioRendererImplTest : public ::testing::Test {
|
| return time_;
|
| }
|
|
|
| - void ReadDecoder(const AudioDecoder::ReadCB& read_cb) {
|
| + void DecodeDecoder(const scoped_refptr<DecoderBuffer>& buffer,
|
| + const AudioDecoder::DecodeCB& decode_cb) {
|
| // We shouldn't ever call Read() after Stop():
|
| EXPECT_TRUE(stop_decoder_cb_.is_null());
|
|
|
| // TODO(scherkus): Make this a DCHECK after threading semantics are fixed.
|
| if (base::MessageLoop::current() != &message_loop_) {
|
| message_loop_.PostTask(FROM_HERE, base::Bind(
|
| - &AudioRendererImplTest::ReadDecoder,
|
| - base::Unretained(this), read_cb));
|
| + &AudioRendererImplTest::DecodeDecoder,
|
| + base::Unretained(this), buffer, decode_cb));
|
| return;
|
| }
|
|
|
| - CHECK(read_cb_.is_null()) << "Overlapping reads are not permitted";
|
| - read_cb_ = read_cb;
|
| + CHECK(decode_cb_.is_null()) << "Overlapping decodes are not permitted";
|
| + decode_cb_ = decode_cb;
|
|
|
| - // Wake up WaitForPendingRead() if needed.
|
| - if (!wait_for_pending_read_cb_.is_null())
|
| - base::ResetAndReturn(&wait_for_pending_read_cb_).Run();
|
| + // Wake up WaitForPendingDecode() if needed.
|
| + if (!wait_for_pending_decode_cb_.is_null())
|
| + base::ResetAndReturn(&wait_for_pending_decode_cb_).Run();
|
| }
|
|
|
| void ResetDecoder(const base::Closure& reset_cb) {
|
| - CHECK(read_cb_.is_null())
|
| + CHECK(decode_cb_.is_null())
|
| << "Reset overlapping with reads is not permitted";
|
|
|
| message_loop_.PostTask(FROM_HERE, reset_cb);
|
| @@ -503,8 +508,8 @@ class AudioRendererImplTest : public ::testing::Test {
|
|
|
| void DeliverBuffer(AudioDecoder::Status status,
|
| const scoped_refptr<AudioBuffer>& buffer) {
|
| - CHECK(!read_cb_.is_null());
|
| - base::ResetAndReturn(&read_cb_).Run(status, buffer);
|
| + CHECK(!decode_cb_.is_null());
|
| + base::ResetAndReturn(&decode_cb_).Run(status, buffer);
|
| }
|
|
|
| MockDemuxerStream demuxer_stream_;
|
| @@ -515,13 +520,13 @@ class AudioRendererImplTest : public ::testing::Test {
|
| TimeTicks time_;
|
|
|
| // Used for satisfying reads.
|
| - AudioDecoder::ReadCB read_cb_;
|
| + AudioDecoder::DecodeCB decode_cb_;
|
| scoped_ptr<AudioTimestampHelper> next_timestamp_;
|
|
|
| WaitableMessageLoopEvent ended_event_;
|
|
|
| - // Run during ReadDecoder() to unblock WaitForPendingRead().
|
| - base::Closure wait_for_pending_read_cb_;
|
| + // Run during DecodeDecoder() to unblock WaitForPendingDecode().
|
| + base::Closure wait_for_pending_decode_cb_;
|
| base::Closure stop_decoder_cb_;
|
|
|
| PipelineStatusCB init_decoder_cb_;
|
| @@ -555,7 +560,7 @@ TEST_F(AudioRendererImplTest, Play) {
|
|
|
| // Drain internal buffer, we should have a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
| }
|
|
|
| TEST_F(AudioRendererImplTest, EndOfStream) {
|
| @@ -580,7 +585,7 @@ TEST_F(AudioRendererImplTest, Underflow) {
|
|
|
| // Drain internal buffer, we should have a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| // Verify the next FillBuffer() call triggers the underflow callback
|
| // since the decoder hasn't delivered any data after it was drained.
|
| @@ -614,7 +619,7 @@ TEST_F(AudioRendererImplTest, Underflow_FollowedByFlush) {
|
|
|
| // Drain internal buffer, we should have a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| // Verify the next FillBuffer() call triggers the underflow callback
|
| // since the decoder hasn't delivered any data after it was drained.
|
| @@ -648,7 +653,7 @@ TEST_F(AudioRendererImplTest, Underflow_EndOfStream) {
|
|
|
| // Drain internal buffer, we should have a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| // Verify the next FillBuffer() call triggers the underflow callback
|
| // since the decoder hasn't delivered any data after it was drained.
|
| @@ -657,7 +662,7 @@ TEST_F(AudioRendererImplTest, Underflow_EndOfStream) {
|
|
|
| // Deliver a little bit of data.
|
| SatisfyPendingRead(kDataSize);
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| // Verify we're getting muted audio during underflow.
|
| bool muted = false;
|
| @@ -685,7 +690,7 @@ TEST_F(AudioRendererImplTest, Underflow_ResumeFromCallback) {
|
|
|
| // Drain internal buffer, we should have a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| // Verify the next FillBuffer() call triggers the underflow callback
|
| // since the decoder hasn't delivered any data after it was drained.
|
| @@ -712,7 +717,7 @@ TEST_F(AudioRendererImplTest, Underflow_SetPlaybackRate) {
|
|
|
| // Drain internal buffer, we should have a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| EXPECT_EQ(FakeAudioRendererSink::kPlaying, sink_->state());
|
|
|
| @@ -748,7 +753,7 @@ TEST_F(AudioRendererImplTest, Underflow_PausePlay) {
|
|
|
| // Drain internal buffer, we should have a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| EXPECT_EQ(FakeAudioRendererSink::kPlaying, sink_->state());
|
|
|
| @@ -778,7 +783,7 @@ TEST_F(AudioRendererImplTest, AbortPendingRead_Preroll) {
|
| // Start prerolling and wait for a read.
|
| WaitableMessageLoopEvent event;
|
| renderer_->Preroll(TimeDelta(), event.GetPipelineStatusCB());
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| // Simulate the decoder aborting the pending read.
|
| AbortPendingRead();
|
| @@ -798,7 +803,7 @@ TEST_F(AudioRendererImplTest, AbortPendingRead_Pause) {
|
|
|
| // Partially drain internal buffer so we get a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered() / 2, NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| // Start pausing.
|
| WaitableMessageLoopEvent event;
|
| @@ -823,7 +828,7 @@ TEST_F(AudioRendererImplTest, AbortPendingRead_Flush) {
|
|
|
| // Partially drain internal buffer so we get a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered() / 2, NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| Pause();
|
|
|
| @@ -851,7 +856,7 @@ TEST_F(AudioRendererImplTest, PendingRead_Pause) {
|
|
|
| // Partially drain internal buffer so we get a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered() / 2, NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| // Start pausing.
|
| WaitableMessageLoopEvent event;
|
| @@ -875,7 +880,7 @@ TEST_F(AudioRendererImplTest, PendingRead_Flush) {
|
|
|
| // Partially drain internal buffer so we get a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered() / 2, NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| Pause();
|
|
|
| @@ -903,7 +908,7 @@ TEST_F(AudioRendererImplTest, PendingRead_Stop) {
|
|
|
| // Partially drain internal buffer so we get a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered() / 2, NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| Pause();
|
|
|
| @@ -928,7 +933,7 @@ TEST_F(AudioRendererImplTest, PendingFlush_Stop) {
|
|
|
| // Partially drain internal buffer so we get a pending read.
|
| EXPECT_TRUE(ConsumeBufferedData(frames_buffered() / 2, NULL));
|
| - WaitForPendingRead();
|
| + WaitForPendingDecode();
|
|
|
| Pause();
|
|
|
|
|