OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/pepper_plugin_delegate_impl.h" | 5 #include "content/renderer/pepper_plugin_delegate_impl.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 #include <queue> | 8 #include <queue> |
9 | 9 |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 15 matching lines...) Expand all Loading... | |
26 #include "content/common/pepper_file_messages.h" | 26 #include "content/common/pepper_file_messages.h" |
27 #include "content/common/pepper_plugin_registry.h" | 27 #include "content/common/pepper_plugin_registry.h" |
28 #include "content/common/pepper_messages.h" | 28 #include "content/common/pepper_messages.h" |
29 #include "content/common/view_messages.h" | 29 #include "content/common/view_messages.h" |
30 #include "content/renderer/content_renderer_client.h" | 30 #include "content/renderer/content_renderer_client.h" |
31 #include "content/renderer/gpu/command_buffer_proxy.h" | 31 #include "content/renderer/gpu/command_buffer_proxy.h" |
32 #include "content/renderer/gpu/gpu_channel_host.h" | 32 #include "content/renderer/gpu/gpu_channel_host.h" |
33 #include "content/renderer/gpu/renderer_gl_context.h" | 33 #include "content/renderer/gpu/renderer_gl_context.h" |
34 #include "content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h" | 34 #include "content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h" |
35 #include "content/renderer/media/audio_message_filter.h" | 35 #include "content/renderer/media/audio_message_filter.h" |
36 #include "content/renderer/media/video_capture_impl_manager.h" | |
36 #include "content/renderer/p2p/p2p_transport_impl.h" | 37 #include "content/renderer/p2p/p2p_transport_impl.h" |
37 #include "content/renderer/pepper_platform_context_3d_impl.h" | 38 #include "content/renderer/pepper_platform_context_3d_impl.h" |
38 #include "content/renderer/pepper_platform_video_decoder_impl.h" | 39 #include "content/renderer/pepper_platform_video_decoder_impl.h" |
39 #include "content/renderer/render_thread.h" | 40 #include "content/renderer/render_thread.h" |
40 #include "content/renderer/render_view.h" | 41 #include "content/renderer/render_view.h" |
41 #include "content/renderer/render_widget_fullscreen_pepper.h" | 42 #include "content/renderer/render_widget_fullscreen_pepper.h" |
42 #include "content/renderer/webplugin_delegate_proxy.h" | 43 #include "content/renderer/webplugin_delegate_proxy.h" |
43 #include "ipc/ipc_channel_handle.h" | 44 #include "ipc/ipc_channel_handle.h" |
45 #include "media/video/capture/video_capture_proxy.h" | |
44 #include "ppapi/c/dev/pp_video_dev.h" | 46 #include "ppapi/c/dev/pp_video_dev.h" |
45 #include "ppapi/c/pp_errors.h" | 47 #include "ppapi/c/pp_errors.h" |
46 #include "ppapi/c/private/ppb_flash.h" | 48 #include "ppapi/c/private/ppb_flash.h" |
47 #include "ppapi/c/private/ppb_flash_net_connector.h" | 49 #include "ppapi/c/private/ppb_flash_net_connector.h" |
48 #include "ppapi/proxy/host_dispatcher.h" | 50 #include "ppapi/proxy/host_dispatcher.h" |
49 #include "ppapi/proxy/ppapi_messages.h" | 51 #include "ppapi/proxy/ppapi_messages.h" |
50 #include "ppapi/shared_impl/ppapi_preferences.h" | 52 #include "ppapi/shared_impl/ppapi_preferences.h" |
51 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserComplet ion.h" | 53 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserComplet ion.h" |
52 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserParams. h" | 54 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserParams. h" |
53 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" | 55 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" |
54 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h" | 56 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h" |
55 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 57 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
56 #include "ui/gfx/size.h" | 58 #include "ui/gfx/size.h" |
57 #include "ui/gfx/surface/transport_dib.h" | 59 #include "ui/gfx/surface/transport_dib.h" |
58 #include "webkit/fileapi/file_system_callback_dispatcher.h" | 60 #include "webkit/fileapi/file_system_callback_dispatcher.h" |
59 #include "webkit/glue/context_menu.h" | 61 #include "webkit/glue/context_menu.h" |
60 #include "webkit/plugins/npapi/webplugin.h" | 62 #include "webkit/plugins/npapi/webplugin.h" |
61 #include "webkit/plugins/ppapi/file_path.h" | 63 #include "webkit/plugins/ppapi/file_path.h" |
62 #include "webkit/plugins/ppapi/ppb_file_io_impl.h" | 64 #include "webkit/plugins/ppapi/ppb_file_io_impl.h" |
63 #include "webkit/plugins/ppapi/plugin_module.h" | 65 #include "webkit/plugins/ppapi/plugin_module.h" |
64 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" | 66 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" |
65 #include "webkit/plugins/ppapi/ppb_broker_impl.h" | 67 #include "webkit/plugins/ppapi/ppb_broker_impl.h" |
66 #include "webkit/plugins/ppapi/ppb_flash_impl.h" | 68 #include "webkit/plugins/ppapi/ppb_flash_impl.h" |
67 #include "webkit/plugins/ppapi/ppb_flash_net_connector_impl.h" | 69 #include "webkit/plugins/ppapi/ppb_flash_net_connector_impl.h" |
68 | 70 |
69 using WebKit::WebView; | 71 using WebKit::WebView; |
70 | 72 |
71 namespace { | 73 namespace { |
72 | 74 |
73 const int32 kDefaultCommandBufferSize = 1024 * 1024; | |
74 | |
75 int32_t PlatformFileToInt(base::PlatformFile handle) { | 75 int32_t PlatformFileToInt(base::PlatformFile handle) { |
76 #if defined(OS_WIN) | 76 #if defined(OS_WIN) |
77 return static_cast<int32_t>(reinterpret_cast<intptr_t>(handle)); | 77 return static_cast<int32_t>(reinterpret_cast<intptr_t>(handle)); |
78 #elif defined(OS_POSIX) | 78 #elif defined(OS_POSIX) |
79 return handle; | 79 return handle; |
80 #else | 80 #else |
81 #error Not implemented. | 81 #error Not implemented. |
82 #endif | 82 #endif |
83 } | 83 } |
84 | 84 |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
349 pp::proxy::HostDispatcher::SetForInstance(instance, dispatcher_.get()); | 349 pp::proxy::HostDispatcher::SetForInstance(instance, dispatcher_.get()); |
350 } | 350 } |
351 virtual void RemoveInstance(PP_Instance instance) { | 351 virtual void RemoveInstance(PP_Instance instance) { |
352 pp::proxy::HostDispatcher::RemoveForInstance(instance); | 352 pp::proxy::HostDispatcher::RemoveForInstance(instance); |
353 } | 353 } |
354 | 354 |
355 private: | 355 private: |
356 scoped_ptr<pp::proxy::HostDispatcher> dispatcher_; | 356 scoped_ptr<pp::proxy::HostDispatcher> dispatcher_; |
357 }; | 357 }; |
358 | 358 |
359 class PlatformVideoCaptureImpl | |
360 : public webkit::ppapi::PluginDelegate::PlatformVideoCapture { | |
361 public: | |
362 PlatformVideoCaptureImpl(media::VideoCapture::EventHandler* handler) | |
363 : handler_proxy_(new media::VideoCaptureHandlerProxy( | |
364 handler, base::MessageLoopProxy::CreateForCurrentThread())) { | |
365 VideoCaptureImplManager* manager = | |
366 RenderThread::current()->video_capture_impl_manager(); | |
367 video_capture_ = manager->AddDevice(1, handler_proxy_.get()); | |
wjia(left Chromium)
2011/08/02 16:22:28
Is there any plan on device management for pepper?
piman
2011/08/03 00:44:41
Yes, I wanted to look at that at some point. Added
wjia(left Chromium)
2011/08/03 02:40:00
Device enumeration is done in media stream which h
| |
368 } | |
369 | |
370 // Overrides from media::VideoCapture::EventHandler | |
371 virtual ~PlatformVideoCaptureImpl() OVERRIDE { | |
372 VideoCaptureImplManager* manager = | |
373 RenderThread::current()->video_capture_impl_manager(); | |
374 manager->RemoveDevice(1, handler_proxy_.get()); | |
375 } | |
376 | |
377 virtual void StartCapture( | |
378 EventHandler* handler, | |
379 const VideoCaptureCapability& capability) OVERRIDE { | |
380 DCHECK(handler == handler_proxy_->proxied()); | |
381 video_capture_->StartCapture(handler_proxy_.get(), capability); | |
382 } | |
383 | |
384 virtual void StopCapture(EventHandler* handler) OVERRIDE { | |
385 DCHECK(handler == handler_proxy_->proxied()); | |
386 video_capture_->StopCapture(handler_proxy_.get()); | |
387 } | |
388 | |
389 virtual void FeedBuffer(scoped_refptr<VideoFrameBuffer> buffer) OVERRIDE { | |
390 video_capture_->FeedBuffer(buffer); | |
391 } | |
392 | |
393 virtual bool CaptureStarted() OVERRIDE { | |
394 return handler_proxy_->state().started; | |
395 } | |
396 | |
397 virtual int CaptureWidth() OVERRIDE { | |
398 return handler_proxy_->state().width; | |
399 } | |
400 | |
401 virtual int CaptureHeight() OVERRIDE { | |
402 return handler_proxy_->state().height; | |
403 } | |
404 | |
405 virtual int CaptureFrameRate() OVERRIDE { | |
406 return handler_proxy_->state().frame_rate; | |
407 } | |
408 | |
409 private: | |
410 scoped_ptr<media::VideoCaptureHandlerProxy> handler_proxy_; | |
411 media::VideoCapture* video_capture_; | |
412 }; | |
413 | |
359 } // namespace | 414 } // namespace |
360 | 415 |
361 bool DispatcherWrapper::Init( | 416 bool DispatcherWrapper::Init( |
362 RenderView* render_view, | 417 RenderView* render_view, |
363 base::ProcessHandle plugin_process_handle, | 418 base::ProcessHandle plugin_process_handle, |
364 const IPC::ChannelHandle& channel_handle, | 419 const IPC::ChannelHandle& channel_handle, |
365 PP_Module pp_module, | 420 PP_Module pp_module, |
366 pp::proxy::Dispatcher::GetInterfaceFunc local_get_interface) { | 421 pp::proxy::Dispatcher::GetInterfaceFunc local_get_interface) { |
367 dispatcher_.reset(new pp::proxy::HostDispatcher( | 422 dispatcher_.reset(new pp::proxy::HostDispatcher( |
368 plugin_process_handle, pp_module, local_get_interface)); | 423 plugin_process_handle, pp_module, local_get_interface)); |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
825 RendererGLContext* parent_context = context->context(); | 880 RendererGLContext* parent_context = context->context(); |
826 if (!parent_context) | 881 if (!parent_context) |
827 return NULL; | 882 return NULL; |
828 | 883 |
829 return new PlatformContext3DImpl(parent_context); | 884 return new PlatformContext3DImpl(parent_context); |
830 #else | 885 #else |
831 return NULL; | 886 return NULL; |
832 #endif | 887 #endif |
833 } | 888 } |
834 | 889 |
890 webkit::ppapi::PluginDelegate::PlatformVideoCapture* | |
891 PepperPluginDelegateImpl::CreateVideoCapture( | |
892 media::VideoCapture::EventHandler* handler) { | |
893 return new PlatformVideoCaptureImpl(handler); | |
894 } | |
895 | |
835 webkit::ppapi::PluginDelegate::PlatformVideoDecoder* | 896 webkit::ppapi::PluginDelegate::PlatformVideoDecoder* |
836 PepperPluginDelegateImpl::CreateVideoDecoder( | 897 PepperPluginDelegateImpl::CreateVideoDecoder( |
837 media::VideoDecodeAccelerator::Client* client, | 898 media::VideoDecodeAccelerator::Client* client, |
838 int32 command_buffer_route_id) { | 899 int32 command_buffer_route_id) { |
839 return new PlatformVideoDecoderImpl(client, command_buffer_route_id); | 900 return new PlatformVideoDecoderImpl(client, command_buffer_route_id); |
840 } | 901 } |
841 | 902 |
842 void PepperPluginDelegateImpl::NumberOfFindResultsChanged(int identifier, | 903 void PepperPluginDelegateImpl::NumberOfFindResultsChanged(int identifier, |
843 int total, | 904 int total, |
844 bool final_result) { | 905 bool final_result) { |
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1344 if (!base::SharedMemory::IsHandleValid(handle)) { | 1405 if (!base::SharedMemory::IsHandleValid(handle)) { |
1345 DLOG(WARNING) << "Browser failed to allocate shared memory"; | 1406 DLOG(WARNING) << "Browser failed to allocate shared memory"; |
1346 return NULL; | 1407 return NULL; |
1347 } | 1408 } |
1348 return new base::SharedMemory(handle, false); | 1409 return new base::SharedMemory(handle, false); |
1349 } | 1410 } |
1350 | 1411 |
1351 ppapi::Preferences PepperPluginDelegateImpl::GetPreferences() { | 1412 ppapi::Preferences PepperPluginDelegateImpl::GetPreferences() { |
1352 return ppapi::Preferences(render_view_->webkit_preferences()); | 1413 return ppapi::Preferences(render_view_->webkit_preferences()); |
1353 } | 1414 } |
OLD | NEW |