diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-26 18:50:11 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-26 18:50:11 +0000 |
commit | 8400e0328996ef46e390903b6c378549f7b13aa3 (patch) | |
tree | 351883f0cdc05aca6f61c0ca0cf9bb945d0b807d /webkit/glue/media | |
parent | 7386be50a212a569840f8da41be445cb00e90beb (diff) | |
download | chromium_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.cc | 7 | ||||
-rw-r--r-- | webkit/glue/media/video_renderer_impl.h | 37 | ||||
-rw-r--r-- | webkit/glue/media/web_video_renderer.h | 39 |
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_ |