Index: media/filters/video_renderer_impl.cc |
diff --git a/media/filters/video_renderer_impl.cc b/media/filters/video_renderer_impl.cc |
index 1cbf1bcdb90dea0c0901a5fca295fec44e2c9485..a544bacc1f023bc2ef51b059815b42407b23e6b0 100644 |
--- a/media/filters/video_renderer_impl.cc |
+++ b/media/filters/video_renderer_impl.cc |
@@ -25,7 +25,9 @@ VideoRendererImpl::VideoRendererImpl( |
const PaintCB& paint_cb, |
bool drop_frames) |
: task_runner_(task_runner), |
- video_frame_stream_(task_runner, decoders.Pass(), set_decryptor_ready_cb), |
+ video_frame_stream_(new VideoFrameStream(task_runner, |
+ decoders.Pass(), |
+ set_decryptor_ready_cb)), |
low_delay_(false), |
received_end_of_stream_(false), |
rendered_end_of_stream_(false), |
@@ -66,7 +68,7 @@ void VideoRendererImpl::Flush(const base::Closure& callback) { |
received_end_of_stream_ = false; |
rendered_end_of_stream_ = false; |
- video_frame_stream_.Reset( |
+ video_frame_stream_->Reset( |
base::Bind(&VideoRendererImpl::OnVideoFrameStreamResetDone, |
weak_factory_.GetWeakPtr())); |
} |
@@ -75,7 +77,7 @@ void VideoRendererImpl::Stop(const base::Closure& callback) { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
base::AutoLock auto_lock(lock_); |
if (state_ == kUninitialized || state_ == kStopped) { |
- callback.Run(); |
+ task_runner_->PostTask(FROM_HERE, callback); |
return; |
} |
@@ -102,7 +104,8 @@ void VideoRendererImpl::Stop(const base::Closure& callback) { |
base::PlatformThread::Join(thread_to_join); |
} |
- video_frame_stream_.Stop(callback); |
+ video_frame_stream_.reset(); |
+ task_runner_->PostTask(FROM_HERE, callback); |
} |
void VideoRendererImpl::StartPlayingFrom(base::TimeDelta timestamp) { |
@@ -153,7 +156,7 @@ void VideoRendererImpl::Initialize(DemuxerStream* stream, |
get_duration_cb_ = get_duration_cb; |
state_ = kInitializing; |
- video_frame_stream_.Initialize( |
+ video_frame_stream_->Initialize( |
stream, |
low_delay, |
statistics_cb, |
@@ -360,7 +363,7 @@ void VideoRendererImpl::FrameReady(VideoFrameStream::Status status, |
bool VideoRendererImpl::HaveEnoughData_Locked() { |
DCHECK_EQ(state_, kPlaying); |
return received_end_of_stream_ || |
- !video_frame_stream_.CanReadWithoutStalling() || |
+ !video_frame_stream_->CanReadWithoutStalling() || |
ready_frames_.size() >= static_cast<size_t>(limits::kMaxVideoFrames) || |
(low_delay_ && ready_frames_.size() > 0); |
} |
@@ -440,8 +443,8 @@ void VideoRendererImpl::AttemptRead_Locked() { |
switch (state_) { |
case kPlaying: |
pending_read_ = true; |
- video_frame_stream_.Read(base::Bind(&VideoRendererImpl::FrameReady, |
- weak_factory_.GetWeakPtr())); |
+ video_frame_stream_->Read(base::Bind(&VideoRendererImpl::FrameReady, |
+ weak_factory_.GetWeakPtr())); |
return; |
case kUninitialized: |