1/* 2 * Copyright (c) 2013 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#if !defined(__has_feature) || !__has_feature(objc_arc) 12#error "This file requires ARC support." 13#endif 14 15#include "webrtc/modules/video_capture/ios/device_info_ios_objc.h" 16#include "webrtc/modules/video_capture/ios/rtc_video_capture_ios_objc.h" 17#include "webrtc/system_wrappers/include/ref_count.h" 18#include "webrtc/system_wrappers/include/trace.h" 19 20using namespace webrtc; 21using namespace videocapturemodule; 22 23VideoCaptureModule* VideoCaptureImpl::Create(const int32_t capture_id, 24 const char* deviceUniqueIdUTF8) { 25 return VideoCaptureIos::Create(capture_id, deviceUniqueIdUTF8); 26} 27 28VideoCaptureIos::VideoCaptureIos(const int32_t capture_id) 29 : VideoCaptureImpl(capture_id), is_capturing_(false), id_(capture_id) { 30 capability_.width = kDefaultWidth; 31 capability_.height = kDefaultHeight; 32 capability_.maxFPS = kDefaultFrameRate; 33 capture_device_ = nil; 34} 35 36VideoCaptureIos::~VideoCaptureIos() { 37 if (is_capturing_) { 38 [capture_device_ stopCapture]; 39 capture_device_ = nil; 40 } 41} 42 43VideoCaptureModule* VideoCaptureIos::Create(const int32_t capture_id, 44 const char* deviceUniqueIdUTF8) { 45 if (!deviceUniqueIdUTF8[0]) { 46 return NULL; 47 } 48 49 RefCountImpl<VideoCaptureIos>* capture_module = 50 new RefCountImpl<VideoCaptureIos>(capture_id); 51 52 const int32_t name_length = strlen(deviceUniqueIdUTF8); 53 if (name_length > kVideoCaptureUniqueNameLength) 54 return NULL; 55 56 capture_module->_deviceUniqueId = new char[name_length + 1]; 57 strncpy(capture_module->_deviceUniqueId, deviceUniqueIdUTF8, name_length + 1); 58 capture_module->_deviceUniqueId[name_length] = '\0'; 59 60 capture_module->capture_device_ = 61 [[RTCVideoCaptureIosObjC alloc] initWithOwner:capture_module 62 captureId:capture_module->id_]; 63 if (!capture_module->capture_device_) { 64 return NULL; 65 } 66 67 if (![capture_module->capture_device_ setCaptureDeviceByUniqueId:[ 68 [NSString alloc] initWithCString:deviceUniqueIdUTF8 69 encoding:NSUTF8StringEncoding]]) { 70 return NULL; 71 } 72 return capture_module; 73} 74 75int32_t VideoCaptureIos::StartCapture( 76 const VideoCaptureCapability& capability) { 77 capability_ = capability; 78 79 if (![capture_device_ startCaptureWithCapability:capability]) { 80 return -1; 81 } 82 83 is_capturing_ = true; 84 85 return 0; 86} 87 88int32_t VideoCaptureIos::StopCapture() { 89 if (![capture_device_ stopCapture]) { 90 return -1; 91 } 92 93 is_capturing_ = false; 94 return 0; 95} 96 97bool VideoCaptureIos::CaptureStarted() { return is_capturing_; } 98 99int32_t VideoCaptureIos::CaptureSettings(VideoCaptureCapability& settings) { 100 settings = capability_; 101 settings.rawType = kVideoNV12; 102 return 0; 103} 104