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

Side by Side Diff: webrtc/modules/video_capture/mac/video_capture_mac.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 /*
12 * video_capture_mac.cc
13 *
14 */
15
16 #include <QuickTime/QuickTime.h>
17
18 #include "webrtc/base/refcount.h"
19 #include "webrtc/base/scoped_ref_ptr.h"
20 #include "webrtc/modules/video_capture/device_info_impl.h"
21 #include "webrtc/modules/video_capture/video_capture_config.h"
22 #include "webrtc/modules/video_capture/video_capture_impl.h"
23 #include "webrtc/system_wrappers/include/trace.h"
24
25 // 10.4 support must be decided runtime. We will just decide which framework to
26 // use at compile time "work" classes. One for QTKit, one for QuickTime
27 #if __MAC_OS_X_VERSION_MIN_REQUIRED == __MAC_10_4 // QuickTime version
28 #include <QuickTime/video_capture_quick_time.h>
29 #include <QuickTime/video_capture_quick_time_info.h>
30 #else
31 #include "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit.h"
32 #include "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_info.h"
33 #endif
34
35 namespace webrtc
36 {
37 namespace videocapturemodule
38 {
39
40 // static
41 bool CheckOSVersion()
42 {
43 // Check OSX version
44 OSErr err = noErr;
45
46 SInt32 version;
47
48 err = Gestalt(gestaltSystemVersion, &version);
49 if (err != noErr)
50 {
51 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
52 "Could not get OS version");
53 return false;
54 }
55
56 if (version < 0x00001040) // Older version than Mac OSX 10.4
57 {
58 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
59 "OS version too old: 0x%x", version);
60 return false;
61 }
62
63 WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, 0,
64 "OS version compatible: 0x%x", version);
65
66 return true;
67 }
68
69 // static
70 bool CheckQTVersion()
71 {
72 // Check OSX version
73 OSErr err = noErr;
74
75 SInt32 version;
76
77 err = Gestalt(gestaltQuickTime, &version);
78 if (err != noErr)
79 {
80 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
81 "Could not get QuickTime version");
82 return false;
83 }
84
85 if (version < 0x07000000) // QT v. 7.x or newer (QT 5.0.2 0x05020000)
86 {
87 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
88 "QuickTime version too old: 0x%x", version);
89 return false;
90 }
91
92 WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, 0,
93 "QuickTime version compatible: 0x%x", version);
94 return true;
95 }
96
97 /**************************************************************************
98 *
99 * Create/Destroy a VideoCaptureModule
100 *
101 ***************************************************************************/
102
103 /*
104 * Returns version of the module and its components
105 *
106 * version - buffer to which the version will be written
107 * remainingBufferInBytes - remaining number of int8_t in the version
108 * buffer
109 * position - position of the next empty int8_t in the
110 * version buffer
111 */
112
113 rtc::scoped_refptr<VideoCaptureModule> VideoCaptureImpl::Create(
114 const int32_t id,
115 const char* deviceUniqueIdUTF8) {
116 if (!CheckOSVersion()) {
117 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
118 "OS version is too old. Could not create video capture "
119 "module. Returning NULL");
120 return nullptr;
121 }
122
123 #if __MAC_OS_X_VERSION_MIN_REQUIRED == __MAC_10_4 // QuickTime version
124 if (!CheckQTVersion())
125 {
126 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
127 "QuickTime version is too old. Could not create video "
128 "capture module. Returning NULL");
129 return nullptr;
130 }
131
132 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id,
133 "%s line %d. QTKit is not supported on this machine. Using "
134 "QuickTime framework to capture video",
135 __FILE__, __LINE__);
136
137 rtc::scoped_refptr<VideoCaptureMacQuickTime> newCaptureModule(
138 new rtc::RefCountedObject<VideoCaptureMacQuickTime>(id));
139
140 if (newCaptureModule->Init(id, deviceUniqueIdUTF8) != 0)
141 {
142 WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, id,
143 "could not Create for unique device %s, "
144 "newCaptureModule->Init()!=0",
145 deviceUniqueIdUTF8);
146 return nullptr;
147 }
148
149 // Successfully created VideoCaptureMacQuicktime. Return it
150 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id,
151 "Module created for unique device %s. Will use QuickTime "
152 "framework to capture",
153 deviceUniqueIdUTF8);
154 return newCaptureModule;
155
156 #else // QTKit version
157
158 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id,
159 "Using QTKit framework to capture video", id);
160
161 rtc::scoped_refptr<VideoCaptureMacQTKit> newCaptureModule(
162 new rtc::RefCountedObject<VideoCaptureMacQTKit>(id));
163
164 if(newCaptureModule->Init(id, deviceUniqueIdUTF8) != 0)
165 {
166 WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, id,
167 "could not Create for unique device %s, "
168 "newCaptureModule->Init()!=0", deviceUniqueIdUTF8);
169 return nullptr;
170 }
171
172 // Successfully created VideoCaptureMacQuicktime. Return it
173 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id,
174 "Module created for unique device %s, will use QTKit "
175 "framework",deviceUniqueIdUTF8);
176 return newCaptureModule;
177 #endif
178 }
179
180 /**************************************************************************
181 *
182 * Create/Destroy a DeviceInfo
183 *
184 ***************************************************************************/
185
186 VideoCaptureModule::DeviceInfo*
187 VideoCaptureImpl::CreateDeviceInfo(const int32_t id)
188 {
189
190
191 if (webrtc::videocapturemodule::CheckOSVersion() == false)
192 {
193 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
194 "OS version is too old. Could not create video capture "
195 "module. Returning NULL");
196 return NULL;
197 }
198
199 #if __MAC_OS_X_VERSION_MIN_REQUIRED == __MAC_10_4 // QuickTime version
200 if (webrtc::videocapturemodule::CheckQTVersion() == false)
201 {
202 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
203 "QuickTime version is too old. Could not create video "
204 "capture module. Returning NULL");
205 return NULL;
206 }
207
208 webrtc::videocapturemodule::VideoCaptureMacQuickTimeInfo* newCaptureInfoModu le =
209 new webrtc::videocapturemodule::VideoCaptureMacQuickTimeInfo(id);
210
211 if (!newCaptureInfoModule || newCaptureInfoModule->Init() != 0)
212 {
213 Destroy(newCaptureInfoModule);
214 newCaptureInfoModule = NULL;
215 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id,
216 "Failed to Init newCaptureInfoModule created with id %d "
217 "and device \"\" ", id);
218 return NULL;
219 }
220 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id,
221 "VideoCaptureModule created for id", id);
222 return newCaptureInfoModule;
223
224 #else // QTKit version
225 webrtc::videocapturemodule::VideoCaptureMacQTKitInfo* newCaptureInfoModule =
226 new webrtc::videocapturemodule::VideoCaptureMacQTKitInfo(id);
227
228 if(!newCaptureInfoModule || newCaptureInfoModule->Init() != 0)
229 {
230 //Destroy(newCaptureInfoModule);
231 delete newCaptureInfoModule;
232 newCaptureInfoModule = NULL;
233 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id,
234 "Failed to Init newCaptureInfoModule created with id %d "
235 "and device \"\" ", id);
236 return NULL;
237 }
238 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id,
239 "VideoCaptureModule created for id", id);
240 return newCaptureInfoModule;
241
242 #endif
243
244 }
245
246 /**************************************************************************
247 *
248 * End Create/Destroy VideoCaptureModule
249 *
250 ***************************************************************************/
251 } // namespace videocapturemodule
252 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_utility.h ('k') | webrtc/modules/video_capture/objc/device_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698