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

Unified Diff: media/renderers/video_renderer_impl.cc

Issue 1878783002: Cache effective frame count. Make expired frame count useful. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
Index: media/renderers/video_renderer_impl.cc
diff --git a/media/renderers/video_renderer_impl.cc b/media/renderers/video_renderer_impl.cc
index ab7d0795d5769c65466fee5bfdfc3989f242152c..11caf253b4d693b95c1c4bac4851eaf62b8d8457 100644
--- a/media/renderers/video_renderer_impl.cc
+++ b/media/renderers/video_renderer_impl.cc
@@ -201,11 +201,11 @@ scoped_refptr<VideoFrame> VideoRendererImpl::Render(
// If |time_progressing_| is actually true when |render_first_frame_and_stop_|
// is also true, then the ended callback will be harmlessly delayed until
// MaybeStopSinkAfterFirstPaint() runs and the next Render() call comes in.
- const size_t effective_frames =
- MaybeFireEndedCallback_Locked(!render_first_frame_and_stop_);
+ MaybeFireEndedCallback_Locked(!render_first_frame_and_stop_);
if (buffering_state_ == BUFFERING_HAVE_ENOUGH && !received_end_of_stream_ &&
- !effective_frames && (!background_rendering ||
- (!frames_decoded_ && was_background_rendering_))) {
+ !algorithm_->effective_frames_queued() &&
+ (!background_rendering ||
+ (!frames_decoded_ && was_background_rendering_))) {
// Do not set |buffering_state_| here as the lock in FrameReady() may be
// held already and it fire the state changes in the wrong order.
task_runner_->PostTask(
@@ -339,7 +339,7 @@ void VideoRendererImpl::FrameReady(uint32_t sequence_token,
pending_read_ = false;
if (status == VideoFrameStream::DECODE_ERROR) {
- DCHECK(!frame.get());
+ DCHECK(!frame);
PipelineStatus error = PIPELINE_ERROR_DECODE;
task_runner_->PostTask(FROM_HERE, base::Bind(error_cb_, error));
return;
@@ -354,7 +354,7 @@ void VideoRendererImpl::FrameReady(uint32_t sequence_token,
DCHECK_EQ(state_, kPlaying);
// Can happen when demuxers are preparing for a new Seek().
- if (!frame.get()) {
+ if (!frame) {
DCHECK_EQ(status, VideoFrameStream::DEMUXER_READ_ABORTED);
return;
}
@@ -575,7 +575,7 @@ bool VideoRendererImpl::HaveReachedBufferingCap() {
// When the display rate is less than the frame rate, the effective frames
// queued may be much smaller than the actual number of frames queued. Here
// we ensure that frames_queued() doesn't get excessive.
- return algorithm_->EffectiveFramesQueued() >= kMaxVideoFrames ||
+ return algorithm_->effective_frames_queued() >= kMaxVideoFrames ||
algorithm_->frames_queued() >= 3 * kMaxVideoFrames;
}
@@ -595,32 +595,29 @@ void VideoRendererImpl::StopSink() {
was_background_rendering_ = false;
}
-size_t VideoRendererImpl::MaybeFireEndedCallback_Locked(bool time_progressing) {
+void VideoRendererImpl::MaybeFireEndedCallback_Locked(bool time_progressing) {
lock_.AssertAcquired();
// If there's only one frame in the video or Render() was never called, the
// algorithm will have one frame linger indefinitely. So in cases where the
// frame duration is unknown and we've received EOS, fire it once we get down
// to a single frame.
- const size_t effective_frames = algorithm_->EffectiveFramesQueued();
// Don't fire ended if we haven't received EOS or have already done so.
if (!received_end_of_stream_ || rendered_end_of_stream_)
- return effective_frames;
+ return;
// Don't fire ended if time isn't moving and we have frames.
if (!time_progressing && algorithm_->frames_queued())
- return effective_frames;
+ return;
// Fire ended if we have no more effective frames or only ever had one frame.
- if (!effective_frames ||
+ if (!algorithm_->effective_frames_queued() ||
(algorithm_->frames_queued() == 1u &&
- algorithm_->average_frame_duration() == base::TimeDelta())) {
+ algorithm_->average_frame_duration().is_zero())) {
rendered_end_of_stream_ = true;
task_runner_->PostTask(FROM_HERE, ended_cb_);
}
-
- return effective_frames;
}
base::TimeTicks VideoRendererImpl::ConvertMediaTimestamp(
« media/filters/video_renderer_algorithm_unittest.cc ('K') | « media/renderers/video_renderer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698