| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/browser/renderer_host/media/video_capture_device_client.h" | 5 #include "content/browser/renderer_host/media/video_capture_device_client.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 using media::VideoFrame; | 35 using media::VideoFrame; |
| 36 using media::VideoFrameMetadata; | 36 using media::VideoFrameMetadata; |
| 37 | 37 |
| 38 namespace content { | 38 namespace content { |
| 39 | 39 |
| 40 namespace { | 40 namespace { |
| 41 | 41 |
| 42 #if !defined(OS_ANDROID) | 42 #if !defined(OS_ANDROID) |
| 43 // Modelled after GpuProcessTransportFactory::CreateContextCommon(). | 43 // Modelled after GpuProcessTransportFactory::CreateContextCommon(). |
| 44 scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl> CreateContextCommon( | 44 scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl> CreateContextCommon( |
| 45 scoped_refptr<content::GpuChannelHost> gpu_channel_host, | 45 scoped_refptr<content::GpuChannelHost> gpu_channel_host) { |
| 46 int surface_id) { | |
| 47 if (!content::GpuDataManagerImpl::GetInstance()-> | 46 if (!content::GpuDataManagerImpl::GetInstance()-> |
| 48 CanUseGpuBrowserCompositor()) { | 47 CanUseGpuBrowserCompositor()) { |
| 49 DLOG(ERROR) << "No accelerated graphics found. Check chrome://gpu"; | 48 DLOG(ERROR) << "No accelerated graphics found. Check chrome://gpu"; |
| 50 return scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl>(); | 49 return scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl>(); |
| 51 } | 50 } |
| 52 blink::WebGraphicsContext3D::Attributes attrs; | 51 blink::WebGraphicsContext3D::Attributes attrs; |
| 53 attrs.shareResources = true; | 52 attrs.shareResources = true; |
| 54 attrs.depth = false; | 53 attrs.depth = false; |
| 55 attrs.stencil = false; | 54 attrs.stencil = false; |
| 56 attrs.antialias = false; | 55 attrs.antialias = false; |
| 57 attrs.noAutomaticFlushes = true; | 56 attrs.noAutomaticFlushes = true; |
| 58 | 57 |
| 59 if (!gpu_channel_host.get()) { | 58 if (!gpu_channel_host.get()) { |
| 60 DLOG(ERROR) << "Failed to establish GPU channel."; | 59 DLOG(ERROR) << "Failed to establish GPU channel."; |
| 61 return scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl>(); | 60 return scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl>(); |
| 62 } | 61 } |
| 63 GURL url("chrome://gpu/GpuProcessTransportFactory::CreateCaptureContext"); | 62 GURL url("chrome://gpu/GpuProcessTransportFactory::CreateCaptureContext"); |
| 64 return make_scoped_ptr( | 63 return make_scoped_ptr(new WebGraphicsContext3DCommandBufferImpl( |
| 65 new WebGraphicsContext3DCommandBufferImpl( | 64 0, url, gpu_channel_host.get(), attrs, |
| 66 surface_id, | 65 true /* lose_context_when_out_of_memory */, |
| 67 url, | 66 content::WebGraphicsContext3DCommandBufferImpl::SharedMemoryLimits(), |
| 68 gpu_channel_host.get(), | 67 NULL)); |
| 69 attrs, | |
| 70 true /* lose_context_when_out_of_memory */, | |
| 71 content::WebGraphicsContext3DCommandBufferImpl::SharedMemoryLimits(), | |
| 72 NULL)); | |
| 73 } | 68 } |
| 74 | 69 |
| 75 // Modelled after | 70 // Modelled after |
| 76 // GpuProcessTransportFactory::CreateOffscreenCommandBufferContext(). | 71 // GpuProcessTransportFactory::CreateOffscreenCommandBufferContext(). |
| 77 scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl> | 72 scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl> |
| 78 CreateOffscreenCommandBufferContext() { | 73 CreateOffscreenCommandBufferContext() { |
| 79 content::CauseForGpuLaunch cause = content::CAUSE_FOR_GPU_LAUNCH_CANVAS_2D; | 74 content::CauseForGpuLaunch cause = content::CAUSE_FOR_GPU_LAUNCH_CANVAS_2D; |
| 80 // Android does not support synchronous opening of GPU channels. Should use | 75 // Android does not support synchronous opening of GPU channels. Should use |
| 81 // EstablishGpuChannel() instead. | 76 // EstablishGpuChannel() instead. |
| 82 if (!content::BrowserGpuChannelHostFactory::instance()) | 77 if (!content::BrowserGpuChannelHostFactory::instance()) |
| 83 return scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl>(); | 78 return scoped_ptr<content::WebGraphicsContext3DCommandBufferImpl>(); |
| 84 scoped_refptr<content::GpuChannelHost> gpu_channel_host( | 79 scoped_refptr<content::GpuChannelHost> gpu_channel_host( |
| 85 content::BrowserGpuChannelHostFactory::instance()-> | 80 content::BrowserGpuChannelHostFactory::instance()-> |
| 86 EstablishGpuChannelSync(cause)); | 81 EstablishGpuChannelSync(cause)); |
| 87 DCHECK(gpu_channel_host); | 82 DCHECK(gpu_channel_host); |
| 88 return CreateContextCommon(gpu_channel_host, 0); | 83 return CreateContextCommon(gpu_channel_host); |
| 89 } | 84 } |
| 90 #endif | 85 #endif |
| 91 | 86 |
| 92 typedef base::Callback<void(scoped_refptr<ContextProviderCommandBuffer>)> | 87 typedef base::Callback<void(scoped_refptr<ContextProviderCommandBuffer>)> |
| 93 ProcessContextCallback; | 88 ProcessContextCallback; |
| 94 | 89 |
| 95 void CreateContextOnUIThread(ProcessContextCallback bottom_half) { | 90 void CreateContextOnUIThread(ProcessContextCallback bottom_half) { |
| 96 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 91 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 97 #if !defined(OS_ANDROID) | 92 #if !defined(OS_ANDROID) |
| 98 bottom_half.Run(ContextProviderCommandBuffer::Create( | 93 bottom_half.Run(ContextProviderCommandBuffer::Create( |
| (...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 void VideoCaptureDeviceClient::TextureWrapHelper::OnError( | 761 void VideoCaptureDeviceClient::TextureWrapHelper::OnError( |
| 767 const std::string& message) { | 762 const std::string& message) { |
| 768 DCHECK(capture_task_runner_->BelongsToCurrentThread()); | 763 DCHECK(capture_task_runner_->BelongsToCurrentThread()); |
| 769 DLOG(ERROR) << message; | 764 DLOG(ERROR) << message; |
| 770 BrowserThread::PostTask( | 765 BrowserThread::PostTask( |
| 771 BrowserThread::IO, FROM_HERE, | 766 BrowserThread::IO, FROM_HERE, |
| 772 base::Bind(&VideoCaptureController::DoErrorOnIOThread, controller_)); | 767 base::Bind(&VideoCaptureController::DoErrorOnIOThread, controller_)); |
| 773 } | 768 } |
| 774 | 769 |
| 775 } // namespace content | 770 } // namespace content |
| OLD | NEW |