1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * video_capture_mac.cc 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <QuickTime/QuickTime.h> 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1887c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/modules/video_capture/device_info_impl.h" 1987c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/modules/video_capture/video_capture_config.h" 2087c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/modules/video_capture/video_capture_impl.h" 2187c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/system_wrappers/interface/ref_count.h" 2287c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 2387c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 10.4 support must be decided runtime. We will just decide which framework to 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// use at compile time "work" classes. One for QTKit, one for QuickTime 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if __MAC_OS_X_VERSION_MIN_REQUIRED == __MAC_10_4 // QuickTime version 2787c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include <QuickTime/video_capture_quick_time.h> 2887c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include <QuickTime/video_capture_quick_time_info.h> 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 3076a6ffb351ba59a3771ede00c94bc235e42bb3fapbos@webrtc.org#include "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit.h" 3176a6ffb351ba59a3771ede00c94bc235e42bb3fapbos@webrtc.org#include "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_info.h" 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace videocapturemodule 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// static 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool CheckOSVersion() 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Check OSX version 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OSErr err = noErr; 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SInt32 version; 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = Gestalt(gestaltSystemVersion, &version); 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err != noErr) 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0, 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Could not get OS version"); 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (version < 0x00001040) // Older version than Mac OSX 10.4 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0, 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "OS version too old: 0x%x", version); 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, 0, 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "OS version compatible: 0x%x", version); 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// static 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool CheckQTVersion() 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Check OSX version 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OSErr err = noErr; 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SInt32 version; 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org err = Gestalt(gestaltQuickTime, &version); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (err != noErr) 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0, 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Could not get QuickTime version"); 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (version < 0x07000000) // QT v. 7.x or newer (QT 5.0.2 0x05020000) 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0, 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "QuickTime version too old: 0x%x", version); 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, 0, 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "QuickTime version compatible: 0x%x", version); 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/************************************************************************** 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Create/Destroy a VideoCaptureModule 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ***************************************************************************/ 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Returns version of the module and its components 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * version - buffer to which the version will be written 106f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org * remainingBufferInBytes - remaining number of int8_t in the version 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * buffer 108f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org * position - position of the next empty int8_t in the 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * version buffer 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVideoCaptureModule* VideoCaptureImpl::Create( 113f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org const int32_t id, const char* deviceUniqueIdUTF8) 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (webrtc::videocapturemodule::CheckOSVersion() == false) 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id, 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "OS version is too old. Could not create video capture " 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "module. Returning NULL"); 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if __MAC_OS_X_VERSION_MIN_REQUIRED == __MAC_10_4 // QuickTime version 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (webrtc::videocapturemodule::CheckQTVersion() == false) 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id, 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "QuickTime version is too old. Could not create video " 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "capture module. Returning NULL"); 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id, 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "%s line %d. QTKit is not supported on this machine. Using " 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "QuickTime framework to capture video", 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __FILE__, __LINE__); 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RefCountImpl<videocapturemodule::VideoCaptureMacQuickTime>* 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org newCaptureModule = 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org new RefCountImpl<videocapturemodule::VideoCaptureMacQuickTime>(id); 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!newCaptureModule) 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, id, 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "could not Create for unique device %s, !newCaptureModule", 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org deviceUniqueIdUTF8); 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (newCaptureModule->Init(id, deviceUniqueIdUTF8) != 0) 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, id, 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "could not Create for unique device %s, " 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "newCaptureModule->Init()!=0", 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org deviceUniqueIdUTF8); 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete newCaptureModule; 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Successfully created VideoCaptureMacQuicktime. Return it 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id, 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Module created for unique device %s. Will use QuickTime " 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "framework to capture", 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org deviceUniqueIdUTF8); 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return newCaptureModule; 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else // QTKit version 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id, 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Using QTKit framework to capture video", id); 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RefCountImpl<videocapturemodule::VideoCaptureMacQTKit>* newCaptureModule = 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org new RefCountImpl<videocapturemodule::VideoCaptureMacQTKit>(id); 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(!newCaptureModule) 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, id, 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "could not Create for unique device %s, !newCaptureModule", 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org deviceUniqueIdUTF8); 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(newCaptureModule->Init(id, deviceUniqueIdUTF8) != 0) 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, id, 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "could not Create for unique device %s, " 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "newCaptureModule->Init()!=0", deviceUniqueIdUTF8); 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete newCaptureModule; 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Successfully created VideoCaptureMacQuicktime. Return it 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id, 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Module created for unique device %s, will use QTKit " 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "framework",deviceUniqueIdUTF8); 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return newCaptureModule; 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/************************************************************************** 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Create/Destroy a DeviceInfo 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ***************************************************************************/ 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVideoCaptureModule::DeviceInfo* 206f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.orgVideoCaptureImpl::CreateDeviceInfo(const int32_t id) 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (webrtc::videocapturemodule::CheckOSVersion() == false) 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id, 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "OS version is too old. Could not create video capture " 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "module. Returning NULL"); 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if __MAC_OS_X_VERSION_MIN_REQUIRED == __MAC_10_4 // QuickTime version 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (webrtc::videocapturemodule::CheckQTVersion() == false) 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id, 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "QuickTime version is too old. Could not create video " 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "capture module. Returning NULL"); 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::videocapturemodule::VideoCaptureMacQuickTimeInfo* newCaptureInfoModule = 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org new webrtc::videocapturemodule::VideoCaptureMacQuickTimeInfo(id); 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!newCaptureInfoModule || newCaptureInfoModule->Init() != 0) 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Destroy(newCaptureInfoModule); 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org newCaptureInfoModule = NULL; 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id, 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Failed to Init newCaptureInfoModule created with id %d " 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "and device \"\" ", id); 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id, 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VideoCaptureModule created for id", id); 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return newCaptureInfoModule; 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else // QTKit version 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::videocapturemodule::VideoCaptureMacQTKitInfo* newCaptureInfoModule = 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org new webrtc::videocapturemodule::VideoCaptureMacQTKitInfo(id); 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(!newCaptureInfoModule || newCaptureInfoModule->Init() != 0) 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //Destroy(newCaptureInfoModule); 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete newCaptureInfoModule; 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org newCaptureInfoModule = NULL; 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id, 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Failed to Init newCaptureInfoModule created with id %d " 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "and device \"\" ", id); 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, id, 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VideoCaptureModule created for id", id); 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return newCaptureInfoModule; 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/************************************************************************** 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * End Create/Destroy VideoCaptureModule 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ***************************************************************************/ 270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace videocapturemodule 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 272