Index: media/renderers/video_renderer_impl.cc |
diff --git a/media/renderers/video_renderer_impl.cc b/media/renderers/video_renderer_impl.cc |
index 8d3f2ae0e41c75f9cbdc64fa902829294493961b..722438681254ddc4fa26a895a6f64e0540c15e68 100644 |
--- a/media/renderers/video_renderer_impl.cc |
+++ b/media/renderers/video_renderer_impl.cc |
@@ -239,13 +239,11 @@ scoped_refptr<VideoFrame> VideoRendererImpl::Render( |
base::TimeDelta::FromMilliseconds(250)); |
} |
- // To avoid unnecessary work, only post this task if there is a chance of work |
- // to be done. AttemptRead() may still ignore this call for other reasons. |
- if (!rendered_end_of_stream_ && !HaveReachedBufferingCap(effective_frames)) { |
- task_runner_->PostTask(FROM_HERE, |
- base::Bind(&VideoRendererImpl::AttemptRead, |
- weak_factory_.GetWeakPtr())); |
- } |
+ // Always post this task, it will acquire new frames if necessary and since it |
+ // happens on another thread, even if we don't have room in the queue now, by |
+ // the time it runs (may be delayed up to 50ms for complex decodes!) we might. |
+ task_runner_->PostTask(FROM_HERE, base::Bind(&VideoRendererImpl::AttemptRead, |
+ weak_factory_.GetWeakPtr())); |
return result; |
} |
@@ -685,22 +683,17 @@ void VideoRendererImpl::MaybeStopSinkAfterFirstPaint() { |
bool VideoRendererImpl::HaveReachedBufferingCap() { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
- return HaveReachedBufferingCap(use_new_video_renderering_path_ |
- ? algorithm_->EffectiveFramesQueued() |
- : 0); |
-} |
+ const size_t kMaxVideoFrames = limits::kMaxVideoFrames; |
-bool VideoRendererImpl::HaveReachedBufferingCap(size_t effective_frames) { |
if (use_new_video_renderering_path_) { |
// 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 effective_frames >= static_cast<size_t>(limits::kMaxVideoFrames) || |
- algorithm_->frames_queued() >= |
- static_cast<size_t>(3 * limits::kMaxVideoFrames); |
+ return algorithm_->EffectiveFramesQueued() >= kMaxVideoFrames || |
+ algorithm_->frames_queued() >= 3 * kMaxVideoFrames; |
} |
- return ready_frames_.size() >= static_cast<size_t>(limits::kMaxVideoFrames); |
+ return ready_frames_.size() >= kMaxVideoFrames; |
} |
void VideoRendererImpl::StartSink() { |