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(); |