OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/renderer_gpu_video_accelerator_factories.h" | 5 #include "content/renderer/media/renderer_gpu_video_accelerator_factories.h" |
6 | 6 |
7 #include <GLES2/gl2.h> | 7 #include <GLES2/gl2.h> |
8 #include <GLES2/gl2ext.h> | 8 #include <GLES2/gl2ext.h> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "content/child/child_gpu_memory_buffer_manager.h" |
11 #include "content/child/child_thread_impl.h" | 12 #include "content/child/child_thread_impl.h" |
12 #include "content/common/gpu/client/context_provider_command_buffer.h" | 13 #include "content/common/gpu/client/context_provider_command_buffer.h" |
13 #include "content/common/gpu/client/gl_helper.h" | 14 #include "content/common/gpu/client/gl_helper.h" |
14 #include "content/common/gpu/client/gpu_channel_host.h" | 15 #include "content/common/gpu/client/gpu_channel_host.h" |
15 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" | 16 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" |
16 #include "content/common/gpu/media/gpu_video_accelerator_util.h" | 17 #include "content/common/gpu/media/gpu_video_accelerator_util.h" |
17 #include "content/renderer/render_thread_impl.h" | 18 #include "content/renderer/render_thread_impl.h" |
18 #include "gpu/command_buffer/client/gles2_implementation.h" | 19 #include "gpu/command_buffer/client/gles2_implementation.h" |
| 20 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |
19 #include "media/video/video_decode_accelerator.h" | 21 #include "media/video/video_decode_accelerator.h" |
20 #include "media/video/video_encode_accelerator.h" | 22 #include "media/video/video_encode_accelerator.h" |
21 | 23 |
22 namespace content { | 24 namespace content { |
23 | 25 |
24 // static | 26 // static |
25 scoped_refptr<RendererGpuVideoAcceleratorFactories> | 27 scoped_refptr<RendererGpuVideoAcceleratorFactories> |
26 RendererGpuVideoAcceleratorFactories::Create( | 28 RendererGpuVideoAcceleratorFactories::Create( |
27 GpuChannelHost* gpu_channel_host, | 29 GpuChannelHost* gpu_channel_host, |
28 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 30 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
(...skipping 10 matching lines...) Expand all Loading... |
39 return factories; | 41 return factories; |
40 } | 42 } |
41 | 43 |
42 RendererGpuVideoAcceleratorFactories::RendererGpuVideoAcceleratorFactories( | 44 RendererGpuVideoAcceleratorFactories::RendererGpuVideoAcceleratorFactories( |
43 GpuChannelHost* gpu_channel_host, | 45 GpuChannelHost* gpu_channel_host, |
44 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 46 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
45 const scoped_refptr<ContextProviderCommandBuffer>& context_provider) | 47 const scoped_refptr<ContextProviderCommandBuffer>& context_provider) |
46 : task_runner_(task_runner), | 48 : task_runner_(task_runner), |
47 gpu_channel_host_(gpu_channel_host), | 49 gpu_channel_host_(gpu_channel_host), |
48 context_provider_(context_provider), | 50 context_provider_(context_provider), |
49 thread_safe_sender_(ChildThreadImpl::current()->thread_safe_sender()) {} | 51 gpu_memory_buffer_manager_( |
| 52 ChildThreadImpl::current()->gpu_memory_buffer_manager()), |
| 53 thread_safe_sender_(ChildThreadImpl::current()->thread_safe_sender()) { |
| 54 } |
50 | 55 |
51 RendererGpuVideoAcceleratorFactories::~RendererGpuVideoAcceleratorFactories() {} | 56 RendererGpuVideoAcceleratorFactories::~RendererGpuVideoAcceleratorFactories() {} |
52 | 57 |
53 void RendererGpuVideoAcceleratorFactories::BindContext() { | 58 void RendererGpuVideoAcceleratorFactories::BindContext() { |
54 DCHECK(task_runner_->BelongsToCurrentThread()); | 59 DCHECK(task_runner_->BelongsToCurrentThread()); |
55 if (!context_provider_->BindToCurrentThread()) | 60 if (!context_provider_->BindToCurrentThread()) |
56 context_provider_ = NULL; | 61 context_provider_ = NULL; |
57 } | 62 } |
58 | 63 |
59 WebGraphicsContext3DCommandBufferImpl* | 64 WebGraphicsContext3DCommandBufferImpl* |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 return; | 183 return; |
179 | 184 |
180 gpu::gles2::GLES2Implementation* gles2 = context->GetImplementation(); | 185 gpu::gles2::GLES2Implementation* gles2 = context->GetImplementation(); |
181 gles2->WaitSyncPointCHROMIUM(sync_point); | 186 gles2->WaitSyncPointCHROMIUM(sync_point); |
182 | 187 |
183 // Callers expect the WaitSyncPoint to affect the next IPCs. Make sure to | 188 // Callers expect the WaitSyncPoint to affect the next IPCs. Make sure to |
184 // flush the command buffers to ensure that. | 189 // flush the command buffers to ensure that. |
185 gles2->ShallowFlushCHROMIUM(); | 190 gles2->ShallowFlushCHROMIUM(); |
186 } | 191 } |
187 | 192 |
| 193 scoped_ptr<gfx::GpuMemoryBuffer> |
| 194 RendererGpuVideoAcceleratorFactories::AllocateGpuMemoryBuffer( |
| 195 const gfx::Size& size, |
| 196 gfx::GpuMemoryBuffer::Format format, |
| 197 gfx::GpuMemoryBuffer::Usage usage) { |
| 198 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 199 scoped_ptr<gfx::GpuMemoryBuffer> buffer = |
| 200 gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer(size, format, usage); |
| 201 return buffer.Pass(); |
| 202 } |
| 203 |
| 204 bool RendererGpuVideoAcceleratorFactories::IsTextureRGSupported() { |
| 205 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 206 |
| 207 WebGraphicsContext3DCommandBufferImpl* context = GetContext3d(); |
| 208 if (!context) |
| 209 return false; |
| 210 return context->GetImplementation()->capabilities().texture_rg; |
| 211 } |
| 212 |
| 213 gpu::gles2::GLES2Interface* |
| 214 RendererGpuVideoAcceleratorFactories::GetGLES2Interface() { |
| 215 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 216 |
| 217 WebGraphicsContext3DCommandBufferImpl* context = GetContext3d(); |
| 218 if (!context) |
| 219 return nullptr; |
| 220 gpu::gles2::GLES2Implementation* gles2 = context->GetImplementation(); |
| 221 return gles2; |
| 222 } |
| 223 |
188 scoped_ptr<base::SharedMemory> | 224 scoped_ptr<base::SharedMemory> |
189 RendererGpuVideoAcceleratorFactories::CreateSharedMemory(size_t size) { | 225 RendererGpuVideoAcceleratorFactories::CreateSharedMemory(size_t size) { |
190 DCHECK(task_runner_->BelongsToCurrentThread()); | 226 DCHECK(task_runner_->BelongsToCurrentThread()); |
191 scoped_ptr<base::SharedMemory> mem( | 227 scoped_ptr<base::SharedMemory> mem( |
192 ChildThreadImpl::AllocateSharedMemory(size, thread_safe_sender_.get())); | 228 ChildThreadImpl::AllocateSharedMemory(size, thread_safe_sender_.get())); |
193 if (mem && !mem->Map(size)) | 229 if (mem && !mem->Map(size)) |
194 return nullptr; | 230 return nullptr; |
195 return mem; | 231 return mem; |
196 } | 232 } |
197 | 233 |
(...skipping 12 matching lines...) Expand all Loading... |
210 | 246 |
211 media::VideoEncodeAccelerator::SupportedProfiles | 247 media::VideoEncodeAccelerator::SupportedProfiles |
212 RendererGpuVideoAcceleratorFactories:: | 248 RendererGpuVideoAcceleratorFactories:: |
213 GetVideoEncodeAcceleratorSupportedProfiles() { | 249 GetVideoEncodeAcceleratorSupportedProfiles() { |
214 return GpuVideoAcceleratorUtil::ConvertGpuToMediaEncodeProfiles( | 250 return GpuVideoAcceleratorUtil::ConvertGpuToMediaEncodeProfiles( |
215 gpu_channel_host_->gpu_info() | 251 gpu_channel_host_->gpu_info() |
216 .video_encode_accelerator_supported_profiles); | 252 .video_encode_accelerator_supported_profiles); |
217 } | 253 } |
218 | 254 |
219 } // namespace content | 255 } // namespace content |
OLD | NEW |