summaryrefslogtreecommitdiffstats
path: root/webkit/media
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-23 16:29:09 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-23 16:29:09 +0000
commit5bb69ef0273481de128dfa9f3f4753db3e6e1f92 (patch)
tree9d41bfff26b139207555a29fb32e0063e8473af1 /webkit/media
parent8cc91df3bce14fa43ee6d9569a61ee03e84a3b4a (diff)
downloadchromium_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.cc6
-rw-r--r--webkit/media/video_renderer_impl.h5
-rw-r--r--webkit/media/video_renderer_impl_unittest.cc8
-rw-r--r--webkit/media/webmediaplayer_impl.cc10
-rw-r--r--webkit/media/webmediaplayer_impl.h1
-rw-r--r--webkit/media/webmediaplayer_proxy.cc11
-rw-r--r--webkit/media/webmediaplayer_proxy.h4
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_;