Index: ppapi/cpp/dev/video_capture_dev.cc |
diff --git a/ppapi/cpp/dev/video_capture_dev.cc b/ppapi/cpp/dev/video_capture_dev.cc |
index c1c60ec576d0baebdc639bc4dae10167074330e1..94ed933fec77a4e21f42d99bb1a7879899a7c74e 100644 |
--- a/ppapi/cpp/dev/video_capture_dev.cc |
+++ b/ppapi/cpp/dev/video_capture_dev.cc |
@@ -17,8 +17,12 @@ namespace pp { |
namespace { |
-template <> const char* interface_name<PPB_VideoCapture_Dev>() { |
- return PPB_VIDEOCAPTURE_DEV_INTERFACE; |
+template <> const char* interface_name<PPB_VideoCapture_Dev_0_2>() { |
+ return PPB_VIDEOCAPTURE_DEV_INTERFACE_0_2; |
+} |
+ |
+template <> const char* interface_name<PPB_VideoCapture_Dev_0_1>() { |
+ return PPB_VIDEOCAPTURE_DEV_INTERFACE_0_1; |
} |
} // namespace |
@@ -40,21 +44,30 @@ struct VideoCapture_Dev::EnumerateDevicesState { |
}; |
VideoCapture_Dev::VideoCapture_Dev(const InstanceHandle& instance) |
- : enum_state_(NULL) { |
- if (!has_interface<PPB_VideoCapture_Dev>()) |
- return; |
- PassRefFromConstructor(get_interface<PPB_VideoCapture_Dev>()->Create( |
- instance.pp_instance())); |
+ : enum_state_(NULL), |
+ requested_info_(), |
+ buffer_count_(0) { |
+ if (has_interface<PPB_VideoCapture_Dev_0_2>()) { |
+ PassRefFromConstructor(get_interface<PPB_VideoCapture_Dev_0_2>()->Create( |
+ instance.pp_instance())); |
+ } else if (has_interface<PPB_VideoCapture_Dev_0_1>()) { |
+ PassRefFromConstructor(get_interface<PPB_VideoCapture_Dev_0_1>()->Create( |
+ instance.pp_instance())); |
+ } |
} |
VideoCapture_Dev::VideoCapture_Dev(PP_Resource resource) |
: Resource(resource), |
- enum_state_(NULL) { |
+ enum_state_(NULL), |
+ requested_info_(), |
+ buffer_count_(0) { |
} |
VideoCapture_Dev::VideoCapture_Dev(const VideoCapture_Dev& other) |
: Resource(other), |
- enum_state_(NULL) { |
+ enum_state_(NULL), |
+ requested_info_(other.requested_info_), |
+ buffer_count_(other.buffer_count_) { |
} |
VideoCapture_Dev::~VideoCapture_Dev() { |
@@ -66,17 +79,20 @@ VideoCapture_Dev& VideoCapture_Dev::operator=( |
AbortEnumerateDevices(); |
Resource::operator=(other); |
+ requested_info_ = other.requested_info_; |
+ buffer_count_ = other.buffer_count_; |
return *this; |
} |
// static |
bool VideoCapture_Dev::IsAvailable() { |
- return has_interface<PPB_VideoCapture_Dev>(); |
+ return has_interface<PPB_VideoCapture_Dev_0_2>() || |
+ has_interface<PPB_VideoCapture_Dev_0_1>(); |
} |
int32_t VideoCapture_Dev::EnumerateDevices(std::vector<DeviceRef_Dev>* devices, |
const CompletionCallback& callback) { |
- if (!has_interface<PPB_VideoCapture_Dev>()) |
+ if (!has_interface<PPB_VideoCapture_Dev_0_2>()) |
return callback.MayForce(PP_ERROR_NOINTERFACE); |
if (!devices) |
return callback.MayForce(PP_ERROR_BADARGUMENT); |
@@ -87,7 +103,7 @@ int32_t VideoCapture_Dev::EnumerateDevices(std::vector<DeviceRef_Dev>* devices, |
// It will be deleted in OnEnumerateDevicesComplete(). |
enum_state_ = new EnumerateDevicesState(devices, callback, this); |
- return get_interface<PPB_VideoCapture_Dev>()->EnumerateDevices( |
+ return get_interface<PPB_VideoCapture_Dev_0_2>()->EnumerateDevices( |
pp_resource(), &enum_state_->devices_resource, |
PP_MakeCompletionCallback(&VideoCapture_Dev::OnEnumerateDevicesComplete, |
enum_state_)); |
@@ -98,35 +114,69 @@ int32_t VideoCapture_Dev::Open( |
const PP_VideoCaptureDeviceInfo_Dev& requested_info, |
uint32_t buffer_count, |
const CompletionCallback& callback) { |
- if (!has_interface<PPB_VideoCapture_Dev>()) |
- return callback.MayForce(PP_ERROR_NOINTERFACE); |
- return get_interface<PPB_VideoCapture_Dev>()->Open( |
- pp_resource(), device_ref.pp_resource(), &requested_info, buffer_count, |
- callback.pp_completion_callback()); |
+ if (has_interface<PPB_VideoCapture_Dev_0_2>()) { |
+ return get_interface<PPB_VideoCapture_Dev_0_2>()->Open( |
+ pp_resource(), device_ref.pp_resource(), &requested_info, buffer_count, |
+ callback.pp_completion_callback()); |
+ } |
+ |
+ if (has_interface<PPB_VideoCapture_Dev_0_1>()) { |
+ if (device_ref.is_null()) { |
+ requested_info_ = requested_info; |
+ buffer_count_ = buffer_count; |
+ return callback.MayForce(PP_OK); |
+ } |
+ return callback.MayForce(PP_ERROR_NOTSUPPORTED); |
+ } |
+ |
+ return callback.MayForce(PP_ERROR_NOINTERFACE); |
} |
int32_t VideoCapture_Dev::StartCapture() { |
- if (!has_interface<PPB_VideoCapture_Dev>()) |
- return PP_ERROR_NOINTERFACE; |
- return get_interface<PPB_VideoCapture_Dev>()->StartCapture(pp_resource()); |
+ if (has_interface<PPB_VideoCapture_Dev_0_2>()) { |
+ return get_interface<PPB_VideoCapture_Dev_0_2>()->StartCapture( |
+ pp_resource()); |
+ } |
+ |
+ if (has_interface<PPB_VideoCapture_Dev_0_1>()) { |
+ return get_interface<PPB_VideoCapture_Dev_0_1>()->StartCapture( |
+ pp_resource(), &requested_info_, buffer_count_); |
+ } |
+ |
+ return PP_ERROR_NOINTERFACE; |
} |
int32_t VideoCapture_Dev::ReuseBuffer(uint32_t buffer) { |
- if (!has_interface<PPB_VideoCapture_Dev>()) |
- return PP_ERROR_NOINTERFACE; |
- return get_interface<PPB_VideoCapture_Dev>()->ReuseBuffer( |
- pp_resource(), buffer); |
+ if (has_interface<PPB_VideoCapture_Dev_0_2>()) { |
+ return get_interface<PPB_VideoCapture_Dev_0_2>()->ReuseBuffer(pp_resource(), |
+ buffer); |
+ } |
+ |
+ if (has_interface<PPB_VideoCapture_Dev_0_1>()) { |
+ return get_interface<PPB_VideoCapture_Dev_0_1>()->ReuseBuffer(pp_resource(), |
+ buffer); |
+ } |
+ |
+ return PP_ERROR_NOINTERFACE; |
} |
int32_t VideoCapture_Dev::StopCapture() { |
- if (!has_interface<PPB_VideoCapture_Dev>()) |
- return PP_ERROR_NOINTERFACE; |
- return get_interface<PPB_VideoCapture_Dev>()->StopCapture(pp_resource()); |
+ if (has_interface<PPB_VideoCapture_Dev_0_2>()) { |
+ return get_interface<PPB_VideoCapture_Dev_0_2>()->StopCapture( |
+ pp_resource()); |
+ } |
+ |
+ if (has_interface<PPB_VideoCapture_Dev_0_1>()) { |
+ return get_interface<PPB_VideoCapture_Dev_0_1>()->StopCapture( |
+ pp_resource()); |
+ } |
+ |
+ return PP_ERROR_NOINTERFACE; |
} |
void VideoCapture_Dev::Close() { |
- if (has_interface<PPB_VideoCapture_Dev>()) |
- get_interface<PPB_VideoCapture_Dev>()->Close(pp_resource()); |
+ if (has_interface<PPB_VideoCapture_Dev_0_2>()) |
+ get_interface<PPB_VideoCapture_Dev_0_2>()->Close(pp_resource()); |
} |
void VideoCapture_Dev::AbortEnumerateDevices() { |