Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / renderer / media / renderer_gpu_video_accelerator_factories.h
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_RENDERER_MEDIA_RENDERER_GPU_VIDEO_ACCELERATOR_FACTORIES_H_
6 #define CONTENT_RENDERER_MEDIA_RENDERER_GPU_VIDEO_ACCELERATOR_FACTORIES_H_
7
8 #include <vector>
9
10 #include "base/basictypes.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/weak_ptr.h"
13 #include "base/synchronization/waitable_event.h"
14 #include "content/child/thread_safe_sender.h"
15 #include "content/common/content_export.h"
16 #include "media/filters/gpu_video_accelerator_factories.h"
17 #include "ui/gfx/size.h"
18
19 namespace base {
20 class WaitableEvent;
21 }
22
23 namespace content {
24 class ContextProviderCommandBuffer;
25 class GLHelper;
26 class GpuChannelHost;
27 class WebGraphicsContext3DCommandBufferImpl;
28
29 // Glue code to expose functionality needed by media::GpuVideoAccelerator to
30 // RenderViewImpl.  This class is entirely an implementation detail of
31 // RenderViewImpl and only has its own header to allow extraction of its
32 // implementation from render_view_impl.cc which is already far too large.
33 //
34 // The RendererGpuVideoAcceleratorFactories can be constructed on any thread,
35 // but subsequent calls to all public methods of the class must be called from
36 // the |task_runner_|, as provided during construction.
37 class CONTENT_EXPORT RendererGpuVideoAcceleratorFactories
38     : public media::GpuVideoAcceleratorFactories {
39  public:
40   // Takes a ref on |gpu_channel_host| and tests |context| for loss before each
41   // use.  Safe to call from any thread.
42   static scoped_refptr<RendererGpuVideoAcceleratorFactories> Create(
43       GpuChannelHost* gpu_channel_host,
44       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
45       const scoped_refptr<ContextProviderCommandBuffer>& context_provider);
46
47   // media::GpuVideoAcceleratorFactories implementation.
48   virtual scoped_ptr<media::VideoDecodeAccelerator>
49       CreateVideoDecodeAccelerator() OVERRIDE;
50   virtual scoped_ptr<media::VideoEncodeAccelerator>
51       CreateVideoEncodeAccelerator() OVERRIDE;
52   // Creates textures and produces them into mailboxes. Returns true on success
53   // or false on failure.
54   virtual bool CreateTextures(int32 count,
55                               const gfx::Size& size,
56                               std::vector<uint32>* texture_ids,
57                               std::vector<gpu::Mailbox>* texture_mailboxes,
58                               uint32 texture_target) OVERRIDE;
59   virtual void DeleteTexture(uint32 texture_id) OVERRIDE;
60   virtual void WaitSyncPoint(uint32 sync_point) OVERRIDE;
61   virtual void ReadPixels(uint32 texture_id,
62                           const gfx::Rect& visible_rect,
63                           const SkBitmap& pixels) OVERRIDE;
64   virtual base::SharedMemory* CreateSharedMemory(size_t size) OVERRIDE;
65   virtual scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() OVERRIDE;
66   virtual std::vector<media::VideoEncodeAccelerator::SupportedProfile>
67       GetVideoEncodeAcceleratorSupportedProfiles() OVERRIDE;
68
69  private:
70   friend class base::RefCountedThreadSafe<RendererGpuVideoAcceleratorFactories>;
71   RendererGpuVideoAcceleratorFactories(
72       GpuChannelHost* gpu_channel_host,
73       const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
74       const scoped_refptr<ContextProviderCommandBuffer>& context_provider);
75   virtual ~RendererGpuVideoAcceleratorFactories();
76
77   // Helper to bind |context_provider| to the |task_runner_| thread after
78   // construction.
79   void BindContext();
80
81   // Helper to get a pointer to the WebGraphicsContext3DCommandBufferImpl,
82   // if it has not been lost yet.
83   WebGraphicsContext3DCommandBufferImpl* GetContext3d();
84   GLHelper* GetGLHelper();
85
86   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
87   scoped_refptr<GpuChannelHost> gpu_channel_host_;
88   scoped_refptr<ContextProviderCommandBuffer> context_provider_;
89   scoped_ptr<GLHelper> gl_helper_;
90
91   // For sending requests to allocate shared memory in the Browser process.
92   scoped_refptr<ThreadSafeSender> thread_safe_sender_;
93
94   DISALLOW_COPY_AND_ASSIGN(RendererGpuVideoAcceleratorFactories);
95 };
96
97 }  // namespace content
98
99 #endif  // CONTENT_RENDERER_MEDIA_RENDERER_GPU_VIDEO_ACCELERATOR_FACTORIES_H_