Finally delete deprecated mac capturer.
Landing this CL will break video_loopback but cl 124827 fixes that.
Bug: webrtc:6898, webrtc:6333, webrtc:7861
Change-Id: Iecbbf75fab08570cc537784f7bbd11a841a2e5a6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/124828
Commit-Queue: Kári Helgason <kthelgason@webrtc.org>
Reviewed-by: Anders Carlsson <andersc@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27012}
diff --git a/examples/BUILD.gn b/examples/BUILD.gn
index 3fd5de9..e3c0845 100644
--- a/examples/BUILD.gn
+++ b/examples/BUILD.gn
@@ -306,6 +306,7 @@
":apprtc_common",
":socketrocket",
]
+
if (is_ios) {
# iOS must use WebRTC.framework which is dynamically linked.
deps += [
@@ -315,7 +316,10 @@
} else {
deps += [ "../sdk:mac_framework_objc+link" ]
}
- libs = [ "QuartzCore.framework" ]
+ libs = [
+ "CoreMedia.framework",
+ "QuartzCore.framework",
+ ]
}
if (is_ios) {
@@ -353,6 +357,8 @@
"../sdk:framework_objc+link",
"../sdk:ios_framework_bundle",
]
+
+ libs = [ "AVFoundation.framework" ]
}
ios_app_bundle("AppRTCMobile") {
diff --git a/modules/video_capture/BUILD.gn b/modules/video_capture/BUILD.gn
index bddba89..7554d56 100644
--- a/modules/video_capture/BUILD.gn
+++ b/modules/video_capture/BUILD.gn
@@ -60,42 +60,6 @@
}
if (!build_with_chromium) {
- config("video_capture_internal_impl_config") {
- if (is_ios || is_mac) {
- libs = [
- "AVFoundation.framework",
- "CoreMedia.framework",
- "CoreVideo.framework",
- ]
- }
- }
-
- if (is_ios || is_mac) {
- rtc_source_set("video_capture_internal_impl_objc") {
- visibility = [ ":video_capture_internal_impl" ]
-
- deps = [
- ":video_capture_module",
- "../../api:scoped_refptr",
- "../../rtc_base:rtc_base_approved",
- "../../system_wrappers",
- ]
-
- sources = [
- "objc/device_info.h",
- "objc/device_info.mm",
- "objc/device_info_objc.h",
- "objc/device_info_objc.mm",
- "objc/rtc_video_capture_objc.h",
- "objc/rtc_video_capture_objc.mm",
- "objc/video_capture.h",
- "objc/video_capture.mm",
- ]
-
- all_dependent_configs = [ ":video_capture_internal_impl_config" ]
- }
- }
-
rtc_source_set("video_capture_internal_impl") {
deps = [
":video_capture_module",
@@ -147,11 +111,6 @@
deps += [ "//third_party/winsdk_samples" ]
}
}
- if (is_ios || is_mac) {
- deps += [ ":video_capture_internal_impl_objc" ]
- }
-
- all_dependent_configs = [ ":video_capture_internal_impl_config" ]
if (build_with_mozilla && is_android) {
include_dirs = [
diff --git a/modules/video_capture/objc/device_info.h b/modules/video_capture/objc/device_info.h
deleted file mode 100644
index 479749a..0000000
--- a/modules/video_capture/objc/device_info.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2013 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.
- */
-
-#ifndef MODULES_VIDEO_CAPTURE_OBJC_DEVICE_INFO_H_
-#define MODULES_VIDEO_CAPTURE_OBJC_DEVICE_INFO_H_
-
-#include "modules/video_capture/device_info_impl.h"
-
-#include <map>
-#include <string>
-
-namespace webrtc {
-namespace videocapturemodule {
-class DeviceInfoIos : public DeviceInfoImpl {
- public:
- DeviceInfoIos();
- ~DeviceInfoIos() override;
-
- // Implementation of DeviceInfoImpl.
- int32_t Init() override;
- uint32_t NumberOfDevices() override;
- int32_t GetDeviceName(uint32_t deviceNumber,
- char* deviceNameUTF8,
- uint32_t deviceNameLength,
- char* deviceUniqueIdUTF8,
- uint32_t deviceUniqueIdUTF8Length,
- char* productUniqueIdUTF8 = 0,
- uint32_t productUniqueIdUTF8Length = 0) override;
-
- int32_t NumberOfCapabilities(const char* deviceUniqueIdUTF8) override;
-
- int32_t GetCapability(const char* deviceUniqueIdUTF8,
- const uint32_t deviceCapabilityNumber,
- VideoCaptureCapability& capability) override;
-
- int32_t DisplayCaptureSettingsDialogBox(const char* deviceUniqueIdUTF8,
- const char* dialogTitleUTF8,
- void* parentWindow,
- uint32_t positionX,
- uint32_t positionY) override;
-
- int32_t GetOrientation(const char* deviceUniqueIdUTF8,
- VideoRotation& orientation) override;
-
- int32_t CreateCapabilityMap(const char* device_unique_id_utf8) override;
-
- private:
- std::map<std::string, VideoCaptureCapabilities> _capabilitiesMap;
-};
-
-} // namespace videocapturemodule
-} // namespace webrtc
-
-#endif // MODULES_VIDEO_CAPTURE_OBJC_DEVICE_INFO_H_
diff --git a/modules/video_capture/objc/device_info.mm b/modules/video_capture/objc/device_info.mm
deleted file mode 100644
index 0af15e2..0000000
--- a/modules/video_capture/objc/device_info.mm
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2013 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.
- */
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-#include <AVFoundation/AVFoundation.h>
-
-#include <string>
-
-#include "modules/video_capture/objc/device_info.h"
-#include "modules/video_capture/objc/device_info_objc.h"
-#include "modules/video_capture/video_capture_impl.h"
-#include "rtc_base/logging.h"
-
-using namespace webrtc;
-using namespace videocapturemodule;
-
-#define IOS_UNSUPPORTED() \
- RTC_LOG(LS_ERROR) << __FUNCTION__ << " is not supported on the iOS platform."; \
- return -1;
-
-VideoCaptureModule::DeviceInfo* VideoCaptureImpl::CreateDeviceInfo() {
- return new DeviceInfoIos();
-}
-
-DeviceInfoIos::DeviceInfoIos() {
- this->Init();
-}
-
-DeviceInfoIos::~DeviceInfoIos() {}
-
-int32_t DeviceInfoIos::Init() {
- // Fill in all device capabilities.
-
- const NSArray* camera_presets = @[
- AVCaptureSessionPreset352x288,
- AVCaptureSessionPreset640x480,
- AVCaptureSessionPreset1280x720
- ];
- int deviceCount = [DeviceInfoIosObjC captureDeviceCount];
-
- for (int i = 0; i < deviceCount; i++) {
- AVCaptureDevice* avDevice = [DeviceInfoIosObjC captureDeviceForIndex:i];
- VideoCaptureCapabilities capabilityVector;
-
- for (NSString* preset in camera_presets) {
- BOOL support = [avDevice supportsAVCaptureSessionPreset:preset];
- if (support) {
- VideoCaptureCapability capability = [DeviceInfoIosObjC capabilityForPreset:preset];
- capabilityVector.push_back(capability);
- }
- }
-
- char deviceNameUTF8[256];
- char deviceId[256];
- this->GetDeviceName(i, deviceNameUTF8, 256, deviceId, 256);
- std::string deviceIdCopy(deviceId);
- std::pair<std::string, VideoCaptureCapabilities> mapPair =
- std::pair<std::string, VideoCaptureCapabilities>(deviceIdCopy, capabilityVector);
- _capabilitiesMap.insert(mapPair);
- }
-
- return 0;
-}
-
-uint32_t DeviceInfoIos::NumberOfDevices() {
- return [DeviceInfoIosObjC captureDeviceCount];
-}
-
-int32_t DeviceInfoIos::GetDeviceName(uint32_t deviceNumber,
- char* deviceNameUTF8,
- uint32_t deviceNameUTF8Length,
- char* deviceUniqueIdUTF8,
- uint32_t deviceUniqueIdUTF8Length,
- char* productUniqueIdUTF8,
- uint32_t productUniqueIdUTF8Length) {
- NSString* deviceName = [DeviceInfoIosObjC deviceNameForIndex:deviceNumber];
-
- NSString* deviceUniqueId = [DeviceInfoIosObjC deviceUniqueIdForIndex:deviceNumber];
-
- strncpy(deviceNameUTF8, [deviceName UTF8String], deviceNameUTF8Length);
- deviceNameUTF8[deviceNameUTF8Length - 1] = '\0';
-
- strncpy(deviceUniqueIdUTF8, deviceUniqueId.UTF8String, deviceUniqueIdUTF8Length);
- deviceUniqueIdUTF8[deviceUniqueIdUTF8Length - 1] = '\0';
-
- if (productUniqueIdUTF8) {
- productUniqueIdUTF8[0] = '\0';
- }
-
- return 0;
-}
-
-int32_t DeviceInfoIos::NumberOfCapabilities(const char* deviceUniqueIdUTF8) {
- int32_t numberOfCapabilities = 0;
- std::string deviceUniqueId(deviceUniqueIdUTF8);
- std::map<std::string, VideoCaptureCapabilities>::iterator it =
- _capabilitiesMap.find(deviceUniqueId);
-
- if (it != _capabilitiesMap.end()) {
- numberOfCapabilities = it->second.size();
- }
- return numberOfCapabilities;
-}
-
-int32_t DeviceInfoIos::GetCapability(const char* deviceUniqueIdUTF8,
- const uint32_t deviceCapabilityNumber,
- VideoCaptureCapability& capability) {
- std::string deviceUniqueId(deviceUniqueIdUTF8);
- std::map<std::string, VideoCaptureCapabilities>::iterator it =
- _capabilitiesMap.find(deviceUniqueId);
-
- if (it != _capabilitiesMap.end()) {
- VideoCaptureCapabilities deviceCapabilities = it->second;
-
- if (deviceCapabilityNumber < deviceCapabilities.size()) {
- VideoCaptureCapability cap;
- cap = deviceCapabilities[deviceCapabilityNumber];
- capability = cap;
- return 0;
- }
- }
-
- return -1;
-}
-
-int32_t DeviceInfoIos::DisplayCaptureSettingsDialogBox(const char* deviceUniqueIdUTF8,
- const char* dialogTitleUTF8,
- void* parentWindow,
- uint32_t positionX,
- uint32_t positionY) {
- IOS_UNSUPPORTED();
-}
-
-int32_t DeviceInfoIos::GetOrientation(const char* deviceUniqueIdUTF8, VideoRotation& orientation) {
- if (strcmp(deviceUniqueIdUTF8, "Front Camera") == 0) {
- orientation = kVideoRotation_0;
- } else {
- orientation = kVideoRotation_90;
- }
- return orientation;
-}
-
-int32_t DeviceInfoIos::CreateCapabilityMap(const char* deviceUniqueIdUTF8) {
- std::string deviceName(deviceUniqueIdUTF8);
- std::map<std::string, std::vector<VideoCaptureCapability>>::iterator it =
- _capabilitiesMap.find(deviceName);
- VideoCaptureCapabilities deviceCapabilities;
- if (it != _capabilitiesMap.end()) {
- _captureCapabilities = it->second;
- return 0;
- }
-
- return -1;
-}
diff --git a/modules/video_capture/objc/device_info_objc.h b/modules/video_capture/objc/device_info_objc.h
deleted file mode 100644
index 670c3a1..0000000
--- a/modules/video_capture/objc/device_info_objc.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2013 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.
- */
-
-#ifndef MODULES_VIDEO_CAPTURE_OBJC_DEVICE_INFO_OBJC_H_
-#define MODULES_VIDEO_CAPTURE_OBJC_DEVICE_INFO_OBJC_H_
-
-#import <AVFoundation/AVFoundation.h>
-
-#include "modules/video_capture/video_capture_defines.h"
-
-@interface DeviceInfoIosObjC : NSObject
-+ (int)captureDeviceCount;
-+ (AVCaptureDevice*)captureDeviceForIndex:(int)index;
-+ (AVCaptureDevice*)captureDeviceForUniqueId:(NSString*)uniqueId;
-+ (NSString*)deviceNameForIndex:(int)index;
-+ (NSString*)deviceUniqueIdForIndex:(int)index;
-+ (NSString*)deviceNameForUniqueId:(NSString*)uniqueId;
-+ (webrtc::VideoCaptureCapability)capabilityForPreset:(NSString*)preset;
-
-@end
-
-#endif // MODULES_VIDEO_CAPTURE_OBJC_DEVICE_INFO_OBJC_H_
diff --git a/modules/video_capture/objc/device_info_objc.mm b/modules/video_capture/objc/device_info_objc.mm
deleted file mode 100644
index f2b102e..0000000
--- a/modules/video_capture/objc/device_info_objc.mm
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2013 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.
- */
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-#import <AVFoundation/AVFoundation.h>
-
-#import "modules/video_capture/objc/device_info_objc.h"
-#include "modules/video_capture/video_capture_config.h"
-
-@implementation DeviceInfoIosObjC
-
-+ (int)captureDeviceCount {
- return [[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo] count];
-}
-
-+ (AVCaptureDevice*)captureDeviceForIndex:(int)index {
- return [[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]
- objectAtIndex:index];
-}
-
-+ (AVCaptureDevice*)captureDeviceForUniqueId:(NSString*)uniqueId {
- for (AVCaptureDevice* device in
- [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) {
- if ([uniqueId isEqual:device.uniqueID]) {
- return device;
- }
- }
-
- return nil;
-}
-
-+ (NSString*)deviceNameForIndex:(int)index {
- return [DeviceInfoIosObjC captureDeviceForIndex:index].localizedName;
-}
-
-+ (NSString*)deviceUniqueIdForIndex:(int)index {
- return [DeviceInfoIosObjC captureDeviceForIndex:index].uniqueID;
-}
-
-+ (NSString*)deviceNameForUniqueId:(NSString*)uniqueId {
- return [[AVCaptureDevice deviceWithUniqueID:uniqueId] localizedName];
-}
-
-+ (webrtc::VideoCaptureCapability)capabilityForPreset:(NSString*)preset {
- webrtc::VideoCaptureCapability capability;
-
- // TODO(tkchin): Maybe query AVCaptureDevice for supported formats, and
- // then get the dimensions / frame rate from each supported format
- if ([preset isEqualToString:AVCaptureSessionPreset352x288]) {
- capability.width = 352;
- capability.height = 288;
- capability.maxFPS = 30;
- capability.videoType = webrtc::VideoType::kNV12;
- capability.interlaced = false;
- } else if ([preset isEqualToString:AVCaptureSessionPreset640x480]) {
- capability.width = 640;
- capability.height = 480;
- capability.maxFPS = 30;
- capability.videoType = webrtc::VideoType::kNV12;
- capability.interlaced = false;
- } else if ([preset isEqualToString:AVCaptureSessionPreset1280x720]) {
- capability.width = 1280;
- capability.height = 720;
- capability.maxFPS = 30;
- capability.videoType = webrtc::VideoType::kNV12;
- capability.interlaced = false;
- }
-
- return capability;
-}
-
-@end
diff --git a/modules/video_capture/objc/rtc_video_capture_objc.h b/modules/video_capture/objc/rtc_video_capture_objc.h
deleted file mode 100644
index 4b1d71c..0000000
--- a/modules/video_capture/objc/rtc_video_capture_objc.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2013 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.
- */
-
-#ifndef MODULES_VIDEO_CAPTURE_OBJC_RTC_VIDEO_CAPTURE_OBJC_H_
-#define MODULES_VIDEO_CAPTURE_OBJC_RTC_VIDEO_CAPTURE_OBJC_H_
-
-#import <Foundation/Foundation.h>
-#ifdef WEBRTC_IOS
-#import <UIKit/UIKit.h>
-#endif
-
-#include "modules/video_capture/objc/video_capture.h"
-
-// The following class listens to a notification with name:
-// 'StatusBarOrientationDidChange'.
-// This notification must be posted in order for the capturer to reflect the
-// orientation change in video w.r.t. the application orientation.
-@interface RTCVideoCaptureIosObjC
- : NSObject<AVCaptureVideoDataOutputSampleBufferDelegate>
-
-@property webrtc::VideoRotation frameRotation;
-
-// custom initializer. Instance of VideoCaptureIos is needed
-// for callback purposes.
-// default init methods have been overridden to return nil.
-- (id)initWithOwner:(webrtc::videocapturemodule::VideoCaptureIos*)owner;
-- (BOOL)setCaptureDeviceByUniqueId:(NSString*)uniqueId;
-- (BOOL)startCaptureWithCapability:
- (const webrtc::VideoCaptureCapability&)capability;
-- (BOOL)stopCapture;
-
-@end
-#endif // MODULES_VIDEO_CAPTURE_OBJC_RTC_VIDEO_CAPTURE_OBJC_H_
diff --git a/modules/video_capture/objc/rtc_video_capture_objc.mm b/modules/video_capture/objc/rtc_video_capture_objc.mm
deleted file mode 100644
index 61ef8db..0000000
--- a/modules/video_capture/objc/rtc_video_capture_objc.mm
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Copyright (c) 2013 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.
- */
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-#import <AVFoundation/AVFoundation.h>
-#ifdef WEBRTC_IOS
-#import <UIKit/UIKit.h>
-#endif
-
-#import "modules/video_capture/objc/device_info_objc.h"
-#import "modules/video_capture/objc/rtc_video_capture_objc.h"
-
-#include "rtc_base/logging.h"
-
-using namespace webrtc;
-using namespace webrtc::videocapturemodule;
-
-@interface RTCVideoCaptureIosObjC (hidden)
-- (int)changeCaptureInputWithName:(NSString*)captureDeviceName;
-@end
-
-@implementation RTCVideoCaptureIosObjC {
- webrtc::videocapturemodule::VideoCaptureIos* _owner;
- webrtc::VideoCaptureCapability _capability;
- AVCaptureSession* _captureSession;
- BOOL _orientationHasChanged;
- AVCaptureConnection* _connection;
- BOOL _captureChanging; // Guarded by _captureChangingCondition.
- NSCondition* _captureChangingCondition;
-}
-
-@synthesize frameRotation = _framRotation;
-
-- (id)initWithOwner:(VideoCaptureIos*)owner {
- if (self = [super init]) {
- _owner = owner;
- _captureSession = [[AVCaptureSession alloc] init];
-#if defined(WEBRTC_IOS)
- _captureSession.usesApplicationAudioSession = NO;
-#endif
- _captureChanging = NO;
- _captureChangingCondition = [[NSCondition alloc] init];
-
- if (!_captureSession || !_captureChangingCondition) {
- return nil;
- }
-
- // create and configure a new output (using callbacks)
- AVCaptureVideoDataOutput* captureOutput = [[AVCaptureVideoDataOutput alloc] init];
- NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey;
-
- NSNumber* val = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_422YpCbCr8];
- NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:val forKey:key];
- captureOutput.videoSettings = videoSettings;
-
- // add new output
- if ([_captureSession canAddOutput:captureOutput]) {
- [_captureSession addOutput:captureOutput];
- } else {
- RTC_LOG(LS_ERROR) << __FUNCTION__ << ": Could not add output to AVCaptureSession";
- }
-
-#ifdef WEBRTC_IOS
- [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
-
- NSNotificationCenter* notify = [NSNotificationCenter defaultCenter];
- [notify addObserver:self
- selector:@selector(onVideoError:)
- name:AVCaptureSessionRuntimeErrorNotification
- object:_captureSession];
- [notify addObserver:self
- selector:@selector(deviceOrientationDidChange:)
- name:UIDeviceOrientationDidChangeNotification
- object:nil];
-#endif
- }
-
- return self;
-}
-
-- (void)directOutputToSelf {
- [[self currentOutput]
- setSampleBufferDelegate:self
- queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
-}
-
-- (void)directOutputToNil {
- [[self currentOutput] setSampleBufferDelegate:nil queue:NULL];
-}
-
-- (void)deviceOrientationDidChange:(NSNotification*)notification {
- _orientationHasChanged = YES;
- [self setRelativeVideoOrientation];
-}
-
-- (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-- (BOOL)setCaptureDeviceByUniqueId:(NSString*)uniqueId {
- [self waitForCaptureChangeToFinish];
- // check to see if the camera is already set
- if (_captureSession) {
- NSArray* currentInputs = [NSArray arrayWithArray:[_captureSession inputs]];
- if ([currentInputs count] > 0) {
- AVCaptureDeviceInput* currentInput = [currentInputs objectAtIndex:0];
- if ([uniqueId isEqualToString:[currentInput.device localizedName]]) {
- return YES;
- }
- }
- }
-
- return [self changeCaptureInputByUniqueId:uniqueId];
-}
-
-- (BOOL)startCaptureWithCapability:(const VideoCaptureCapability&)capability {
- [self waitForCaptureChangeToFinish];
- if (!_captureSession) {
- return NO;
- }
-
- // check limits of the resolution
- if (capability.maxFPS < 0 || capability.maxFPS > 60) {
- return NO;
- }
-
- if ([_captureSession canSetSessionPreset:AVCaptureSessionPreset1280x720]) {
- if (capability.width > 1280 || capability.height > 720) {
- return NO;
- }
- } else if ([_captureSession canSetSessionPreset:AVCaptureSessionPreset640x480]) {
- if (capability.width > 640 || capability.height > 480) {
- return NO;
- }
- } else if ([_captureSession canSetSessionPreset:AVCaptureSessionPreset352x288]) {
- if (capability.width > 352 || capability.height > 288) {
- return NO;
- }
- } else if (capability.width < 0 || capability.height < 0) {
- return NO;
- }
-
- _capability = capability;
-
- AVCaptureVideoDataOutput* currentOutput = [self currentOutput];
- if (!currentOutput) return NO;
-
- [self directOutputToSelf];
-
- _orientationHasChanged = NO;
- _captureChanging = YES;
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- [self startCaptureInBackgroundWithOutput:currentOutput];
- });
- return YES;
-}
-
-- (AVCaptureVideoDataOutput*)currentOutput {
- return [[_captureSession outputs] firstObject];
-}
-
-- (void)startCaptureInBackgroundWithOutput:(AVCaptureVideoDataOutput*)currentOutput {
- NSString* captureQuality = [NSString stringWithString:AVCaptureSessionPresetLow];
- if (_capability.width >= 1280 || _capability.height >= 720) {
- captureQuality = [NSString stringWithString:AVCaptureSessionPreset1280x720];
- } else if (_capability.width >= 640 || _capability.height >= 480) {
- captureQuality = [NSString stringWithString:AVCaptureSessionPreset640x480];
- } else if (_capability.width >= 352 || _capability.height >= 288) {
- captureQuality = [NSString stringWithString:AVCaptureSessionPreset352x288];
- }
-
- // begin configuration for the AVCaptureSession
- [_captureSession beginConfiguration];
-
- // picture resolution
- [_captureSession setSessionPreset:captureQuality];
-
- _connection = [currentOutput connectionWithMediaType:AVMediaTypeVideo];
- [self setRelativeVideoOrientation];
-
- // finished configuring, commit settings to AVCaptureSession.
- [_captureSession commitConfiguration];
-
- [_captureSession startRunning];
- [self signalCaptureChangeEnd];
-}
-
-- (void)setRelativeVideoOrientation {
- if (!_connection.supportsVideoOrientation) {
- return;
- }
-#ifndef WEBRTC_IOS
- _connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;
- return;
-#else
- switch ([UIDevice currentDevice].orientation) {
- case UIDeviceOrientationPortrait:
- _connection.videoOrientation = AVCaptureVideoOrientationPortrait;
- break;
- case UIDeviceOrientationPortraitUpsideDown:
- _connection.videoOrientation = AVCaptureVideoOrientationPortraitUpsideDown;
- break;
- case UIDeviceOrientationLandscapeLeft:
- _connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight;
- break;
- case UIDeviceOrientationLandscapeRight:
- _connection.videoOrientation = AVCaptureVideoOrientationLandscapeLeft;
- break;
- case UIDeviceOrientationFaceUp:
- case UIDeviceOrientationFaceDown:
- case UIDeviceOrientationUnknown:
- if (!_orientationHasChanged) {
- _connection.videoOrientation = AVCaptureVideoOrientationPortrait;
- }
- break;
- }
-#endif
-}
-
-- (void)onVideoError:(NSNotification*)notification {
- NSLog(@"onVideoError: %@", notification);
- // TODO(sjlee): make the specific error handling with this notification.
- RTC_LOG(LS_ERROR) << __FUNCTION__ << ": [AVCaptureSession startRunning] error.";
-}
-
-- (BOOL)stopCapture {
-#ifdef WEBRTC_IOS
- [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
-#endif
- _orientationHasChanged = NO;
- [self waitForCaptureChangeToFinish];
- [self directOutputToNil];
-
- if (!_captureSession) {
- return NO;
- }
-
- _captureChanging = YES;
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
- [self stopCaptureInBackground];
- });
- return YES;
-}
-
-- (void)stopCaptureInBackground {
- [_captureSession stopRunning];
- [self signalCaptureChangeEnd];
-}
-
-- (BOOL)changeCaptureInputByUniqueId:(NSString*)uniqueId {
- [self waitForCaptureChangeToFinish];
- NSArray* currentInputs = [_captureSession inputs];
- // remove current input
- if ([currentInputs count] > 0) {
- AVCaptureInput* currentInput = (AVCaptureInput*)[currentInputs objectAtIndex:0];
-
- [_captureSession removeInput:currentInput];
- }
-
- // Look for input device with the name requested (as our input param)
- // get list of available capture devices
- int captureDeviceCount = [DeviceInfoIosObjC captureDeviceCount];
- if (captureDeviceCount <= 0) {
- return NO;
- }
-
- AVCaptureDevice* captureDevice = [DeviceInfoIosObjC captureDeviceForUniqueId:uniqueId];
-
- if (!captureDevice) {
- return NO;
- }
-
- // now create capture session input out of AVCaptureDevice
- NSError* deviceError = nil;
- AVCaptureDeviceInput* newCaptureInput =
- [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&deviceError];
-
- if (!newCaptureInput) {
- const char* errorMessage = [[deviceError localizedDescription] UTF8String];
-
- RTC_LOG(LS_ERROR) << __FUNCTION__ << ": deviceInputWithDevice error:" << errorMessage;
-
- return NO;
- }
-
- // try to add our new capture device to the capture session
- [_captureSession beginConfiguration];
-
- BOOL addedCaptureInput = NO;
- if ([_captureSession canAddInput:newCaptureInput]) {
- [_captureSession addInput:newCaptureInput];
- addedCaptureInput = YES;
- } else {
- addedCaptureInput = NO;
- }
-
- [_captureSession commitConfiguration];
-
- return addedCaptureInput;
-}
-
-- (void)captureOutput:(AVCaptureOutput*)captureOutput
- didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
- fromConnection:(AVCaptureConnection*)connection {
- const int kFlags = 0;
- CVImageBufferRef videoFrame = CMSampleBufferGetImageBuffer(sampleBuffer);
-
- if (CVPixelBufferLockBaseAddress(videoFrame, kFlags) != kCVReturnSuccess) {
- return;
- }
-
- uint8_t* baseAddress = (uint8_t*)CVPixelBufferGetBaseAddress(videoFrame);
- const size_t width = CVPixelBufferGetWidth(videoFrame);
- const size_t height = CVPixelBufferGetHeight(videoFrame);
- const size_t frameSize = width * height * 2;
-
- VideoCaptureCapability tempCaptureCapability;
- tempCaptureCapability.width = width;
- tempCaptureCapability.height = height;
- tempCaptureCapability.maxFPS = _capability.maxFPS;
- tempCaptureCapability.videoType = VideoType::kUYVY;
-
- _owner->IncomingFrame(baseAddress, frameSize, tempCaptureCapability, 0);
-
- CVPixelBufferUnlockBaseAddress(videoFrame, kFlags);
-}
-
-- (void)signalCaptureChangeEnd {
- [_captureChangingCondition lock];
- _captureChanging = NO;
- [_captureChangingCondition signal];
- [_captureChangingCondition unlock];
-}
-
-- (void)waitForCaptureChangeToFinish {
- [_captureChangingCondition lock];
- while (_captureChanging) {
- [_captureChangingCondition wait];
- }
- [_captureChangingCondition unlock];
-}
-@end
diff --git a/modules/video_capture/objc/video_capture.h b/modules/video_capture/objc/video_capture.h
deleted file mode 100644
index 1dc1fbd..0000000
--- a/modules/video_capture/objc/video_capture.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2013 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.
- */
-
-#ifndef MODULES_VIDEO_CAPTURE_OBJC_VIDEO_CAPTURE_H_
-#define MODULES_VIDEO_CAPTURE_OBJC_VIDEO_CAPTURE_H_
-
-#include "api/scoped_refptr.h"
-#include "modules/video_capture/video_capture_impl.h"
-
-@class RTCVideoCaptureIosObjC;
-
-namespace webrtc {
-namespace videocapturemodule {
-class VideoCaptureIos : public VideoCaptureImpl {
- public:
- VideoCaptureIos();
- ~VideoCaptureIos() override;
-
- static rtc::scoped_refptr<VideoCaptureModule> Create(
- const char* device_unique_id_utf8);
-
- // Implementation of VideoCaptureImpl.
- int32_t StartCapture(const VideoCaptureCapability& capability) override;
- int32_t StopCapture() override;
- bool CaptureStarted() override;
- int32_t CaptureSettings(VideoCaptureCapability& settings) override;
-
- private:
- RTCVideoCaptureIosObjC* capture_device_;
- bool is_capturing_;
- VideoCaptureCapability capability_;
-};
-
-} // namespace videocapturemodule
-} // namespace webrtc
-
-#endif // MODULES_VIDEO_CAPTURE_OBJC_VIDEO_CAPTURE_H_
diff --git a/modules/video_capture/objc/video_capture.mm b/modules/video_capture/objc/video_capture.mm
deleted file mode 100644
index 9697c28..0000000
--- a/modules/video_capture/objc/video_capture.mm
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2013 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.
- */
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-#include "api/scoped_refptr.h"
-#include "modules/video_capture/objc/device_info_objc.h"
-#include "modules/video_capture/objc/rtc_video_capture_objc.h"
-#include "rtc_base/ref_count.h"
-#include "rtc_base/ref_counted_object.h"
-
-using namespace webrtc;
-using namespace videocapturemodule;
-
-rtc::scoped_refptr<VideoCaptureModule> VideoCaptureImpl::Create(
- const char* deviceUniqueIdUTF8) {
- return VideoCaptureIos::Create(deviceUniqueIdUTF8);
-}
-
-VideoCaptureIos::VideoCaptureIos()
- : is_capturing_(false) {
- capability_.width = kDefaultWidth;
- capability_.height = kDefaultHeight;
- capability_.maxFPS = kDefaultFrameRate;
- capture_device_ = nil;
-}
-
-VideoCaptureIos::~VideoCaptureIos() {
- if (is_capturing_) {
- [capture_device_ stopCapture];
- capture_device_ = nil;
- }
-}
-
-rtc::scoped_refptr<VideoCaptureModule> VideoCaptureIos::Create(
- const char* deviceUniqueIdUTF8) {
- if (!deviceUniqueIdUTF8[0]) {
- return NULL;
- }
-
- rtc::scoped_refptr<VideoCaptureIos> capture_module(
- new rtc::RefCountedObject<VideoCaptureIos>());
-
- const int32_t name_length = strlen(deviceUniqueIdUTF8);
- if (name_length > kVideoCaptureUniqueNameLength)
- return nullptr;
-
- capture_module->_deviceUniqueId = new char[name_length + 1];
- strncpy(capture_module->_deviceUniqueId, deviceUniqueIdUTF8, name_length + 1);
- capture_module->_deviceUniqueId[name_length] = '\0';
-
- capture_module->capture_device_ =
- [[RTCVideoCaptureIosObjC alloc] initWithOwner:capture_module];
- if (!capture_module->capture_device_) {
- return nullptr;
- }
-
- if (![capture_module->capture_device_
- setCaptureDeviceByUniqueId:
- [[NSString alloc] initWithCString:deviceUniqueIdUTF8
- encoding:NSUTF8StringEncoding]]) {
- return nullptr;
- }
- return capture_module;
-}
-
-int32_t VideoCaptureIos::StartCapture(
- const VideoCaptureCapability& capability) {
- capability_ = capability;
-
- if (![capture_device_ startCaptureWithCapability:capability]) {
- return -1;
- }
-
- is_capturing_ = true;
-
- return 0;
-}
-
-int32_t VideoCaptureIos::StopCapture() {
- if (![capture_device_ stopCapture]) {
- return -1;
- }
-
- is_capturing_ = false;
- return 0;
-}
-
-bool VideoCaptureIos::CaptureStarted() {
- return is_capturing_;
-}
-
-int32_t VideoCaptureIos::CaptureSettings(VideoCaptureCapability& settings) {
- settings = capability_;
- settings.videoType = VideoType::kNV12;
- return 0;
-}
diff --git a/modules/video_capture/video_capture_factory.cc b/modules/video_capture/video_capture_factory.cc
index 28a61b8..1119853 100644
--- a/modules/video_capture/video_capture_factory.cc
+++ b/modules/video_capture/video_capture_factory.cc
@@ -16,7 +16,7 @@
rtc::scoped_refptr<VideoCaptureModule> VideoCaptureFactory::Create(
const char* deviceUniqueIdUTF8) {
-#if defined(WEBRTC_ANDROID)
+#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
return nullptr;
#else
return videocapturemodule::VideoCaptureImpl::Create(deviceUniqueIdUTF8);
@@ -29,7 +29,7 @@
}
VideoCaptureModule::DeviceInfo* VideoCaptureFactory::CreateDeviceInfo() {
-#if defined(WEBRTC_ANDROID)
+#if defined(WEBRTC_ANDROID) || defined(WEBRTC_MAC)
return nullptr;
#else
return videocapturemodule::VideoCaptureImpl::CreateDeviceInfo();
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 464276c..255dc43 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -366,7 +366,10 @@
"..:common_objc",
":used_from_extension",
]
- libs = [ "VideoToolbox.framework" ]
+ libs = [
+ "VideoToolbox.framework",
+ "CoreVideo.framework",
+ ]
}
rtc_static_library("video_objc") {
@@ -380,7 +383,7 @@
"objc/components/renderer/opengl/RTCShader.mm",
"objc/components/renderer/opengl/RTCVideoViewShading.h",
]
- libs = []
+ libs = [ "CoreVideo.framework" ]
if (is_ios) {
sources += [
"objc/components/renderer/opengl/RTCNV12TextureCache.h",
@@ -394,7 +397,6 @@
} else if (is_mac) {
libs += [
"CoreMedia.framework",
- "CoreVideo.framework",
"OpenGL.framework",
]
}
@@ -524,7 +526,10 @@
"objc/components/capturer/RTCFileVideoCapturer.m",
]
}
- libs = [ "AVFoundation.framework" ]
+ libs = [
+ "AVFoundation.framework",
+ "CoreVideo.framework",
+ ]
configs += [ "..:common_objc" ]