- add sources.
[platform/framework/web/crosswalk.git] / src / ppapi / proxy / video_capture_resource.h
1 // Copyright (c) 2012 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 PPAPI_PROXY_VIDEO_CAPTURE_RESOURCE_H_
6 #define PPAPI_PROXY_VIDEO_CAPTURE_RESOURCE_H_
7
8 #include "base/compiler_specific.h"
9 #include "ppapi/c/dev/ppp_video_capture_dev.h"
10 #include "ppapi/proxy/device_enumeration_resource_helper.h"
11 #include "ppapi/proxy/plugin_resource.h"
12 #include "ppapi/thunk/ppb_video_capture_api.h"
13
14 namespace ppapi {
15 namespace proxy {
16
17 class VideoCaptureResource
18     : public PluginResource,
19       public ::ppapi::thunk::PPB_VideoCapture_API {
20  public:
21   VideoCaptureResource(Connection connection,
22                        PP_Instance instance,
23                        PluginDispatcher* dispatcher);
24   virtual ~VideoCaptureResource();
25
26   // PluginResource override.
27   virtual thunk::PPB_VideoCapture_API* AsPPB_VideoCapture_API() OVERRIDE {
28     return this;
29   }
30
31   // PPB_VideoCapture_API implementation.
32   virtual int32_t EnumerateDevices0_2(
33       PP_Resource* devices,
34       scoped_refptr<TrackedCallback> callback) OVERRIDE;
35   virtual int32_t EnumerateDevices(
36       const PP_ArrayOutput& output,
37       scoped_refptr<TrackedCallback> callback) OVERRIDE;
38   virtual int32_t MonitorDeviceChange(
39       PP_MonitorDeviceChangeCallback callback,
40       void* user_data) OVERRIDE;
41   virtual int32_t Open(const std::string& device_id,
42                        const PP_VideoCaptureDeviceInfo_Dev& requested_info,
43                        uint32_t buffer_count,
44                        scoped_refptr<TrackedCallback> callback) OVERRIDE;
45   virtual int32_t StartCapture() OVERRIDE;
46   virtual int32_t ReuseBuffer(uint32_t buffer) OVERRIDE;
47   virtual int32_t StopCapture() OVERRIDE;
48   virtual void Close() OVERRIDE;
49   virtual int32_t EnumerateDevicesSync(const PP_ArrayOutput& devices) OVERRIDE;
50
51  protected:
52   // Resource override.
53   virtual void LastPluginRefWasDeleted() OVERRIDE;
54
55  private:
56   enum OpenState {
57     BEFORE_OPEN,
58     OPENED,
59     CLOSED
60   };
61
62   // PluginResource overrides.
63   virtual void OnReplyReceived(const ResourceMessageReplyParams& params,
64                                const IPC::Message& msg) OVERRIDE;
65
66   void OnPluginMsgOnDeviceInfo(const ResourceMessageReplyParams& params,
67                                const struct PP_VideoCaptureDeviceInfo_Dev& info,
68                                const std::vector<HostResource>& buffers,
69                                uint32_t buffer_size);
70   void OnPluginMsgOnStatus(const ResourceMessageReplyParams& params,
71                            uint32_t status);
72   void OnPluginMsgOnError(const ResourceMessageReplyParams& params,
73                           uint32_t error);
74   void OnPluginMsgOnBufferReady(const ResourceMessageReplyParams& params,
75                                 uint32_t buffer);
76
77   void OnPluginMsgOpenReply(const ResourceMessageReplyParams& params);
78
79   void SetBufferInUse(uint32_t buffer_index);
80
81   // Points to the C interface of client implementation.
82   const PPP_VideoCapture_Dev* ppp_video_capture_impl_;
83
84   // Indicates that the i-th buffer is currently in use.
85   std::vector<bool> buffer_in_use_;
86
87   // Holds a reference of the callback so that Close() can cancel it.
88   scoped_refptr<TrackedCallback> open_callback_;
89   OpenState open_state_;
90
91   DeviceEnumerationResourceHelper enumeration_helper_;
92
93   DISALLOW_COPY_AND_ASSIGN(VideoCaptureResource);
94 };
95
96 }  // namespace proxy
97 }  // namespace ppapi
98
99 #endif  // PPAPI_PROXY_VIDEO_CAPTURE_RESOURCE_H_