diff options
Diffstat (limited to 'chromium/content/renderer/media/renderer_gpu_video_accelerator_factories.h')
-rw-r--r-- | chromium/content/renderer/media/renderer_gpu_video_accelerator_factories.h | 86 |
1 files changed, 25 insertions, 61 deletions
diff --git a/chromium/content/renderer/media/renderer_gpu_video_accelerator_factories.h b/chromium/content/renderer/media/renderer_gpu_video_accelerator_factories.h index eb9d650b5d0..ffbc0abe664 100644 --- a/chromium/content/renderer/media/renderer_gpu_video_accelerator_factories.h +++ b/chromium/content/renderer/media/renderer_gpu_video_accelerator_factories.h @@ -14,11 +14,9 @@ #include "content/child/thread_safe_sender.h" #include "content/common/content_export.h" #include "media/filters/gpu_video_accelerator_factories.h" -#include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/size.h" namespace base { -class MessageLoopProxy; class WaitableEvent; } @@ -32,96 +30,62 @@ class WebGraphicsContext3DCommandBufferImpl; // RenderViewImpl and only has its own header to allow extraction of its // implementation from render_view_impl.cc which is already far too large. // -// The RendererGpuVideoAcceleratorFactories can be constructed on any thread. -// Most public methods of the class must be called from the media thread. The -// exceptions (which can be called from any thread, as they are internally -// trampolined) are: -// * CreateVideoDecodeAccelerator() -// * ReadPixels() +// The RendererGpuVideoAcceleratorFactories can be constructed on any thread, +// but subsequent calls to all public methods of the class must be called from +// the |message_loop_proxy_|, as provided during construction. class CONTENT_EXPORT RendererGpuVideoAcceleratorFactories : public media::GpuVideoAcceleratorFactories { public: // Takes a ref on |gpu_channel_host| and tests |context| for loss before each // use. Safe to call from any thread. - RendererGpuVideoAcceleratorFactories( + static scoped_refptr<RendererGpuVideoAcceleratorFactories> Create( GpuChannelHost* gpu_channel_host, + const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy, const scoped_refptr<ContextProviderCommandBuffer>& context_provider); // media::GpuVideoAcceleratorFactories implementation. - // CreateVideoDecodeAccelerator() is safe to call from any thread. virtual scoped_ptr<media::VideoDecodeAccelerator> - CreateVideoDecodeAccelerator( - media::VideoCodecProfile profile, - media::VideoDecodeAccelerator::Client* client) OVERRIDE; + CreateVideoDecodeAccelerator() OVERRIDE; virtual scoped_ptr<media::VideoEncodeAccelerator> - CreateVideoEncodeAccelerator( - media::VideoEncodeAccelerator::Client* client) OVERRIDE; - // Creates textures and produces them into mailboxes. Returns a sync point to - // wait on before using the mailboxes, or 0 on failure. - virtual uint32 CreateTextures(int32 count, - const gfx::Size& size, - std::vector<uint32>* texture_ids, - std::vector<gpu::Mailbox>* texture_mailboxes, - uint32 texture_target) OVERRIDE; + CreateVideoEncodeAccelerator() OVERRIDE; + // Creates textures and produces them into mailboxes. Returns true on success + // or false on failure. + virtual bool CreateTextures(int32 count, + const gfx::Size& size, + std::vector<uint32>* texture_ids, + std::vector<gpu::Mailbox>* texture_mailboxes, + uint32 texture_target) OVERRIDE; virtual void DeleteTexture(uint32 texture_id) OVERRIDE; virtual void WaitSyncPoint(uint32 sync_point) OVERRIDE; - // ReadPixels() is safe to call from any thread. virtual void ReadPixels(uint32 texture_id, - const gfx::Size& size, + const gfx::Rect& visible_rect, const SkBitmap& pixels) OVERRIDE; virtual base::SharedMemory* CreateSharedMemory(size_t size) OVERRIDE; - virtual scoped_refptr<base::MessageLoopProxy> GetMessageLoop() OVERRIDE; - virtual void Abort() OVERRIDE; - virtual bool IsAborted() OVERRIDE; - scoped_refptr<RendererGpuVideoAcceleratorFactories> Clone(); + virtual scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() OVERRIDE; - protected: + private: friend class base::RefCountedThreadSafe<RendererGpuVideoAcceleratorFactories>; + RendererGpuVideoAcceleratorFactories( + GpuChannelHost* gpu_channel_host, + const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy, + const scoped_refptr<ContextProviderCommandBuffer>& context_provider); virtual ~RendererGpuVideoAcceleratorFactories(); - private: - RendererGpuVideoAcceleratorFactories(); + // Helper to bind |context_provider| to the |task_runner_| thread after + // construction. + void BindContext(); // Helper to get a pointer to the WebGraphicsContext3DCommandBufferImpl, // if it has not been lost yet. WebGraphicsContext3DCommandBufferImpl* GetContext3d(); - // Helper for the constructor to acquire the ContentGLContext on - // |message_loop_|. - void AsyncBindContext(); - - // Async versions of the public methods, run on |message_loop_|. - // They use output parameters instead of return values and each takes - // a WaitableEvent* param to signal completion (except for DeleteTexture, - // which is fire-and-forget). - // AsyncCreateVideoDecodeAccelerator returns its output in the |vda_| member. - void AsyncCreateVideoDecodeAccelerator( - media::VideoCodecProfile profile, - media::VideoDecodeAccelerator::Client* client); - void AsyncReadPixels(uint32 texture_id, const gfx::Size& size); - void AsyncDestroyVideoDecodeAccelerator(); - - scoped_refptr<base::MessageLoopProxy> message_loop_; + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; scoped_refptr<GpuChannelHost> gpu_channel_host_; scoped_refptr<ContextProviderCommandBuffer> context_provider_; // For sending requests to allocate shared memory in the Browser process. scoped_refptr<ThreadSafeSender> thread_safe_sender_; - // This event is signaled if we have been asked to Abort(). - base::WaitableEvent aborted_waiter_; - - // This event is signaled by asynchronous tasks posted to |message_loop_| to - // indicate their completion. - // e.g. AsyncCreateVideoDecodeAccelerator()/AsyncCreateTextures() etc. - base::WaitableEvent message_loop_async_waiter_; - - // The vda returned by the CreateVideoDecodeAccelerator function. - scoped_ptr<media::VideoDecodeAccelerator> vda_; - - // Bitmap returned by ReadPixels(). - SkBitmap read_pixels_bitmap_; - DISALLOW_COPY_AND_ASSIGN(RendererGpuVideoAcceleratorFactories); }; |