Index: media/filters/video_renderer_algorithm.cc |
diff --git a/media/filters/video_renderer_algorithm.cc b/media/filters/video_renderer_algorithm.cc |
index 8bd7c5c1551c691d2416ab838c9730fb092d7f99..0293088337ebe4dc002c953963b06e57aa271976 100644 |
--- a/media/filters/video_renderer_algorithm.cc |
+++ b/media/filters/video_renderer_algorithm.cc |
@@ -44,14 +44,13 @@ VideoRendererAlgorithm::VideoRendererAlgorithm( |
Reset(); |
} |
-VideoRendererAlgorithm::~VideoRendererAlgorithm() { |
-} |
+VideoRendererAlgorithm::~VideoRendererAlgorithm() {} |
scoped_refptr<VideoFrame> VideoRendererAlgorithm::Render( |
base::TimeTicks deadline_min, |
base::TimeTicks deadline_max, |
size_t* frames_dropped) { |
- DCHECK_LT(deadline_min, deadline_max); |
+ DCHECK_LE(deadline_min, deadline_max); |
if (frame_queue_.empty()) |
return nullptr; |
@@ -77,14 +76,16 @@ scoped_refptr<VideoFrame> VideoRendererAlgorithm::Render( |
// all frames currently in the |frame_queue_|. |
UpdateFrameStatistics(); |
const bool have_known_duration = average_frame_duration_ > base::TimeDelta(); |
- if (!(was_time_moving_ && have_known_duration)) { |
+ if (!was_time_moving_ || !have_known_duration || render_interval_.is_zero()) { |
ReadyFrame& ready_frame = frame_queue_[last_frame_index_]; |
DCHECK(ready_frame.frame); |
// If duration is unknown, we don't have enough frames to make a good guess |
// about which frame to use, so always choose the first. |
- if (was_time_moving_ && !have_known_duration) |
+ if ((was_time_moving_ && !have_known_duration) || |
+ render_interval_.is_zero()) { |
++ready_frame.render_count; |
+ } |
UpdateEffectiveFramesQueued(); |
return ready_frame.frame; |
@@ -421,7 +422,8 @@ void VideoRendererAlgorithm::AccountForMissedIntervals( |
base::TimeTicks deadline_min, |
base::TimeTicks deadline_max) { |
if (last_deadline_max_.is_null() || deadline_min <= last_deadline_max_ || |
- !have_rendered_frames_ || !was_time_moving_) { |
+ !have_rendered_frames_ || !was_time_moving_ || |
+ render_interval_.is_zero()) { |
return; |
} |