| Index: media/filters/ffmpeg_audio_decoder_unittest.cc
|
| ===================================================================
|
| --- media/filters/ffmpeg_audio_decoder_unittest.cc (revision 277175)
|
| +++ media/filters/ffmpeg_audio_decoder_unittest.cc (working copy)
|
| @@ -29,8 +29,7 @@
|
| : decoder_(new FFmpegAudioDecoder(message_loop_.message_loop_proxy(),
|
| LogCB())),
|
| pending_decode_(false),
|
| - pending_reset_(false),
|
| - last_decode_status_(AudioDecoder::kOk) {
|
| + pending_reset_(false) {
|
| FFmpegGlue::InitializeFFmpeg();
|
|
|
| vorbis_extradata_ = ReadTestDataFile("vorbis-extradata");
|
| @@ -70,9 +69,7 @@
|
| vorbis_extradata_->data_size(),
|
| false); // Not encrypted.
|
| decoder_->Initialize(config,
|
| - NewExpectedStatusCB(PIPELINE_OK),
|
| - base::Bind(&FFmpegAudioDecoderTest::OnDecoderOutput,
|
| - base::Unretained(this)));
|
| + NewExpectedStatusCB(PIPELINE_OK));
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| @@ -88,8 +85,6 @@
|
| base::Bind(&FFmpegAudioDecoderTest::DecodeFinished,
|
| base::Unretained(this)));
|
| base::RunLoop().RunUntilIdle();
|
| - EXPECT_FALSE(pending_decode_);
|
| - EXPECT_EQ(AudioDecoder::kOk, last_decode_status_);
|
| }
|
|
|
| void Reset() {
|
| @@ -104,15 +99,27 @@
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| - void OnDecoderOutput(const scoped_refptr<AudioBuffer>& buffer) {
|
| - decoded_audio_.push_back(buffer);
|
| - }
|
| -
|
| - void DecodeFinished(AudioDecoder::Status status) {
|
| + void DecodeFinished(AudioDecoder::Status status,
|
| + const scoped_refptr<AudioBuffer>& buffer) {
|
| EXPECT_TRUE(pending_decode_);
|
| pending_decode_ = false;
|
|
|
| - last_decode_status_ = status;
|
| + if (status == AudioDecoder::kNotEnoughData) {
|
| + EXPECT_TRUE(buffer.get() == NULL);
|
| + Decode();
|
| + return;
|
| + }
|
| +
|
| + decoded_audio_.push_back(buffer);
|
| +
|
| + // If we hit a NULL buffer or have a pending reset, we expect an abort.
|
| + if (buffer.get() == NULL || pending_reset_) {
|
| + EXPECT_TRUE(buffer.get() == NULL);
|
| + EXPECT_EQ(status, AudioDecoder::kAborted);
|
| + return;
|
| + }
|
| +
|
| + EXPECT_EQ(status, AudioDecoder::kOk);
|
| }
|
|
|
| void ResetFinished() {
|
| @@ -144,7 +151,6 @@
|
|
|
| std::deque<scoped_refptr<DecoderBuffer> > encoded_audio_;
|
| std::deque<scoped_refptr<AudioBuffer> > decoded_audio_;
|
| - AudioDecoder::Status last_decode_status_;
|
| };
|
|
|
| TEST_F(FFmpegAudioDecoderTest, Initialize) {
|
| @@ -166,7 +172,6 @@
|
| Decode();
|
| Decode();
|
| Decode();
|
| - Decode();
|
|
|
| ASSERT_EQ(3u, decoded_audio_.size());
|
| ExpectDecodedAudio(0, 0, 2902);
|
| @@ -175,11 +180,21 @@
|
|
|
| // Call one more time to trigger EOS.
|
| Decode();
|
| - ASSERT_EQ(5u, decoded_audio_.size());
|
| + ASSERT_EQ(4u, decoded_audio_.size());
|
| ExpectEndOfStream(3);
|
| Stop();
|
| }
|
|
|
| +TEST_F(FFmpegAudioDecoderTest, DecodeAbort) {
|
| + encoded_audio_.clear();
|
| + encoded_audio_.push_back(NULL);
|
| + Decode();
|
| +
|
| + EXPECT_EQ(decoded_audio_.size(), 1u);
|
| + EXPECT_TRUE(decoded_audio_[0].get() == NULL);
|
| + Stop();
|
| +}
|
| +
|
| TEST_F(FFmpegAudioDecoderTest, PendingDecode_Stop) {
|
| Decode();
|
| Stop();
|
|
|