| Index: webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit.mm
|
| diff --git a/webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit.mm b/webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ad057b49dbf2efa1d1c4195019900e6d77b82db2
|
| --- /dev/null
|
| +++ b/webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit.mm
|
| @@ -0,0 +1,211 @@
|
| +/*
|
| + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license
|
| + * that can be found in the LICENSE file in the root of the source
|
| + * tree. An additional intellectual property rights grant can be found
|
| + * in the file PATENTS. All contributing project authors may
|
| + * be found in the AUTHORS file in the root of the source tree.
|
| + */
|
| +
|
| +#include "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit.h"
|
| +#import "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_info_objc.h"
|
| +#import "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_objc.h"
|
| +#include "webrtc/modules/video_capture/video_capture_config.h"
|
| +#include "webrtc/system_wrappers/include/critical_section_wrapper.h"
|
| +#include "webrtc/system_wrappers/include/trace.h"
|
| +
|
| +namespace webrtc
|
| +{
|
| +
|
| +namespace videocapturemodule
|
| +{
|
| +
|
| +VideoCaptureMacQTKit::VideoCaptureMacQTKit(const int32_t id) :
|
| + VideoCaptureImpl(id),
|
| + _captureDevice(NULL),
|
| + _captureInfo(NULL),
|
| + _isCapturing(false),
|
| + _id(id),
|
| + _captureWidth(QTKIT_DEFAULT_WIDTH),
|
| + _captureHeight(QTKIT_DEFAULT_HEIGHT),
|
| + _captureFrameRate(QTKIT_DEFAULT_FRAME_RATE),
|
| + _frameCount(0)
|
| +{
|
| +
|
| + memset(_currentDeviceNameUTF8, 0, MAX_NAME_LENGTH);
|
| + memset(_currentDeviceUniqueIdUTF8, 0, MAX_NAME_LENGTH);
|
| + memset(_currentDeviceProductUniqueIDUTF8, 0, MAX_NAME_LENGTH);
|
| +}
|
| +
|
| +VideoCaptureMacQTKit::~VideoCaptureMacQTKit()
|
| +{
|
| +
|
| + WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, _id,
|
| + "~VideoCaptureMacQTKit() called");
|
| + if(_captureDevice)
|
| + {
|
| + [_captureDevice registerOwner:nil];
|
| + [_captureDevice stopCapture];
|
| + [_captureDevice release];
|
| + }
|
| +
|
| + if(_captureInfo)
|
| + {
|
| + [_captureInfo release];
|
| + }
|
| +}
|
| +
|
| +int32_t VideoCaptureMacQTKit::Init(
|
| + const int32_t id, const char* iDeviceUniqueIdUTF8)
|
| +{
|
| + CriticalSectionScoped cs(&_apiCs);
|
| +
|
| +
|
| + const int32_t nameLength =
|
| + (int32_t) strlen((char*)iDeviceUniqueIdUTF8);
|
| + if(nameLength>kVideoCaptureUniqueNameLength)
|
| + return -1;
|
| +
|
| + // Store the device name
|
| + _deviceUniqueId = new char[nameLength+1];
|
| + memcpy(_deviceUniqueId, iDeviceUniqueIdUTF8,nameLength+1);
|
| +
|
| + _captureDevice = [[VideoCaptureMacQTKitObjC alloc] init];
|
| + if(NULL == _captureDevice)
|
| + {
|
| + WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
|
| + "Failed to create an instance of "
|
| + "VideoCaptureMacQTKitObjC");
|
| + return -1;
|
| + }
|
| +
|
| + [_captureDevice registerOwner:this];
|
| +
|
| + if(0 == strcmp((char*)iDeviceUniqueIdUTF8, ""))
|
| + {
|
| + // the user doesn't want to set a capture device at this time
|
| + return 0;
|
| + }
|
| +
|
| + _captureInfo = [[VideoCaptureMacQTKitInfoObjC alloc]init];
|
| + if(nil == _captureInfo)
|
| + {
|
| + WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
|
| + "Failed to create an instance of VideoCaptureMacQTKitInfoObjC");
|
| + return -1;
|
| + }
|
| +
|
| + int captureDeviceCount = [[_captureInfo getCaptureDeviceCount]intValue];
|
| + if(captureDeviceCount < 0)
|
| + {
|
| + WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, id,
|
| + "No Capture Devices Present");
|
| + return -1;
|
| + }
|
| +
|
| + const int NAME_LENGTH = 1024;
|
| + char deviceNameUTF8[1024] = "";
|
| + char deviceUniqueIdUTF8[1024] = "";
|
| + char deviceProductUniqueIDUTF8[1024] = "";
|
| +
|
| + bool captureDeviceFound = false;
|
| + for(int index = 0; index < captureDeviceCount; index++){
|
| +
|
| + memset(deviceNameUTF8, 0, NAME_LENGTH);
|
| + memset(deviceUniqueIdUTF8, 0, NAME_LENGTH);
|
| + memset(deviceProductUniqueIDUTF8, 0, NAME_LENGTH);
|
| + if(-1 == [[_captureInfo getDeviceNamesFromIndex:index
|
| + DefaultName:deviceNameUTF8 WithLength:NAME_LENGTH
|
| + AndUniqueID:deviceUniqueIdUTF8 WithLength:NAME_LENGTH
|
| + AndProductID:deviceProductUniqueIDUTF8
|
| + WithLength:NAME_LENGTH]intValue])
|
| + {
|
| + WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id,
|
| + "GetDeviceName returned -1 for index %d", index);
|
| + return -1;
|
| + }
|
| + if(0 == strcmp((const char*)iDeviceUniqueIdUTF8,
|
| + (char*)deviceUniqueIdUTF8))
|
| + {
|
| + // we have a match
|
| + captureDeviceFound = true;
|
| + break;
|
| + }
|
| + }
|
| +
|
| + if(false == captureDeviceFound)
|
| + {
|
| + WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, _id,
|
| + "Failed to find capture device unique ID %s",
|
| + iDeviceUniqueIdUTF8);
|
| + return -1;
|
| + }
|
| +
|
| + // at this point we know that the user has passed in a valid camera. Let's
|
| + // set it as the current.
|
| + if(![_captureDevice setCaptureDeviceById:(char*)deviceUniqueIdUTF8])
|
| + {
|
| + strcpy((char*)_deviceUniqueId, (char*)deviceUniqueIdUTF8);
|
| + WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id,
|
| + "Failed to set capture device %s (unique ID %s) even "
|
| + "though it was a valid return from "
|
| + "VideoCaptureMacQTKitInfo", deviceNameUTF8,
|
| + iDeviceUniqueIdUTF8);
|
| + return -1;
|
| + }
|
| +
|
| + WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, _id,
|
| + "successfully Init VideoCaptureMacQTKit" );
|
| + return 0;
|
| +}
|
| +
|
| +int32_t VideoCaptureMacQTKit::StartCapture(
|
| + const VideoCaptureCapability& capability)
|
| +{
|
| +
|
| + _captureWidth = capability.width;
|
| + _captureHeight = capability.height;
|
| + _captureFrameRate = capability.maxFPS;
|
| + _captureDelay = 120;
|
| +
|
| + [_captureDevice setCaptureHeight:_captureHeight
|
| + width:_captureWidth
|
| + frameRate:_captureFrameRate];
|
| +
|
| + [_captureDevice startCapture];
|
| + _isCapturing = true;
|
| + return 0;
|
| +}
|
| +
|
| +int32_t VideoCaptureMacQTKit::StopCapture()
|
| +{
|
| + [_captureDevice stopCapture];
|
| + _isCapturing = false;
|
| + return 0;
|
| +}
|
| +
|
| +bool VideoCaptureMacQTKit::CaptureStarted()
|
| +{
|
| + return _isCapturing;
|
| +}
|
| +
|
| +int32_t VideoCaptureMacQTKit::CaptureSettings(VideoCaptureCapability& settings)
|
| +{
|
| + settings.width = _captureWidth;
|
| + settings.height = _captureHeight;
|
| + settings.maxFPS = _captureFrameRate;
|
| + return 0;
|
| +}
|
| +
|
| +
|
| +// ********** begin functions inherited from DeviceInfoImpl **********
|
| +
|
| +struct VideoCaptureCapabilityMacQTKit:public VideoCaptureCapability
|
| +{
|
| + VideoCaptureCapabilityMacQTKit()
|
| + {
|
| + }
|
| +};
|
| +} // namespace videocapturemodule
|
| +} // namespace webrtc
|
|
|