summaryrefslogtreecommitdiffstats
path: root/webkit/glue/media
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-26 18:50:11 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-26 18:50:11 +0000
commit8400e0328996ef46e390903b6c378549f7b13aa3 (patch)
tree351883f0cdc05aca6f61c0ca0cf9bb945d0b807d /webkit/glue/media
parent7386be50a212a569840f8da41be445cb00e90beb (diff)
downloadchromium_src-8400e0328996ef46e390903b6c378549f7b13aa3.zip
chromium_src-8400e0328996ef46e390903b6c378549f7b13aa3.tar.gz
chromium_src-8400e0328996ef46e390903b6c378549f7b13aa3.tar.bz2
Initial work for cross-process video rendering using layers.
Introduces VideoLayer, which is similar to BackingStore except handles YUV surfaces and conversion to RGB. BUG=33329 TEST=N/A Review URL: http://codereview.chromium.org/597066 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40137 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/media')
-rw-r--r--webkit/glue/media/video_renderer_impl.cc7
-rw-r--r--webkit/glue/media/video_renderer_impl.h37
-rw-r--r--webkit/glue/media/web_video_renderer.h39
3 files changed, 64 insertions, 19 deletions
diff --git a/webkit/glue/media/video_renderer_impl.cc b/webkit/glue/media/video_renderer_impl.cc
index a7dc980..ba06d1c 100644
--- a/webkit/glue/media/video_renderer_impl.cc
+++ b/webkit/glue/media/video_renderer_impl.cc
@@ -18,6 +18,13 @@ namespace webkit_glue {
}
// static
+media::FilterFactory* VideoRendererImpl::CreateFactory(
+ WebMediaPlayerImpl::Proxy* proxy) {
+ return new media::FilterFactoryImpl1<VideoRendererImpl,
+ WebMediaPlayerImpl::Proxy*>(proxy);
+}
+
+// static
bool VideoRendererImpl::IsMediaFormatSupported(
const media::MediaFormat& media_format) {
int width = 0;
diff --git a/webkit/glue/media/video_renderer_impl.h b/webkit/glue/media/video_renderer_impl.h
index b0fde12..4bc7210 100644
--- a/webkit/glue/media/video_renderer_impl.h
+++ b/webkit/glue/media/video_renderer_impl.h
@@ -6,10 +6,6 @@
// inside video renderer thread and also WebKit's main thread. We need to be
// extra careful about members shared by two different threads, especially
// video frame buffers.
-//
-// Methods called from WebKit's main thread:
-// Paint()
-// SetRect()
#ifndef WEBKIT_GLUE_MEDIA_VIDEO_RENDERER_IMPL_H_
#define WEBKIT_GLUE_MEDIA_VIDEO_RENDERER_IMPL_H_
@@ -17,38 +13,41 @@
#include "base/gfx/rect.h"
#include "base/gfx/size.h"
#include "media/base/buffers.h"
-#include "media/base/factory.h"
#include "media/base/filters.h"
#include "media/filters/video_renderer_base.h"
#include "skia/ext/platform_canvas.h"
#include "third_party/WebKit/WebKit/chromium/public/WebMediaPlayer.h"
+#include "webkit/glue/media/web_video_renderer.h"
#include "webkit/glue/webmediaplayer_impl.h"
namespace webkit_glue {
-class VideoRendererImpl : public media::VideoRendererBase {
+class VideoRendererImpl : public WebVideoRenderer {
public:
- // Methods for painting called by the WebMediaPlayerImpl::Proxy
-
- // This method is called with the same rect as the Paint method and could
- // be used by future implementations to implement an improved color space +
- // scale code on a separate thread. Since we always do the stretch on the
- // same thread as the Paint method, we just ignore the call for now.
+ // WebVideoRenderer implementation.
virtual void SetRect(const gfx::Rect& rect);
-
- // Paint the current front frame on the |canvas| stretching it to fit the
- // |dest_rect|
virtual void Paint(skia::PlatformCanvas* canvas, const gfx::Rect& dest_rect);
// Static method for creating factory for this object.
- static media::FilterFactory* CreateFactory(WebMediaPlayerImpl::Proxy* proxy) {
- return new media::FilterFactoryImpl1<VideoRendererImpl,
- WebMediaPlayerImpl::Proxy*>(proxy);
- }
+ static media::FilterFactory* CreateFactory(WebMediaPlayerImpl::Proxy* proxy);
// FilterFactoryImpl1 implementation.
static bool IsMediaFormatSupported(const media::MediaFormat& media_format);
+ // TODO(scherkus): remove this mega-hack, see http://crbug.com/28207
+ class FactoryFactory : public webkit_glue::WebVideoRendererFactoryFactory {
+ public:
+ FactoryFactory() : webkit_glue::WebVideoRendererFactoryFactory() {}
+
+ virtual media::FilterFactory* CreateFactory(
+ webkit_glue::WebMediaPlayerImpl::Proxy* proxy) {
+ return VideoRendererImpl::CreateFactory(proxy);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FactoryFactory);
+ };
+
protected:
// Method called by VideoRendererBase during initialization.
virtual bool OnInitialize(media::VideoDecoder* decoder);
diff --git a/webkit/glue/media/web_video_renderer.h b/webkit/glue/media/web_video_renderer.h
new file mode 100644
index 0000000..8bafb1a
--- /dev/null
+++ b/webkit/glue/media/web_video_renderer.h
@@ -0,0 +1,39 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this
+// source code is governed by a BSD-style license that can be found in the
+// LICENSE file.
+
+#ifndef WEBKIT_GLUE_MEDIA_WEB_VIDEO_RENDERER_H_
+#define WEBKIT_GLUE_MEDIA_WEB_VIDEO_RENDERER_H_
+
+#include "media/filters/video_renderer_base.h"
+
+namespace webkit_glue {
+
+// A specialized version of a VideoRenderer designed to be used inside WebKit.
+class WebVideoRenderer : public media::VideoRendererBase {
+ public:
+ WebVideoRenderer() : media::VideoRendererBase() {}
+ virtual ~WebVideoRenderer() {}
+
+ // This method is called with the same rect as the Paint() method and could
+ // be used by future implementations to implement an improved color space +
+ // scale code on a separate thread. Since we always do the stretch on the
+ // same thread as the Paint method, we just ignore the call for now.
+ //
+ // Method called on the render thread.
+ virtual void SetRect(const gfx::Rect& rect) = 0;
+
+ // Paint the current front frame on the |canvas| stretching it to fit the
+ // |dest_rect|.
+ //
+ // Method called on the render thread.
+ virtual void Paint(skia::PlatformCanvas* canvas,
+ const gfx::Rect& dest_rect) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(WebVideoRenderer);
+};
+
+} // namespace webkit_glue
+
+#endif // WEBKIT_GLUE_MEDIA_WEB_VIDEO_RENDERER_H_