Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(621)

Side by Side Diff: ppapi/cpp/dev/video_capture_dev.cc

Issue 11274036: Refactor video capture to new design (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: bind callback Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/cpp/dev/video_capture_dev.h" 5 #include "ppapi/cpp/dev/video_capture_dev.h"
6 6
7 #include "ppapi/c/dev/ppb_video_capture_dev.h" 7 #include "ppapi/c/dev/ppb_video_capture_dev.h"
8 #include "ppapi/c/pp_errors.h" 8 #include "ppapi/c/pp_errors.h"
9 #include "ppapi/cpp/dev/resource_array_dev.h" 9 #include "ppapi/cpp/dev/resource_array_dev.h"
10 #include "ppapi/cpp/instance_handle.h" 10 #include "ppapi/cpp/instance_handle.h"
11 #include "ppapi/cpp/module_impl.h" 11 #include "ppapi/cpp/module_impl.h"
12 12
13 namespace pp { 13 namespace pp {
14 14
15 namespace { 15 namespace {
16 16
17 template <> const char* interface_name<PPB_VideoCapture_Dev_0_2>() { 17 template <> const char* interface_name<PPB_VideoCapture_Dev_0_2>() {
18 return PPB_VIDEOCAPTURE_DEV_INTERFACE_0_2; 18 return PPB_VIDEOCAPTURE_DEV_INTERFACE_0_2;
19 } 19 }
20 20
21 template <> const char* interface_name<PPB_VideoCapture_Dev_0_1>() {
22 return PPB_VIDEOCAPTURE_DEV_INTERFACE_0_1;
23 }
24
25 } // namespace 21 } // namespace
26 22
27 VideoCapture_Dev::VideoCapture_Dev(const InstanceHandle& instance) 23 VideoCapture_Dev::VideoCapture_Dev(const InstanceHandle& instance)
28 : requested_info_(), 24 : requested_info_(),
29 buffer_count_(0) { 25 buffer_count_(0) {
30 if (has_interface<PPB_VideoCapture_Dev_0_2>()) { 26 if (has_interface<PPB_VideoCapture_Dev_0_2>()) {
31 PassRefFromConstructor(get_interface<PPB_VideoCapture_Dev_0_2>()->Create( 27 PassRefFromConstructor(get_interface<PPB_VideoCapture_Dev_0_2>()->Create(
32 instance.pp_instance())); 28 instance.pp_instance()));
33 } else if (has_interface<PPB_VideoCapture_Dev_0_1>()) {
34 PassRefFromConstructor(get_interface<PPB_VideoCapture_Dev_0_1>()->Create(
35 instance.pp_instance()));
36 } 29 }
37 } 30 }
38 31
39 VideoCapture_Dev::VideoCapture_Dev(PP_Resource resource) 32 VideoCapture_Dev::VideoCapture_Dev(PP_Resource resource)
40 : Resource(resource), 33 : Resource(resource),
41 requested_info_(), 34 requested_info_(),
42 buffer_count_(0) { 35 buffer_count_(0) {
43 } 36 }
44 37
45 VideoCapture_Dev::~VideoCapture_Dev() { 38 VideoCapture_Dev::~VideoCapture_Dev() {
46 } 39 }
47 40
48 // static 41 // static
49 bool VideoCapture_Dev::IsAvailable() { 42 bool VideoCapture_Dev::IsAvailable() {
50 return has_interface<PPB_VideoCapture_Dev_0_2>() || 43 return has_interface<PPB_VideoCapture_Dev_0_2>();
51 has_interface<PPB_VideoCapture_Dev_0_1>();
52 } 44 }
53 45
54 int32_t VideoCapture_Dev::EnumerateDevices( 46 int32_t VideoCapture_Dev::EnumerateDevices(
55 const CompletionCallbackWithOutput<std::vector<DeviceRef_Dev> >& callback) { 47 const CompletionCallbackWithOutput<std::vector<DeviceRef_Dev> >& callback) {
56 if (!has_interface<PPB_VideoCapture_Dev_0_2>()) 48 if (!has_interface<PPB_VideoCapture_Dev_0_2>())
57 return callback.MayForce(PP_ERROR_NOINTERFACE); 49 return callback.MayForce(PP_ERROR_NOINTERFACE);
58 if (!callback.pp_completion_callback().func) 50 if (!callback.pp_completion_callback().func)
59 return callback.MayForce(PP_ERROR_BLOCKS_MAIN_THREAD); 51 return callback.MayForce(PP_ERROR_BLOCKS_MAIN_THREAD);
60 52
61 // ArrayOutputCallbackConverter is responsible to delete it. 53 // ArrayOutputCallbackConverter is responsible to delete it.
(...skipping 10 matching lines...) Expand all
72 const DeviceRef_Dev& device_ref, 64 const DeviceRef_Dev& device_ref,
73 const PP_VideoCaptureDeviceInfo_Dev& requested_info, 65 const PP_VideoCaptureDeviceInfo_Dev& requested_info,
74 uint32_t buffer_count, 66 uint32_t buffer_count,
75 const CompletionCallback& callback) { 67 const CompletionCallback& callback) {
76 if (has_interface<PPB_VideoCapture_Dev_0_2>()) { 68 if (has_interface<PPB_VideoCapture_Dev_0_2>()) {
77 return get_interface<PPB_VideoCapture_Dev_0_2>()->Open( 69 return get_interface<PPB_VideoCapture_Dev_0_2>()->Open(
78 pp_resource(), device_ref.pp_resource(), &requested_info, buffer_count, 70 pp_resource(), device_ref.pp_resource(), &requested_info, buffer_count,
79 callback.pp_completion_callback()); 71 callback.pp_completion_callback());
80 } 72 }
81 73
82 if (has_interface<PPB_VideoCapture_Dev_0_1>()) {
83 if (device_ref.is_null()) {
84 requested_info_ = requested_info;
yzshen1 2012/11/06 06:51:40 You need to remove those unnecessary class members
victorhsieh 2012/11/08 09:20:18 Done. Thanks for catching.
85 buffer_count_ = buffer_count;
86 return callback.MayForce(PP_OK);
87 }
88 return callback.MayForce(PP_ERROR_NOTSUPPORTED);
89 }
90
91 return callback.MayForce(PP_ERROR_NOINTERFACE); 74 return callback.MayForce(PP_ERROR_NOINTERFACE);
92 } 75 }
93 76
94 int32_t VideoCapture_Dev::StartCapture() { 77 int32_t VideoCapture_Dev::StartCapture() {
95 if (has_interface<PPB_VideoCapture_Dev_0_2>()) { 78 if (has_interface<PPB_VideoCapture_Dev_0_2>()) {
96 return get_interface<PPB_VideoCapture_Dev_0_2>()->StartCapture( 79 return get_interface<PPB_VideoCapture_Dev_0_2>()->StartCapture(
97 pp_resource()); 80 pp_resource());
98 } 81 }
99 82
100 if (has_interface<PPB_VideoCapture_Dev_0_1>()) {
101 return get_interface<PPB_VideoCapture_Dev_0_1>()->StartCapture(
102 pp_resource(), &requested_info_, buffer_count_);
103 }
104
105 return PP_ERROR_NOINTERFACE; 83 return PP_ERROR_NOINTERFACE;
106 } 84 }
107 85
108 int32_t VideoCapture_Dev::ReuseBuffer(uint32_t buffer) { 86 int32_t VideoCapture_Dev::ReuseBuffer(uint32_t buffer) {
109 if (has_interface<PPB_VideoCapture_Dev_0_2>()) { 87 if (has_interface<PPB_VideoCapture_Dev_0_2>()) {
110 return get_interface<PPB_VideoCapture_Dev_0_2>()->ReuseBuffer(pp_resource(), 88 return get_interface<PPB_VideoCapture_Dev_0_2>()->ReuseBuffer(pp_resource(),
111 buffer); 89 buffer);
112 } 90 }
113 91
114 if (has_interface<PPB_VideoCapture_Dev_0_1>()) {
115 return get_interface<PPB_VideoCapture_Dev_0_1>()->ReuseBuffer(pp_resource(),
116 buffer);
117 }
118
119 return PP_ERROR_NOINTERFACE; 92 return PP_ERROR_NOINTERFACE;
120 } 93 }
121 94
122 int32_t VideoCapture_Dev::StopCapture() { 95 int32_t VideoCapture_Dev::StopCapture() {
123 if (has_interface<PPB_VideoCapture_Dev_0_2>()) { 96 if (has_interface<PPB_VideoCapture_Dev_0_2>()) {
124 return get_interface<PPB_VideoCapture_Dev_0_2>()->StopCapture( 97 return get_interface<PPB_VideoCapture_Dev_0_2>()->StopCapture(
125 pp_resource()); 98 pp_resource());
126 } 99 }
127 100
128 if (has_interface<PPB_VideoCapture_Dev_0_1>()) {
129 return get_interface<PPB_VideoCapture_Dev_0_1>()->StopCapture(
130 pp_resource());
131 }
132
133 return PP_ERROR_NOINTERFACE; 101 return PP_ERROR_NOINTERFACE;
134 } 102 }
135 103
136 void VideoCapture_Dev::Close() { 104 void VideoCapture_Dev::Close() {
137 if (has_interface<PPB_VideoCapture_Dev_0_2>()) 105 if (has_interface<PPB_VideoCapture_Dev_0_2>())
138 get_interface<PPB_VideoCapture_Dev_0_2>()->Close(pp_resource()); 106 get_interface<PPB_VideoCapture_Dev_0_2>()->Close(pp_resource());
139 } 107 }
140 108
141 } // namespace pp 109 } // namespace pp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698