| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PPAPI_PROXY_VIDEO_CAPTURE_RESOURCE_H_ |
| #define PPAPI_PROXY_VIDEO_CAPTURE_RESOURCE_H_ |
| |
| #include <stdint.h> |
| |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| #include "ppapi/c/dev/ppp_video_capture_dev.h" |
| #include "ppapi/proxy/device_enumeration_resource_helper.h" |
| #include "ppapi/proxy/plugin_resource.h" |
| #include "ppapi/thunk/ppb_video_capture_api.h" |
| |
| namespace ppapi { |
| namespace proxy { |
| |
| class PluginDispatcher; |
| |
| class VideoCaptureResource |
| : public PluginResource, |
| public ::ppapi::thunk::PPB_VideoCapture_API { |
| public: |
| VideoCaptureResource(Connection connection, |
| PP_Instance instance, |
| PluginDispatcher* dispatcher); |
| ~VideoCaptureResource() override; |
| |
| // PluginResource override. |
| thunk::PPB_VideoCapture_API* AsPPB_VideoCapture_API() override { |
| return this; |
| } |
| |
| // PPB_VideoCapture_API implementation. |
| int32_t EnumerateDevices( |
| const PP_ArrayOutput& output, |
| scoped_refptr<TrackedCallback> callback) override; |
| int32_t MonitorDeviceChange( |
| PP_MonitorDeviceChangeCallback callback, |
| void* user_data) override; |
| int32_t Open(const std::string& device_id, |
| const PP_VideoCaptureDeviceInfo_Dev& requested_info, |
| uint32_t buffer_count, |
| scoped_refptr<TrackedCallback> callback) override; |
| int32_t StartCapture() override; |
| int32_t ReuseBuffer(uint32_t buffer) override; |
| int32_t StopCapture() override; |
| void Close() override; |
| int32_t EnumerateDevicesSync(const PP_ArrayOutput& devices) override; |
| |
| protected: |
| // Resource override. |
| void LastPluginRefWasDeleted() override; |
| |
| private: |
| enum OpenState { |
| BEFORE_OPEN, |
| OPENED, |
| CLOSED |
| }; |
| |
| // PluginResource overrides. |
| void OnReplyReceived(const ResourceMessageReplyParams& params, |
| const IPC::Message& msg) override; |
| |
| void OnPluginMsgOnDeviceInfo(const ResourceMessageReplyParams& params, |
| const struct PP_VideoCaptureDeviceInfo_Dev& info, |
| const std::vector<HostResource>& buffers, |
| uint32_t buffer_size); |
| void OnPluginMsgOnStatus(const ResourceMessageReplyParams& params, |
| uint32_t status); |
| void OnPluginMsgOnError(const ResourceMessageReplyParams& params, |
| uint32_t error); |
| void OnPluginMsgOnBufferReady(const ResourceMessageReplyParams& params, |
| uint32_t buffer); |
| |
| void OnPluginMsgOpenReply(const ResourceMessageReplyParams& params); |
| |
| void SetBufferInUse(uint32_t buffer_index); |
| |
| // Points to the C interface of client implementation. |
| const PPP_VideoCapture_Dev* ppp_video_capture_impl_; |
| |
| // Indicates that the i-th buffer is currently in use. |
| std::vector<bool> buffer_in_use_; |
| |
| // Holds a reference of the callback so that Close() can cancel it. |
| scoped_refptr<TrackedCallback> open_callback_; |
| OpenState open_state_; |
| |
| DeviceEnumerationResourceHelper enumeration_helper_; |
| |
| DISALLOW_COPY_AND_ASSIGN(VideoCaptureResource); |
| }; |
| |
| } // namespace proxy |
| } // namespace ppapi |
| |
| #endif // PPAPI_PROXY_VIDEO_CAPTURE_RESOURCE_H_ |