| Index: content/renderer/media/renderer_gpu_video_accelerator_factories.h
|
| diff --git a/content/renderer/media/renderer_gpu_video_accelerator_factories.h b/content/renderer/media/renderer_gpu_video_accelerator_factories.h
|
| index da6b09130620daf5ff9fb82e3f02b70b4ac0a60f..f91e690a064004ee09b4459fed77d4f3e690afac 100644
|
| --- a/content/renderer/media/renderer_gpu_video_accelerator_factories.h
|
| +++ b/content/renderer/media/renderer_gpu_video_accelerator_factories.h
|
| @@ -14,6 +14,7 @@
|
| #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 {
|
| @@ -30,9 +31,12 @@
|
| // 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,
|
| -// but subsequent calls to all public methods of the class must be called from
|
| -// the |message_loop_proxy_|, as provided during construction.
|
| +// 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()
|
| class CONTENT_EXPORT RendererGpuVideoAcceleratorFactories
|
| : public media::GpuVideoAcceleratorFactories {
|
| public:
|
| @@ -40,10 +44,10 @@
|
| // use. Safe to call from any thread.
|
| RendererGpuVideoAcceleratorFactories(
|
| 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,
|
| @@ -60,20 +64,41 @@
|
| 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::Rect& visible_rect,
|
| + const gfx::Size& size,
|
| const SkBitmap& pixels) OVERRIDE;
|
| virtual base::SharedMemory* CreateSharedMemory(size_t size) OVERRIDE;
|
| virtual scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() OVERRIDE;
|
| + virtual void Abort() OVERRIDE;
|
| + virtual bool IsAborted() OVERRIDE;
|
| + scoped_refptr<RendererGpuVideoAcceleratorFactories> Clone();
|
|
|
| protected:
|
| friend class base::RefCountedThreadSafe<RendererGpuVideoAcceleratorFactories>;
|
| virtual ~RendererGpuVideoAcceleratorFactories();
|
|
|
| private:
|
| + RendererGpuVideoAcceleratorFactories();
|
| +
|
| // 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
|
| + // |task_runner_|.
|
| + void AsyncBindContext();
|
| +
|
| + // Async versions of the public methods, run on |task_runner_|.
|
| + // 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::SingleThreadTaskRunner> task_runner_;
|
| scoped_refptr<GpuChannelHost> gpu_channel_host_;
|
| @@ -82,6 +107,20 @@
|
| // 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 |task_runner_| to
|
| + // indicate their completion.
|
| + // e.g. AsyncCreateVideoDecodeAccelerator()/AsyncCreateTextures() etc.
|
| + base::WaitableEvent task_runner_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);
|
| };
|
|
|
|
|