Home | History | Annotate | Download | only in proxy
      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_
    100