Index: media/filters/video_renderer_base.cc |
diff --git a/media/filters/video_renderer_base.cc b/media/filters/video_renderer_base.cc |
index 481c7840173bf210ab098d960af7c395a253b524..e4d90c78d2fe70e6fccb40691f393122791d533e 100644 |
--- a/media/filters/video_renderer_base.cc |
+++ b/media/filters/video_renderer_base.cc |
@@ -137,9 +137,6 @@ void VideoRendererBase::Initialize(const scoped_refptr<VideoDecoder>& decoder, |
get_time_cb_ = get_time_cb; |
get_duration_cb_ = get_duration_cb; |
- // Notify the pipeline of the video dimensions. |
- size_changed_cb_.Run(decoder_->natural_size()); |
- |
// We're all good! Consider ourselves flushed. (ThreadMain() should never |
// see us in the kUninitialized state). |
// Since we had an initial Preroll(), we consider ourself flushed, because we |
@@ -300,8 +297,7 @@ void VideoRendererBase::ThreadMain() { |
// signal to the client that a new frame is available. |
DCHECK(!pending_paint_); |
DCHECK(!ready_frames_.empty()); |
- current_frame_ = ready_frames_.front(); |
- ready_frames_.pop_front(); |
+ SetCurrentFrameToNextReadyFrame(); |
AttemptRead_Locked(); |
base::AutoUnlock auto_unlock(lock_); |
@@ -309,6 +305,18 @@ void VideoRendererBase::ThreadMain() { |
} |
} |
+void VideoRendererBase::SetCurrentFrameToNextReadyFrame() { |
+ current_frame_ = ready_frames_.front(); |
+ ready_frames_.pop_front(); |
+ |
+ // Notify the pipeline of natural_size() changes. |
+ const gfx::Size& natural_size = current_frame_->natural_size(); |
+ if (natural_size != last_natural_size_) { |
+ size_changed_cb_.Run(natural_size); |
+ last_natural_size_ = natural_size; |
+ } |
+} |
+ |
void VideoRendererBase::GetCurrentFrame(scoped_refptr<VideoFrame>* frame_out) { |
base::AutoLock auto_lock(lock_); |
DCHECK(!pending_paint_ && !pending_paint_with_last_available_); |
@@ -457,10 +465,8 @@ void VideoRendererBase::FrameReady(VideoDecoder::DecoderStatus status, |
// Because we might remain in the prerolled state for an undetermined amount |
// of time (i.e., we were not playing before we started prerolling), we'll |
// manually update the current frame and notify the subclass below. |
- if (!ready_frames_.front()->IsEndOfStream()) { |
- current_frame_ = ready_frames_.front(); |
- ready_frames_.pop_front(); |
- } |
+ if (!ready_frames_.front()->IsEndOfStream()) |
+ SetCurrentFrameToNextReadyFrame(); |
// ...and we're done prerolling! |
DCHECK(!preroll_cb_.is_null()); |