| Index: content/renderer/media/webmediaplayer_ms.cc
|
| diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc
|
| index 8be81de1a75bd50917e35a1a4c2e2d218272cad3..b1c5a70eb687ff718f5ec12492f50167e45c90ef 100644
|
| --- a/content/renderer/media/webmediaplayer_ms.cc
|
| +++ b/content/renderer/media/webmediaplayer_ms.cc
|
| @@ -42,30 +42,25 @@ namespace content {
|
| // compositor thread by calling of EnqueueFrame() method of |compositor_|.
|
| //
|
| // It is created on the main thread, but methods should be called and class
|
| -// should be destructed on the compositor thread.
|
| +// should be destructed on the media thread.
|
| class WebMediaPlayerMS::FrameDeliverer {
|
| public:
|
| - typedef base::Callback<void(scoped_refptr<media::VideoFrame>)>
|
| - EnqueueFrameCallback;
|
| -
|
| FrameDeliverer(const base::WeakPtr<WebMediaPlayerMS>& player,
|
| - const EnqueueFrameCallback& enqueue_frame_cb)
|
| + const MediaStreamVideoRenderer::RepaintCB& enqueue_frame_cb)
|
| : last_frame_opaque_(true),
|
| last_frame_rotation_(media::VIDEO_ROTATION_0),
|
| received_first_frame_(false),
|
| main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
|
| player_(player),
|
| enqueue_frame_cb_(enqueue_frame_cb),
|
| - weak_factory_for_compositor_(this) {
|
| - compositor_thread_checker_.DetachFromThread();
|
| + weak_factory_(this) {
|
| + media_thread_checker_.DetachFromThread();
|
| }
|
|
|
| - ~FrameDeliverer() {
|
| - DCHECK(compositor_thread_checker_.CalledOnValidThread());
|
| - }
|
| + ~FrameDeliverer() { DCHECK(media_thread_checker_.CalledOnValidThread()); }
|
|
|
| void OnVideoFrame(scoped_refptr<media::VideoFrame> frame) {
|
| - DCHECK(compositor_thread_checker_.CalledOnValidThread());
|
| + DCHECK(media_thread_checker_.CalledOnValidThread());
|
|
|
| #if defined(OS_ANDROID)
|
| if (render_frame_suspended_)
|
| @@ -113,14 +108,14 @@ class WebMediaPlayerMS::FrameDeliverer {
|
|
|
| #if defined(OS_ANDROID)
|
| void SetRenderFrameSuspended(bool render_frame_suspended) {
|
| - DCHECK(compositor_thread_checker_.CalledOnValidThread());
|
| + DCHECK(media_thread_checker_.CalledOnValidThread());
|
| render_frame_suspended_ = render_frame_suspended;
|
| }
|
| #endif // defined(OS_ANDROID)
|
|
|
| MediaStreamVideoRenderer::RepaintCB GetRepaintCallback() {
|
| return base::Bind(&FrameDeliverer::OnVideoFrame,
|
| - weak_factory_for_compositor_.GetWeakPtr());
|
| + weak_factory_.GetWeakPtr());
|
| }
|
|
|
| private:
|
| @@ -134,13 +129,13 @@ class WebMediaPlayerMS::FrameDeliverer {
|
|
|
| const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
|
| const base::WeakPtr<WebMediaPlayerMS> player_;
|
| - const EnqueueFrameCallback enqueue_frame_cb_;
|
| + const MediaStreamVideoRenderer::RepaintCB enqueue_frame_cb_;
|
|
|
| // Used for DCHECKs to ensure method calls executed on the correct thread,
|
| - // i.e. compositor thread.
|
| - base::ThreadChecker compositor_thread_checker_;
|
| + // i.e. media thread.
|
| + base::ThreadChecker media_thread_checker_;
|
|
|
| - base::WeakPtrFactory<FrameDeliverer> weak_factory_for_compositor_;
|
| + base::WeakPtrFactory<FrameDeliverer> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(FrameDeliverer);
|
| };
|
| @@ -198,10 +193,10 @@ WebMediaPlayerMS::~WebMediaPlayerMS() {
|
| static_cast<cc::VideoLayer*>(video_weblayer_->layer())->StopUsingProvider();
|
|
|
| if (frame_deliverer_)
|
| - compositor_task_runner_->DeleteSoon(FROM_HERE, frame_deliverer_.release());
|
| + media_task_runner_->DeleteSoon(FROM_HERE, frame_deliverer_.release());
|
|
|
| if (compositor_)
|
| - compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_.release());
|
| + compositor_->StopUsingProvider();
|
|
|
| if (video_frame_provider_)
|
| video_frame_provider_->Stop();
|
| @@ -230,8 +225,8 @@ void WebMediaPlayerMS::load(LoadType load_type,
|
| blink::WebMediaStream web_stream =
|
| GetWebMediaStreamFromWebMediaPlayerSource(source);
|
|
|
| - compositor_.reset(new WebMediaPlayerMSCompositor(compositor_task_runner_,
|
| - web_stream, AsWeakPtr()));
|
| + compositor_ = new WebMediaPlayerMSCompositor(compositor_task_runner_,
|
| + web_stream, AsWeakPtr());
|
|
|
| SetNetworkState(WebMediaPlayer::NetworkStateLoading);
|
| SetReadyState(WebMediaPlayer::ReadyStateHaveNothing);
|
| @@ -239,16 +234,14 @@ void WebMediaPlayerMS::load(LoadType load_type,
|
| web_stream.isNull() ? std::string() : web_stream.id().utf8();
|
| media_log_->AddEvent(media_log_->CreateLoadEvent(stream_id));
|
|
|
| - // base::Unretained usage is safe here because |compositor_| is destroyed
|
| - // after |frame_deliverer_|.
|
| frame_deliverer_.reset(new WebMediaPlayerMS::FrameDeliverer(
|
| - AsWeakPtr(), base::Bind(&WebMediaPlayerMSCompositor::EnqueueFrame,
|
| - base::Unretained(compositor_.get()))));
|
| + AsWeakPtr(),
|
| + base::Bind(&WebMediaPlayerMSCompositor::EnqueueFrame, compositor_)));
|
| video_frame_provider_ = renderer_factory_->GetVideoRenderer(
|
| web_stream, media::BindToCurrentLoop(base::Bind(
|
| &WebMediaPlayerMS::OnSourceError, AsWeakPtr())),
|
| - frame_deliverer_->GetRepaintCallback(), compositor_task_runner_,
|
| - media_task_runner_, worker_task_runner_, gpu_factories_);
|
| + frame_deliverer_->GetRepaintCallback(), media_task_runner_,
|
| + worker_task_runner_, gpu_factories_);
|
|
|
| RenderFrame* const frame = RenderFrame::FromWebFrame(frame_);
|
|
|
| @@ -519,7 +512,7 @@ void WebMediaPlayerMS::OnHidden() {
|
| // During undoable tab closures OnHidden() may be called back to back, so we
|
| // can't rely on |render_frame_suspended_| being false here.
|
| if (frame_deliverer_) {
|
| - compositor_task_runner_->PostTask(
|
| + media_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended,
|
| base::Unretained(frame_deliverer_.get()), true));
|
| }
|
| @@ -534,7 +527,7 @@ void WebMediaPlayerMS::OnShown() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| if (frame_deliverer_) {
|
| - compositor_task_runner_->PostTask(
|
| + media_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended,
|
| base::Unretained(frame_deliverer_.get()), false));
|
| }
|
| @@ -559,7 +552,7 @@ bool WebMediaPlayerMS::OnSuspendRequested(bool must_suspend) {
|
| delegate_->PlayerGone(delegate_id_);
|
|
|
| if (frame_deliverer_) {
|
| - compositor_task_runner_->PostTask(
|
| + media_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&FrameDeliverer::SetRenderFrameSuspended,
|
| base::Unretained(frame_deliverer_.get()), true));
|
| }
|
|
|