| Index: media/filters/ffmpeg_audio_decoder.cc
|
| diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
|
| index b7e5459df0dc6511945c6df3e3b34ac25cb0a8b8..4fced3fd505c61dfe799445189064229429e7da1 100644
|
| --- a/media/filters/ffmpeg_audio_decoder.cc
|
| +++ b/media/filters/ffmpeg_audio_decoder.cc
|
| @@ -213,34 +213,6 @@ void FFmpegAudioDecoder::DecodeBuffer(
|
|
|
| DCHECK(buffer);
|
|
|
| - // During decode, because reads are issued asynchronously, it is possible to
|
| - // receive multiple end of stream buffers since each decode is acked. When the
|
| - // first end of stream buffer is read, FFmpeg may still have frames queued
|
| - // up in the decoder so we need to go through the decode loop until it stops
|
| - // giving sensible data. After that, the decoder should output empty
|
| - // frames. There are three states the decoder can be in:
|
| - //
|
| - // kNormal: This is the starting state. Buffers are decoded. Decode errors
|
| - // are discarded.
|
| - // kFlushCodec: There isn't any more input data. Call avcodec_decode_audio4
|
| - // until no more data is returned to flush out remaining
|
| - // frames. The input buffer is ignored at this point.
|
| - // kDecodeFinished: All calls return empty frames.
|
| - // kError: Unexpected error happened.
|
| - //
|
| - // These are the possible state transitions.
|
| - //
|
| - // kNormal -> kFlushCodec:
|
| - // When buffer->end_of_stream() is first true.
|
| - // kNormal -> kError:
|
| - // A decoding error occurs and decoding needs to stop.
|
| - // kFlushCodec -> kDecodeFinished:
|
| - // When avcodec_decode_audio4() returns 0 data.
|
| - // kFlushCodec -> kError:
|
| - // When avcodec_decode_audio4() errors out.
|
| - // (any state) -> kNormal:
|
| - // Any time Reset() is called.
|
| -
|
| // Make sure we are notified if http://crbug.com/49709 returns. Issue also
|
| // occurs with some damaged files.
|
| if (!buffer->end_of_stream() && buffer->timestamp() == kNoTimestamp()) {
|
| @@ -265,10 +237,8 @@ void FFmpegAudioDecoder::DecodeBuffer(
|
| return;
|
| }
|
|
|
| - if (buffer->end_of_stream()) {
|
| + if (buffer->end_of_stream())
|
| state_ = kDecodeFinished;
|
| - output_cb_.Run(AudioBuffer::CreateEOSBuffer());
|
| - }
|
|
|
| decode_cb.Run(kOk);
|
| }
|
| @@ -357,7 +327,6 @@ bool FFmpegAudioDecoder::FFmpegDecode(
|
| const int decoded_frames = frame_decoded ? output->frame_count() : 0;
|
| if (IsEndOfStream(result, decoded_frames, buffer)) {
|
| DCHECK_EQ(packet.size, 0);
|
| - output_cb_.Run(AudioBuffer::CreateEOSBuffer());
|
| } else if (discard_helper_->ProcessBuffers(buffer, output)) {
|
| output_cb_.Run(output);
|
| }
|
|
|