| OLD | NEW |
| (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 | |
| OLD | NEW |