Fixing crash in Mac client when no cameras are available.
Bug: webrtc:8348 Change-Id: Ibf84ca76812d8c002fae9bd7bcf616abc53c78b1 Reviewed-on: https://webrtc-review.googlesource.com/7340 Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Reviewed-by: Daniela Jovanoska Petrenko <denicija@webrtc.org> Commit-Queue: Peter Hanspers <peterhanspers@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20392}
This commit is contained in:
committed by
Commit Bot
parent
93bc308f31
commit
d92e0b5923
@ -11,6 +11,7 @@
|
||||
#import "ARDCaptureController.h"
|
||||
|
||||
#import "ARDSettingsModel.h"
|
||||
#import "WebRTC/RTCLogging.h"
|
||||
|
||||
@implementation ARDCaptureController {
|
||||
RTCCameraVideoCapturer *_capturer;
|
||||
@ -34,6 +35,14 @@
|
||||
_usingFrontCamera ? AVCaptureDevicePositionFront : AVCaptureDevicePositionBack;
|
||||
AVCaptureDevice *device = [self findDeviceForPosition:position];
|
||||
AVCaptureDeviceFormat *format = [self selectFormatForDevice:device];
|
||||
|
||||
if (format == nil) {
|
||||
RTCLogError(@"No valid formats for device %@", device);
|
||||
NSAssert(NO, @"");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
NSInteger fps = [self selectFpsForFormat:format];
|
||||
|
||||
[_capturer startCaptureWithDevice:device format:format fps:fps];
|
||||
@ -77,7 +86,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
NSAssert(selectedFormat != nil, @"No suitable capture format found.");
|
||||
return selectedFormat;
|
||||
}
|
||||
|
||||
|
||||
@ -151,11 +151,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
#pragma mark -
|
||||
|
||||
- (NSString *)defaultVideoResolutionSetting {
|
||||
return [self availableVideoResolutions][0];
|
||||
return [self availableVideoResolutions].firstObject;
|
||||
}
|
||||
|
||||
- (RTCVideoCodecInfo *)defaultVideoCodecSetting {
|
||||
return [self availableVideoCodecs][0];
|
||||
return [self availableVideoCodecs].firstObject;
|
||||
}
|
||||
|
||||
- (int)videoResolutionComponentAtIndex:(int)index inString:(NSString *)resolution {
|
||||
@ -170,11 +170,21 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
}
|
||||
|
||||
- (void)registerStoreDefaults {
|
||||
NSString *defaultVideoResolutionSetting = [self defaultVideoResolutionSetting];
|
||||
BOOL audioOnly = (defaultVideoResolutionSetting.length == 0);
|
||||
|
||||
// The iOS simulator doesn't provide any sort of camera capture
|
||||
// support or emulation (http://goo.gl/rHAnC1) so don't bother
|
||||
// trying to open a local stream.
|
||||
#if TARGET_IPHONE_SIMULATOR
|
||||
audioOnly = YES;
|
||||
#endif
|
||||
|
||||
NSData *codecData = [NSKeyedArchiver archivedDataWithRootObject:[self defaultVideoCodecSetting]];
|
||||
[ARDSettingsStore setDefaultsForVideoResolution:[self defaultVideoResolutionSetting]
|
||||
videoCodec:codecData
|
||||
bitrate:nil
|
||||
audioOnly:NO
|
||||
audioOnly:audioOnly
|
||||
createAecDump:NO
|
||||
useLevelController:NO
|
||||
useManualAudioConfig:YES];
|
||||
|
||||
@ -35,15 +35,20 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
useLevelController:(BOOL)useLevelController
|
||||
useManualAudioConfig:(BOOL)useManualAudioConfig {
|
||||
NSMutableDictionary<NSString *, id> *defaultsDictionary = [@{
|
||||
kVideoResolutionKey : videoResolution,
|
||||
kVideoCodecKey : videoCodec,
|
||||
kAudioOnlyKey : @(audioOnly),
|
||||
kCreateAecDumpKey : @(createAecDump),
|
||||
kUseLevelControllerKey : @(useLevelController),
|
||||
kUseManualAudioConfigKey : @(useManualAudioConfig)
|
||||
} mutableCopy];
|
||||
|
||||
if (videoResolution) {
|
||||
defaultsDictionary[kVideoResolutionKey] = videoResolution;
|
||||
}
|
||||
if (videoCodec) {
|
||||
defaultsDictionary[kVideoCodecKey] = videoCodec;
|
||||
}
|
||||
if (bitrate) {
|
||||
[defaultsDictionary setObject:bitrate forKey:kBitrateKey];
|
||||
defaultsDictionary[kBitrateKey] = bitrate;
|
||||
}
|
||||
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDictionary];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user