Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(670)

Unified Diff: media/filters/decoder_stream.cc

Issue 2841553003: media: Discard the previous decoder immediately on fallback (Closed)
Patch Set: Remove out of date comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/decoder_stream.h ('k') | media/filters/gpu_video_decoder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
« no previous file with comments | « media/filters/decoder_stream.h ('k') | media/filters/gpu_video_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698