Index: media/filters/video_renderer_base.cc |
diff --git a/media/filters/video_renderer_base.cc b/media/filters/video_renderer_base.cc |
index df7350c23d6b640df37cb2101c18a0fe12b30b52..69a6dac0d1553b8d3c87caddd6a9b5e80b79c9b6 100644 |
--- a/media/filters/video_renderer_base.cc |
+++ b/media/filters/video_renderer_base.cc |
@@ -336,8 +336,6 @@ void VideoRendererBase::PutCurrentFrame(scoped_refptr<VideoFrame> frame) { |
} |
void VideoRendererBase::FrameReady(scoped_refptr<VideoFrame> frame) { |
- DCHECK(frame); |
- |
base::AutoLock auto_lock(lock_); |
DCHECK_NE(state_, kUninitialized); |
DCHECK_NE(state_, kStopped); |
@@ -352,6 +350,18 @@ void VideoRendererBase::FrameReady(scoped_refptr<VideoFrame> frame) { |
return; |
} |
+ if (!frame) { |
+ if (state_ != kSeeking) |
+ return; |
+ |
+ // Abort seek early for a NULL frame because we won't get more frames. |
+ // A new seek will be requested after this one completes so there is no |
+ // point trying to collect more frames. |
+ state_ = kPrerolled; |
+ ResetAndRunCB(&seek_cb_, PIPELINE_OK); |
+ return; |
+ } |
+ |
// Discard frames until we reach our desired seek timestamp. |
if (state_ == kSeeking && !frame->IsEndOfStream() && |
(frame->GetTimestamp() + frame->GetDuration()) <= seek_timestamp_) { |