| Index: media/filters/decoder_stream.cc
|
| diff --git a/media/filters/decoder_stream.cc b/media/filters/decoder_stream.cc
|
| index 45172901410c22f0f03977224e00f774fe119afc..457726b489f8ccec5f2131a96d9ee72810759f26 100644
|
| --- a/media/filters/decoder_stream.cc
|
| +++ b/media/filters/decoder_stream.cc
|
| @@ -52,6 +52,7 @@ DecoderStream<StreamType>::DecoderStream(
|
| decoders.Pass(),
|
| set_decryptor_ready_cb)),
|
| active_splice_(false),
|
| + decoding_eos_(false),
|
| pending_decode_requests_(0),
|
| weak_factory_(this) {}
|
|
|
| @@ -207,7 +208,7 @@ bool DecoderStream<StreamType>::CanDecodeMore() const {
|
| // empty.
|
| int num_decodes =
|
| static_cast<int>(ready_outputs_.size()) + pending_decode_requests_;
|
| - return num_decodes < GetMaxDecodeRequests();
|
| + return !decoding_eos_ && num_decodes < GetMaxDecodeRequests();
|
| }
|
|
|
| template <DemuxerStream::Type StreamType>
|
| @@ -259,6 +260,10 @@ void DecoderStream<StreamType>::Decode(
|
| int buffer_size = buffer->end_of_stream() ? 0 : buffer->data_size();
|
|
|
| TRACE_EVENT_ASYNC_BEGIN0("media", GetTraceString<StreamType>(), this);
|
| +
|
| + if (buffer->end_of_stream())
|
| + decoding_eos_ = true;
|
| +
|
| ++pending_decode_requests_;
|
| decoder_->Decode(buffer,
|
| base::Bind(&DecoderStream<StreamType>::OnDecodeDone,
|
| @@ -286,6 +291,9 @@ void DecoderStream<StreamType>::OnDecodeDone(int buffer_size,
|
|
|
| TRACE_EVENT_ASYNC_END0("media", GetTraceString<StreamType>(), this);
|
|
|
| + if (end_of_stream)
|
| + decoding_eos_ = false;
|
| +
|
| if (state_ == STATE_ERROR) {
|
| DCHECK(read_cb_.is_null());
|
| return;
|
| @@ -447,7 +455,7 @@ void DecoderStream<StreamType>::OnBufferReady(
|
| Decode(buffer);
|
|
|
| // Read more data if the decoder supports multiple parallel decoding requests.
|
| - if (CanDecodeMore() && !buffer->end_of_stream())
|
| + if (CanDecodeMore())
|
| ReadFromDemuxerStream();
|
| }
|
|
|
|
|