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}
diff --git a/examples/objc/AppRTCMobile/ARDCaptureController.m b/examples/objc/AppRTCMobile/ARDCaptureController.m
index da6a37a..25aba8c 100644
--- a/examples/objc/AppRTCMobile/ARDCaptureController.m
+++ b/examples/objc/AppRTCMobile/ARDCaptureController.m
@@ -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;
}
diff --git a/examples/objc/AppRTCMobile/ARDSettingsModel.m b/examples/objc/AppRTCMobile/ARDSettingsModel.m
index cdaead7..ac265c8 100644
--- a/examples/objc/AppRTCMobile/ARDSettingsModel.m
+++ b/examples/objc/AppRTCMobile/ARDSettingsModel.m
@@ -151,11 +151,11 @@
#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 @@
}
- (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];
diff --git a/examples/objc/AppRTCMobile/ARDSettingsStore.m b/examples/objc/AppRTCMobile/ARDSettingsStore.m
index 28a5ab7..86bdaaf 100644
--- a/examples/objc/AppRTCMobile/ARDSettingsStore.m
+++ b/examples/objc/AppRTCMobile/ARDSettingsStore.m
@@ -35,15 +35,20 @@
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];
}