1c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// Use of this source code is governed by a BSD-style license that can be
3c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// found in the LICENSE file.
4c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu
5c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu#ifndef PPAPI_CPP_DEV_VIDEO_CAPTURE_DEV_H_
6c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu#define PPAPI_CPP_DEV_VIDEO_CAPTURE_DEV_H_
7c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu
8c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu#include <vector>
9c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu
109b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#include "ppapi/c/dev/pp_video_capture_dev.h"
11c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu#include "ppapi/cpp/completion_callback.h"
12c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu#include "ppapi/cpp/dev/device_ref_dev.h"
139ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek#include "ppapi/cpp/resource.h"
14c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu
1599ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikienamespace pp {
1699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
17d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikieclass InstanceHandle;
18ef3643fbbbf66247c5e205497fae0f46e240c143David Blaikie
19c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenekclass VideoCapture_Dev : public Resource {
204fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek public:
214fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek  explicit VideoCapture_Dev(const InstanceHandle& instance);
224fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek  VideoCapture_Dev(PP_Resource resource);
23255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek
24255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek  virtual ~VideoCapture_Dev();
255a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose
265a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose  // Returns true if the required interface is available.
27a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek  static bool IsAvailable();
28a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek
29255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek  int32_t EnumerateDevices(
30255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek      const CompletionCallbackWithOutput<std::vector<DeviceRef_Dev> >&
31255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek          callback);
32c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek  int32_t MonitorDeviceChange(PP_MonitorDeviceChangeCallback callback,
334fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek                              void* user_data);
347b73e0832b20af1f43601a3d19e76d02d9f4dce5Ted Kremenek  int32_t Open(const DeviceRef_Dev& device_ref,
35255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek               const PP_VideoCaptureDeviceInfo_Dev& requested_info,
36882998923889a2fcce9b49696506c499e22cf38fTed Kremenek               uint32_t buffer_count,
374fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek               const CompletionCallback& callback);
384fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek  int32_t StartCapture();
39c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek  int32_t ReuseBuffer(uint32_t buffer);
40c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek  int32_t StopCapture();
41c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek  void Close();
42c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek};
43c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek
44c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek}  // namespace pp
45c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek
46c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek#endif  // PPAPI_CPP_DEV_VIDEO_CAPTURE_DEV_H_
47c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek