Chromium Code Reviews| Index: media/filters/decoder_stream.cc |
| diff --git a/media/filters/decoder_stream.cc b/media/filters/decoder_stream.cc |
| index dde99472240a175c4d67559dec0998361921391e..e5d592efb9c8e017f02dce10b524740b7bd68eed 100644 |
| --- a/media/filters/decoder_stream.cc |
| +++ b/media/filters/decoder_stream.cc |
| @@ -56,7 +56,7 @@ DecoderStream<StreamType>::DecoderStream( |
| decoder_selector_(new DecoderSelector<StreamType>(task_runner, |
| std::move(decoders), |
| media_log)), |
| - decoded_frames_since_fallback_(0), |
| + decoder_produced_a_frame_(false), |
| decoding_eos_(false), |
| pending_decode_requests_(0), |
| duration_tracker_(8), |
| @@ -284,8 +284,6 @@ void DecoderStream<StreamType>::OnDecoderSelected( |
| DCHECK(decoder_); |
| } |
| - previous_decoder_ = std::move(decoder_); |
| - decoded_frames_since_fallback_ = 0; |
| decoder_ = std::move(selected_decoder); |
| if (decrypting_demuxer_stream) { |
| decrypting_demuxer_stream_ = std::move(decrypting_demuxer_stream); |
| @@ -346,7 +344,7 @@ void DecoderStream<StreamType>::Decode( |
| // We don't know if the decoder will error out on first decode yet. Save the |
| // buffer to feed it to the fallback decoder later if needed. |
| - if (!decoded_frames_since_fallback_) |
| + if (!decoder_produced_a_frame_) |
| pending_buffers_.push_back(buffer); |
| // It's possible for a buffer to arrive from the demuxer right after the |
| @@ -431,10 +429,10 @@ void DecoderStream<StreamType>::OnDecodeDone(int buffer_size, |
| switch (status) { |
| case DecodeStatus::DECODE_ERROR: |
| - if (!decoded_frames_since_fallback_) { |
| + if (!decoder_produced_a_frame_) { |
| pending_decode_requests_ = 0; |
| - // Prevent all pending decode requests and outputs form those requests |
| + // Prevent all pending decode requests and outputs from those requests |
| // from being called back. |
| fallback_weak_factory_.InvalidateWeakPtrs(); |
| @@ -500,10 +498,9 @@ void DecoderStream<StreamType>::OnDecodeOutputReady( |
| if (!reset_cb_.is_null()) |
| return; |
| + decoder_produced_a_frame_ = true; |
| traits_.OnDecodeDone(output); |
| - ++decoded_frames_since_fallback_; |
| - |
| // |decoder_| sucessfully decoded a frame. No need to keep buffers for a |
| // fallback decoder. |
| // Note: |fallback_buffers_| might still have buffers, and we will keep |
| @@ -520,13 +517,6 @@ void DecoderStream<StreamType>::OnDecodeOutputReady( |
| // Store decoded output. |
| ready_outputs_.push_back(output); |
| - |
| - // Destruct any previous decoder once we've decoded enough frames to ensure |
| - // that it's no longer in use. |
| - if (previous_decoder_ && |
| - decoded_frames_since_fallback_ > limits::kMaxVideoFrames) { |
| - previous_decoder_.reset(); |
| - } |
| } |
| template <DemuxerStream::Type StreamType> |
| @@ -564,9 +554,7 @@ void DecoderStream<StreamType>::OnBufferReady( |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| DCHECK(pending_demuxer_read_); |
| - if (decoded_frames_since_fallback_) { |
| - DCHECK(pending_demuxer_read_ || state_ == STATE_ERROR) << state_; |
|
watk
2017/04/24 23:13:02
Two lines above we DCHECK(pending_demuxer_read_) s
|
| - } else { |
| + if (!decoder_produced_a_frame_) { |
| DCHECK(state_ == STATE_ERROR || state_ == STATE_REINITIALIZING_DECODER || |
| state_ == STATE_NORMAL) |
| << state_; |
| @@ -577,8 +565,7 @@ void DecoderStream<StreamType>::OnBufferReady( |
| // If parallel decode requests are supported, multiple read requests might |
| // have been sent to the demuxer. The buffers might arrive while the decoder |
| // is reinitializing after falling back on first decode error. |
| - if (state_ == STATE_REINITIALIZING_DECODER && |
| - !decoded_frames_since_fallback_) { |
| + if (state_ == STATE_REINITIALIZING_DECODER && !decoder_produced_a_frame_) { |
| switch (status) { |
| case DemuxerStream::kOk: |
| // Save valid buffers to be consumed by the new decoder. |