diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-23 16:29:09 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-23 16:29:09 +0000 |
commit | 5bb69ef0273481de128dfa9f3f4753db3e6e1f92 (patch) | |
tree | 9d41bfff26b139207555a29fb32e0063e8473af1 /webkit/media | |
parent | 8cc91df3bce14fa43ee6d9569a61ee03e84a3b4a (diff) | |
download | chromium_src-5bb69ef0273481de128dfa9f3f4753db3e6e1f92.zip chromium_src-5bb69ef0273481de128dfa9f3f4753db3e6e1f92.tar.gz chromium_src-5bb69ef0273481de128dfa9f3f4753db3e6e1f92.tar.bz2 |
Set opaque on the WebMediaPlayerClient based on the decoder
BUG=
TEST=
Review URL: http://codereview.chromium.org/8989038
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@115720 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/media')
-rw-r--r-- | webkit/media/video_renderer_impl.cc | 6 | ||||
-rw-r--r-- | webkit/media/video_renderer_impl.h | 5 | ||||
-rw-r--r-- | webkit/media/video_renderer_impl_unittest.cc | 8 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.cc | 10 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.h | 1 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_proxy.cc | 11 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_proxy.h | 4 |
7 files changed, 39 insertions, 6 deletions
diff --git a/webkit/media/video_renderer_impl.cc b/webkit/media/video_renderer_impl.cc index f1a880f..3efb5f6 100644 --- a/webkit/media/video_renderer_impl.cc +++ b/webkit/media/video_renderer_impl.cc @@ -231,8 +231,10 @@ static void ConvertVideoFrameToBitmap( bitmap->unlockPixels(); } -VideoRendererImpl::VideoRendererImpl(const base::Closure& paint_cb) - : media::VideoRendererBase(paint_cb), +VideoRendererImpl::VideoRendererImpl( + const base::Closure& paint_cb, + const SetOpaqueCB& set_opaque_cb) + : media::VideoRendererBase(paint_cb, set_opaque_cb), bitmap_timestamp_(media::kNoTimestamp) { } diff --git a/webkit/media/video_renderer_impl.h b/webkit/media/video_renderer_impl.h index c2f8558..64b4c01 100644 --- a/webkit/media/video_renderer_impl.h +++ b/webkit/media/video_renderer_impl.h @@ -25,7 +25,10 @@ namespace webkit_media { class VideoRendererImpl : public media::VideoRendererBase { public: // |paint_cb| is executed whenever a new frame is available for painting. - explicit VideoRendererImpl(const base::Closure& paint_cb); + // |set_opaque_cb| is used to imform the player whether the video is opaque. + VideoRendererImpl( + const base::Closure& paint_cb, + const SetOpaqueCB& set_opaque_cb); virtual ~VideoRendererImpl(); // Paint the current front frame on the |canvas| stretching it to fit the diff --git a/webkit/media/video_renderer_impl_unittest.cc b/webkit/media/video_renderer_impl_unittest.cc index b252025..7ae1ff2 100644 --- a/webkit/media/video_renderer_impl_unittest.cc +++ b/webkit/media/video_renderer_impl_unittest.cc @@ -65,8 +65,11 @@ class VideoRendererImplTest : public testing::Test { // Initialize the renderer. base::WaitableEvent event(false, false); - renderer_ = new VideoRendererImpl(base::Bind( - &VideoRendererImplTest::OnPaint, base::Unretained(this))); + renderer_ = new VideoRendererImpl( + base::Bind( + &VideoRendererImplTest::OnPaint, base::Unretained(this)), + base::Bind( + &VideoRendererImplTest::SetOpaque, base::Unretained(this))); renderer_->set_host(&host_); renderer_->SetPlaybackRate(1.0f); renderer_->Initialize( @@ -117,6 +120,7 @@ class VideoRendererImplTest : public testing::Test { private: void OnPaint() {} + void SetOpaque(bool) {} void OnStatistics(const PipelineStatistics&) {} void StartPrerolling() { diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index e1d0e6e..4753202 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -164,7 +164,9 @@ bool WebMediaPlayerImpl::Initialize( // Create proxy and default video renderer. proxy_ = new WebMediaPlayerProxy(main_loop_, this); scoped_refptr<VideoRendererImpl> video_renderer = - new VideoRendererImpl(base::Bind(&WebMediaPlayerProxy::Repaint, proxy_)); + new VideoRendererImpl( + base::Bind(&WebMediaPlayerProxy::Repaint, proxy_.get()), + base::Bind(&WebMediaPlayerProxy::SetOpaque, proxy_.get())); filter_collection_->AddVideoRenderer(video_renderer); proxy_->SetVideoRenderer(video_renderer); @@ -870,6 +872,12 @@ void WebMediaPlayerImpl::OnDemuxerOpened() { GetClient()->sourceOpened(); } +void WebMediaPlayerImpl::SetOpaque(bool opaque) { + DCHECK_EQ(main_loop_, MessageLoop::current()); + + GetClient()->setOpaque(opaque); +} + void WebMediaPlayerImpl::SetNetworkState( WebKit::WebMediaPlayer::NetworkState state) { DCHECK_EQ(main_loop_, MessageLoop::current()); diff --git a/webkit/media/webmediaplayer_impl.h b/webkit/media/webmediaplayer_impl.h index ef6c2ed..7b5cd60 100644 --- a/webkit/media/webmediaplayer_impl.h +++ b/webkit/media/webmediaplayer_impl.h @@ -189,6 +189,7 @@ class WebMediaPlayerImpl void OnPipelineError(media::PipelineStatus error); void OnNetworkEvent(media::NetworkEvent type); void OnDemuxerOpened(); + void SetOpaque(bool); private: // Helpers that set the network/ready state and notifies the client if diff --git a/webkit/media/webmediaplayer_proxy.cc b/webkit/media/webmediaplayer_proxy.cc index 4c09b32..f517ad1 100644 --- a/webkit/media/webmediaplayer_proxy.cc +++ b/webkit/media/webmediaplayer_proxy.cc @@ -45,6 +45,11 @@ void WebMediaPlayerProxy::Repaint() { } } +void WebMediaPlayerProxy::SetOpaque(bool opaque) { + render_loop_->PostTask(FROM_HERE, base::Bind( + &WebMediaPlayerProxy::SetOpaqueTask, this, opaque)); +} + void WebMediaPlayerProxy::SetVideoRenderer( const scoped_refptr<VideoRendererImpl>& video_renderer) { video_renderer_ = video_renderer; @@ -171,6 +176,12 @@ void WebMediaPlayerProxy::NetworkEventTask(NetworkEvent type) { webmediaplayer_->OnNetworkEvent(type); } +void WebMediaPlayerProxy::SetOpaqueTask(bool opaque) { + DCHECK(MessageLoop::current() == render_loop_); + if (webmediaplayer_) + webmediaplayer_->SetOpaque(opaque); +} + void WebMediaPlayerProxy::GetCurrentFrame( scoped_refptr<media::VideoFrame>* frame_out) { if (video_renderer_) diff --git a/webkit/media/webmediaplayer_proxy.h b/webkit/media/webmediaplayer_proxy.h index 83877e4..00209ca 100644 --- a/webkit/media/webmediaplayer_proxy.h +++ b/webkit/media/webmediaplayer_proxy.h @@ -40,6 +40,7 @@ class WebMediaPlayerProxy // Methods for Filter -> WebMediaPlayerImpl communication. void Repaint(); + void SetOpaque(bool opaque); void SetVideoRenderer(const scoped_refptr<VideoRendererImpl>& video_renderer); WebDataSourceBuildObserverHack GetBuildObserver(); @@ -100,6 +101,9 @@ class WebMediaPlayerProxy // Notify |webmediaplayer_| that there's a network event. void NetworkEventTask(media::NetworkEvent type); + // Inform |webmediaplayer_| whether the video content is opaque. + void SetOpaqueTask(bool opaque); + // The render message loop where WebKit lives. MessageLoop* render_loop_; WebMediaPlayerImpl* webmediaplayer_; |