Index: ppapi/thunk/ppb_video_capture_thunk.cc |
diff --git a/ppapi/thunk/ppb_video_capture_thunk.cc b/ppapi/thunk/ppb_video_capture_thunk.cc |
index d677471d2288ab3fd91a1a97a34d9aaff8c3fac0..66ea4bcdb57e2986e8d4e9af0413383a07419dcf 100644 |
--- a/ppapi/thunk/ppb_video_capture_thunk.cc |
+++ b/ppapi/thunk/ppb_video_capture_thunk.cc |
@@ -3,10 +3,12 @@ |
// found in the LICENSE file. |
#include "ppapi/c/pp_errors.h" |
+#include "ppapi/shared_impl/ppb_device_ref_shared.h" |
#include "ppapi/thunk/enter.h" |
-#include "ppapi/thunk/thunk.h" |
+#include "ppapi/thunk/ppb_device_ref_api.h" |
#include "ppapi/thunk/ppb_video_capture_api.h" |
#include "ppapi/thunk/resource_creation_api.h" |
+#include "ppapi/thunk/thunk.h" |
namespace ppapi { |
namespace thunk { |
@@ -27,13 +29,44 @@ PP_Bool IsVideoCapture(PP_Resource resource) { |
return PP_FromBool(enter.succeeded()); |
} |
-int32_t StartCapture(PP_Resource video_capture, |
- const PP_VideoCaptureDeviceInfo_Dev* requested_info, |
- uint32_t buffer_count) { |
+int32_t EnumerateDevices(PP_Resource video_capture, |
+ PP_Resource* devices, |
+ PP_CompletionCallback callback) { |
+ EnterVideoCapture enter(video_capture, callback, true); |
+ if (enter.failed()) |
+ return enter.retval(); |
+ |
+ return enter.SetResult(enter.object()->EnumerateDevices(devices, callback)); |
+} |
+ |
+int32_t Open(PP_Resource video_capture, |
+ PP_Resource device_ref, |
+ const PP_VideoCaptureDeviceInfo_Dev* requested_info, |
+ uint32_t buffer_count, |
+ PP_CompletionCallback callback) { |
+ EnterVideoCapture enter(video_capture, callback, true); |
+ if (enter.failed()) |
+ return enter.retval(); |
+ |
+ std::string device_id; |
+ // |device_id| remains empty if |device_ref| is 0, which means the default |
+ // device. |
+ if (device_ref != 0) { |
+ EnterResourceNoLock<PPB_DeviceRef_API> enter_device_ref(device_ref, true); |
+ if (enter_device_ref.failed()) |
+ return enter.SetResult(PP_ERROR_BADRESOURCE); |
+ device_id = enter_device_ref.object()->GetDeviceRefData().id; |
+ } |
+ |
+ return enter.SetResult(enter.object()->Open( |
+ device_id, *requested_info, buffer_count, callback)); |
+} |
+ |
+int32_t StartCapture(PP_Resource video_capture) { |
EnterVideoCapture enter(video_capture, true); |
if (enter.failed()) |
return enter.retval(); |
- return enter.object()->StartCapture(*requested_info, buffer_count); |
+ return enter.object()->StartCapture(); |
} |
int32_t ReuseBuffer(PP_Resource video_capture, |
@@ -51,18 +84,49 @@ int32_t StopCapture(PP_Resource video_capture) { |
return enter.object()->StopCapture(); |
} |
-const PPB_VideoCapture_Dev g_ppb_videocapture_thunk = { |
+void Close(PP_Resource video_capture) { |
+ EnterVideoCapture enter(video_capture, true); |
+ if (enter.succeeded()) |
+ enter.object()->Close(); |
+} |
+ |
+int32_t StartCapture0_1(PP_Resource video_capture, |
+ const PP_VideoCaptureDeviceInfo_Dev* requested_info, |
+ uint32_t buffer_count) { |
+ EnterVideoCapture enter(video_capture, true); |
+ if (enter.failed()) |
+ return enter.retval(); |
+ |
+ return enter.object()->StartCapture0_1(*requested_info, buffer_count); |
+} |
+ |
+const PPB_VideoCapture_Dev_0_1 g_ppb_video_capture_0_1_thunk = { |
&Create, |
&IsVideoCapture, |
- &StartCapture, |
+ &StartCapture0_1, |
&ReuseBuffer, |
&StopCapture |
}; |
+const PPB_VideoCapture_Dev_0_2 g_ppb_video_capture_0_2_thunk = { |
+ &Create, |
+ &IsVideoCapture, |
+ &EnumerateDevices, |
+ &Open, |
+ &StartCapture, |
+ &ReuseBuffer, |
+ &StopCapture, |
+ &Close |
+}; |
+ |
} // namespace |
const PPB_VideoCapture_Dev_0_1* GetPPB_VideoCapture_Dev_0_1_Thunk() { |
- return &g_ppb_videocapture_thunk; |
+ return &g_ppb_video_capture_0_1_thunk; |
+} |
+ |
+const PPB_VideoCapture_Dev_0_2* GetPPB_VideoCapture_Dev_0_2_Thunk() { |
+ return &g_ppb_video_capture_0_2_thunk; |
} |
} // namespace thunk |