| Index: webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_objc.mm
|
| diff --git a/webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_objc.mm b/webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_objc.mm
|
| deleted file mode 100644
|
| index 53e9db7770b0fd96aac6682af96e892de45285e6..0000000000000000000000000000000000000000
|
| --- a/webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_objc.mm
|
| +++ /dev/null
|
| @@ -1,259 +0,0 @@
|
| -/*
|
| - * 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.
|
| - */
|
| -
|
| -#define DEFAULT_CAPTURE_DEVICE_INDEX 1
|
| -#define DEFAULT_FRAME_RATE 30
|
| -#define DEFAULT_FRAME_WIDTH 352
|
| -#define DEFAULT_FRAME_HEIGHT 288
|
| -#define ROTATE_CAPTURED_FRAME 1
|
| -#define LOW_QUALITY 1
|
| -
|
| -#import "webrtc/modules/video_capture/mac/qtkit/video_capture_qtkit_objc.h"
|
| -
|
| -#include "webrtc/system_wrappers/include/trace.h"
|
| -
|
| -using namespace webrtc;
|
| -using namespace videocapturemodule;
|
| -
|
| -@implementation VideoCaptureMacQTKitObjC
|
| -
|
| --(id)init {
|
| - self = [super init];
|
| - if (self) {
|
| - [self initializeVariables];
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)dealloc {
|
| - if (_captureSession)
|
| - [_captureSession stopRunning];
|
| -
|
| - if (_captureVideoDeviceInput) {
|
| - if ([[_captureVideoDeviceInput device] isOpen])
|
| - [[_captureVideoDeviceInput device] close];
|
| -
|
| - [_captureVideoDeviceInput release];
|
| - }
|
| -
|
| - [_captureDecompressedVideoOutput release];
|
| - [_captureSession release];
|
| - [_captureDevices release];
|
| - [_lock release];
|
| -
|
| - [super dealloc];
|
| -}
|
| -
|
| -#pragma mark Public methods
|
| -
|
| -- (void)registerOwner:(VideoCaptureMacQTKit*)owner {
|
| - [_lock lock];
|
| - _owner = owner;
|
| - [_lock unlock];
|
| -}
|
| -
|
| -- (BOOL)setCaptureDeviceById:(char*)uniqueId {
|
| - if (uniqueId == nil || !strcmp("", uniqueId)) {
|
| - WEBRTC_TRACE(kTraceInfo, kTraceVideoCapture, 0,
|
| - "Incorrect capture id argument");
|
| - return NO;
|
| - }
|
| -
|
| - if (!strcmp(uniqueId, _captureDeviceNameUniqueID))
|
| - return YES;
|
| -
|
| - QTCaptureDevice* captureDevice;
|
| - for(int index = 0; index < _captureDeviceCount; index++) {
|
| - captureDevice = (QTCaptureDevice*)[_captureDevices objectAtIndex:index];
|
| - char captureDeviceId[1024] = "";
|
| - [[captureDevice uniqueID] getCString:captureDeviceId
|
| - maxLength:1024
|
| - encoding:NSUTF8StringEncoding];
|
| - if (strcmp(uniqueId, captureDeviceId) == 0) {
|
| - WEBRTC_TRACE(kTraceInfo, kTraceVideoCapture, 0,
|
| - "%s:%d Found capture device id %s as index %d",
|
| - __FUNCTION__, __LINE__, captureDeviceId, index);
|
| - [[captureDevice localizedDisplayName] getCString:_captureDeviceNameUTF8
|
| - maxLength:1024
|
| - encoding:NSUTF8StringEncoding];
|
| - [[captureDevice uniqueID] getCString:_captureDeviceNameUniqueID
|
| - maxLength:1024
|
| - encoding:NSUTF8StringEncoding];
|
| - break;
|
| - }
|
| - captureDevice = nil;
|
| - }
|
| -
|
| - if (!captureDevice)
|
| - return NO;
|
| -
|
| - NSError* error;
|
| - if (![captureDevice open:&error]) {
|
| - WEBRTC_TRACE(kTraceError, kTraceVideoCapture, 0,
|
| - "Failed to open capture device: %s", _captureDeviceNameUTF8);
|
| - return NO;
|
| - }
|
| -
|
| - if (_captureVideoDeviceInput) {
|
| - [_captureVideoDeviceInput release];
|
| - }
|
| - _captureVideoDeviceInput =
|
| - [[QTCaptureDeviceInput alloc] initWithDevice:captureDevice];
|
| -
|
| - if (![_captureSession addInput:_captureVideoDeviceInput error:&error]) {
|
| - WEBRTC_TRACE(kTraceError, kTraceVideoCapture, 0,
|
| - "Failed to add input from %s to the capture session",
|
| - _captureDeviceNameUTF8);
|
| - return NO;
|
| - }
|
| -
|
| - WEBRTC_TRACE(kTraceInfo, kTraceVideoCapture, 0,
|
| - "%s:%d successfully added capture device: %s", __FUNCTION__,
|
| - __LINE__, _captureDeviceNameUTF8);
|
| - return YES;
|
| -}
|
| -
|
| -- (void)setCaptureHeight:(int)height width:(int)width frameRate:(int)frameRate {
|
| - _frameWidth = width;
|
| - _frameHeight = height;
|
| - _frameRate = frameRate;
|
| -
|
| - NSDictionary* captureDictionary =
|
| - [NSDictionary dictionaryWithObjectsAndKeys:
|
| - [NSNumber numberWithDouble:_frameWidth],
|
| - (id)kCVPixelBufferWidthKey,
|
| - [NSNumber numberWithDouble:_frameHeight],
|
| - (id)kCVPixelBufferHeightKey,
|
| - [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32ARGB],
|
| - (id)kCVPixelBufferPixelFormatTypeKey,
|
| - nil];
|
| - [_captureDecompressedVideoOutput
|
| - performSelectorOnMainThread:@selector(setPixelBufferAttributes:)
|
| - withObject:captureDictionary
|
| - waitUntilDone:YES];
|
| -}
|
| -
|
| -- (void)startCapture {
|
| - if (_capturing)
|
| - return;
|
| -
|
| - [_captureSession startRunning];
|
| - _capturing = YES;
|
| -}
|
| -
|
| -- (void)stopCapture {
|
| - if (!_capturing)
|
| - return;
|
| -
|
| - [_captureSession stopRunning];
|
| - _capturing = NO;
|
| -}
|
| -
|
| -#pragma mark Private methods
|
| -
|
| -- (BOOL)initializeVariables {
|
| - if (NSClassFromString(@"QTCaptureSession") == nil)
|
| - return NO;
|
| -
|
| - memset(_captureDeviceNameUTF8, 0, 1024);
|
| - _framesDelivered = 0;
|
| - _framesRendered = 0;
|
| - _captureDeviceCount = 0;
|
| - _capturing = NO;
|
| - _captureInitialized = NO;
|
| - _frameRate = DEFAULT_FRAME_RATE;
|
| - _frameWidth = DEFAULT_FRAME_WIDTH;
|
| - _frameHeight = DEFAULT_FRAME_HEIGHT;
|
| - _lock = [[NSLock alloc] init];
|
| - _captureSession = [[QTCaptureSession alloc] init];
|
| - _captureDecompressedVideoOutput =
|
| - [[QTCaptureDecompressedVideoOutput alloc] init];
|
| - [_captureDecompressedVideoOutput setDelegate:self];
|
| -
|
| - [self getCaptureDevices];
|
| - if (![self initializeVideoCapture])
|
| - return NO;
|
| -
|
| - return NO;
|
| -}
|
| -
|
| -- (void)getCaptureDevices {
|
| - if (_captureDevices)
|
| - [_captureDevices release];
|
| -
|
| - _captureDevices = [[NSArray alloc] initWithArray:
|
| - [QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeVideo]];
|
| -
|
| - _captureDeviceCount = _captureDevices.count;
|
| -}
|
| -
|
| -- (BOOL)initializeVideoCapture{
|
| - NSDictionary *captureDictionary =
|
| - [NSDictionary dictionaryWithObjectsAndKeys:
|
| - [NSNumber numberWithDouble:_frameWidth],
|
| - (id)kCVPixelBufferWidthKey,
|
| - [NSNumber numberWithDouble:_frameHeight],
|
| - (id)kCVPixelBufferHeightKey,
|
| - [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32ARGB],
|
| - (id)kCVPixelBufferPixelFormatTypeKey,
|
| - nil];
|
| -
|
| - [_captureDecompressedVideoOutput setPixelBufferAttributes:captureDictionary];
|
| - [_captureDecompressedVideoOutput setAutomaticallyDropsLateVideoFrames:YES];
|
| - [_captureDecompressedVideoOutput
|
| - setMinimumVideoFrameInterval:(NSTimeInterval)1/(float)_frameRate];
|
| -
|
| - NSError *error;
|
| - if (![_captureSession addOutput:_captureDecompressedVideoOutput error:&error])
|
| - return NO;
|
| -
|
| - return YES;
|
| -}
|
| -
|
| -- (void)captureOutput:(QTCaptureOutput *)captureOutput
|
| - didDropVideoFrameWithSampleBuffer:(QTSampleBuffer *)sampleBuffer
|
| - fromConnection:(QTCaptureConnection *)connection {
|
| -}
|
| -
|
| -- (void)captureOutput:(QTCaptureOutput *)captureOutput
|
| - didOutputVideoFrame:(CVImageBufferRef)videoFrame
|
| - withSampleBuffer:(QTSampleBuffer *)sampleBuffer
|
| - fromConnection:(QTCaptureConnection *)connection {
|
| -
|
| - [_lock lock];
|
| - if (!_owner) {
|
| - [_lock unlock];
|
| - return;
|
| - }
|
| -
|
| - const int kFlags = 0;
|
| - if (CVPixelBufferLockBaseAddress(videoFrame, kFlags) == kCVReturnSuccess) {
|
| - void *baseAddress = CVPixelBufferGetBaseAddress(videoFrame);
|
| - size_t bytesPerRow = CVPixelBufferGetBytesPerRow(videoFrame);
|
| - size_t frameHeight = CVPixelBufferGetHeight(videoFrame);
|
| - size_t frameSize = bytesPerRow * frameHeight;
|
| -
|
| - VideoCaptureCapability tempCaptureCapability;
|
| - tempCaptureCapability.width = _frameWidth;
|
| - tempCaptureCapability.height = _frameHeight;
|
| - tempCaptureCapability.maxFPS = _frameRate;
|
| - // TODO(wu) : Update actual type and not hard-coded value.
|
| - tempCaptureCapability.rawType = kVideoBGRA;
|
| -
|
| - _owner->IncomingFrame((unsigned char*)baseAddress, frameSize,
|
| - tempCaptureCapability, 0);
|
| - CVPixelBufferUnlockBaseAddress(videoFrame, kFlags);
|
| - }
|
| - [_lock unlock];
|
| - _framesDelivered++;
|
| - _framesRendered++;
|
| -}
|
| -
|
| -@end
|
|
|