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

Side by Side Diff: webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit.mm

Issue 2309253005: Unify the macOS and iOS capturer implementations (Closed)
Patch Set: remove added presubmit filter Created 4 years, 2 months 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
(Empty)
1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit.h"
12 #import "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_info_objc.h"
13 #import "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_objc.h"
14 #include "webrtc/modules/video_capture/video_capture_config.h"
15 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
16 #include "webrtc/system_wrappers/include/trace.h"
17
18 namespace webrtc
19 {
20
21 namespace videocapturemodule
22 {
23
24 VideoCaptureMacQTKit::VideoCaptureMacQTKit(const int32_t id) :
25 VideoCaptureImpl(id),
26 _captureDevice(NULL),
27 _captureInfo(NULL),
28 _isCapturing(false),
29 _id(id),
30 _captureWidth(QTKIT_DEFAULT_WIDTH),
31 _captureHeight(QTKIT_DEFAULT_HEIGHT),
32 _captureFrameRate(QTKIT_DEFAULT_FRAME_RATE),
33 _frameCount(0)
34 {
35
36 memset(_currentDeviceNameUTF8, 0, MAX_NAME_LENGTH);
37 memset(_currentDeviceUniqueIdUTF8, 0, MAX_NAME_LENGTH);
38 memset(_currentDeviceProductUniqueIDUTF8, 0, MAX_NAME_LENGTH);
39 }
40
41 VideoCaptureMacQTKit::~VideoCaptureMacQTKit()
42 {
43
44 WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, _id,
45 "~VideoCaptureMacQTKit() called");
46 if(_captureDevice)
47 {
48 [_captureDevice registerOwner:nil];
49 [_captureDevice stopCapture];
50 [_captureDevice release];
51 }
52
53 if(_captureInfo)
54 {
55 [_captureInfo release];
56 }
57 }
58
59 int32_t VideoCaptureMacQTKit::Init(
60 const int32_t id, const char* iDeviceUniqueIdUTF8)
61 {
62 CriticalSectionScoped cs(&_apiCs);
63
64
65 const int32_t nameLength =
66 (int32_t) strlen((char*)iDeviceUniqueIdUTF8);
67 if(nameLength>kVideoCaptureUniqueNameLength)
68 return -1;
69
70 // Store the device name
71 _deviceUniqueId = new char[nameLength+1];
72 memcpy(_deviceUniqueId, iDeviceUniqueIdUTF8,nameLength+1);
73
74 _captureDevice = [[VideoCaptureMacQTKitObjC alloc] init];
75 if(NULL == _captureDevice)
76 {
77 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
78 "Failed to create an instance of "
79 "VideoCaptureMacQTKitObjC");
80 return -1;
81 }
82
83 [_captureDevice registerOwner:this];
84
85 if(0 == strcmp((char*)iDeviceUniqueIdUTF8, ""))
86 {
87 // the user doesn't want to set a capture device at this time
88 return 0;
89 }
90
91 _captureInfo = [[VideoCaptureMacQTKitInfoObjC alloc]init];
92 if(nil == _captureInfo)
93 {
94 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
95 "Failed to create an instance of VideoCaptureMacQTKitInfoObjC");
96 return -1;
97 }
98
99 int captureDeviceCount = [[_captureInfo getCaptureDeviceCount]intValue];
100 if(captureDeviceCount < 0)
101 {
102 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
103 "No Capture Devices Present");
104 return -1;
105 }
106
107 const int NAME_LENGTH = 1024;
108 char deviceNameUTF8[1024] = "";
109 char deviceUniqueIdUTF8[1024] = "";
110 char deviceProductUniqueIDUTF8[1024] = "";
111
112 bool captureDeviceFound = false;
113 for(int index = 0; index < captureDeviceCount; index++){
114
115 memset(deviceNameUTF8, 0, NAME_LENGTH);
116 memset(deviceUniqueIdUTF8, 0, NAME_LENGTH);
117 memset(deviceProductUniqueIDUTF8, 0, NAME_LENGTH);
118 if(-1 == [[_captureInfo getDeviceNamesFromIndex:index
119 DefaultName:deviceNameUTF8 WithLength:NAME_LENGTH
120 AndUniqueID:deviceUniqueIdUTF8 WithLength:NAME_LENGTH
121 AndProductID:deviceProductUniqueIDUTF8
122 WithLength:NAME_LENGTH]intValue])
123 {
124 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id,
125 "GetDeviceName returned -1 for index %d", index);
126 return -1;
127 }
128 if(0 == strcmp((const char*)iDeviceUniqueIdUTF8,
129 (char*)deviceUniqueIdUTF8))
130 {
131 // we have a match
132 captureDeviceFound = true;
133 break;
134 }
135 }
136
137 if(false == captureDeviceFound)
138 {
139 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, _id,
140 "Failed to find capture device unique ID %s",
141 iDeviceUniqueIdUTF8);
142 return -1;
143 }
144
145 // at this point we know that the user has passed in a valid camera. Let's
146 // set it as the current.
147 if(![_captureDevice setCaptureDeviceById:(char*)deviceUniqueIdUTF8])
148 {
149 strcpy((char*)_deviceUniqueId, (char*)deviceUniqueIdUTF8);
150 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id,
151 "Failed to set capture device %s (unique ID %s) even "
152 "though it was a valid return from "
153 "VideoCaptureMacQTKitInfo", deviceNameUTF8,
154 iDeviceUniqueIdUTF8);
155 return -1;
156 }
157
158 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, _id,
159 "successfully Init VideoCaptureMacQTKit" );
160 return 0;
161 }
162
163 int32_t VideoCaptureMacQTKit::StartCapture(
164 const VideoCaptureCapability& capability)
165 {
166
167 _captureWidth = capability.width;
168 _captureHeight = capability.height;
169 _captureFrameRate = capability.maxFPS;
170 _captureDelay = 120;
171
172 [_captureDevice setCaptureHeight:_captureHeight
173 width:_captureWidth
174 frameRate:_captureFrameRate];
175
176 [_captureDevice startCapture];
177 _isCapturing = true;
178 return 0;
179 }
180
181 int32_t VideoCaptureMacQTKit::StopCapture()
182 {
183 [_captureDevice stopCapture];
184 _isCapturing = false;
185 return 0;
186 }
187
188 bool VideoCaptureMacQTKit::CaptureStarted()
189 {
190 return _isCapturing;
191 }
192
193 int32_t VideoCaptureMacQTKit::CaptureSettings(VideoCaptureCapability& settings)
194 {
195 settings.width = _captureWidth;
196 settings.height = _captureHeight;
197 settings.maxFPS = _captureFrameRate;
198 return 0;
199 }
200
201
202 // ********** begin functions inherited from DeviceInfoImpl **********
203
204 struct VideoCaptureCapabilityMacQTKit:public VideoCaptureCapability
205 {
206 VideoCaptureCapabilityMacQTKit()
207 {
208 }
209 };
210 } // namespace videocapturemodule
211 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698