Index: webrtc/examples/objc/AppRTCMobile/ios/ARDMediaConstraintsModel.m |
diff --git a/webrtc/examples/objc/AppRTCMobile/ios/ARDMediaConstraintsModel.m b/webrtc/examples/objc/AppRTCMobile/ios/ARDMediaConstraintsModel.m |
new file mode 100644 |
index 0000000000000000000000000000000000000000..559abb586c47a17e71118a7dde5eda0b0283a5bd |
--- /dev/null |
+++ b/webrtc/examples/objc/AppRTCMobile/ios/ARDMediaConstraintsModel.m |
@@ -0,0 +1,100 @@ |
+/* |
+ * Copyright 2016 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. |
+ */ |
+ |
+#import "ARDMediaConstraintsModel+Private.h" |
+#import "ARDMediaConstraintsSettingsStore.h" |
+#import "WebRTC/RTCMediaConstraints.h" |
+ |
+NS_ASSUME_NONNULL_BEGIN |
+static NSArray<NSString *> *videoResolutionsStaticValues() { |
+ return @[ @"640x480", @"960x540", @"1280x720" ]; |
+} |
+ |
+@interface ARDMediaConstraintsModel () { |
+ ARDMediaConstraintsSettingsStore *_settingsStore; |
+} |
+@end |
+ |
+@implementation ARDMediaConstraintsModel |
+ |
+- (NSArray<NSString *> *)availableVideoResoultionsMediaConstraints { |
+ return videoResolutionsStaticValues(); |
+} |
+ |
+- (NSString *)currentVideoResoultionConstraintFromStore { |
+ NSString *constraint = [[self settingsStore] videoResolutionConstraintsSetting]; |
+ if (!constraint) { |
+ constraint = [self defaultVideoResolutionMediaConstraint]; |
+ // To ensure consistency add the default to the store. |
+ [[self settingsStore] setVideoResolutionConstraintsSetting:constraint]; |
+ } |
+ return constraint; |
+} |
+ |
+- (void)storeVideoResoultionConstraint:(NSString *)constraint { |
+ [[self settingsStore] setVideoResolutionConstraintsSetting:constraint]; |
magjed_webrtc
2016/10/31 19:26:39
Should we verify that |constraint| is one of the a
daniela-webrtc
2016/11/01 09:51:12
Yes! I missed that. Thanks
|
+} |
+ |
+#pragma mark - Testable |
+ |
+- (ARDMediaConstraintsSettingsStore *)settingsStore { |
+ if (!_settingsStore) { |
+ _settingsStore = [[ARDMediaConstraintsSettingsStore alloc] init]; |
+ } |
+ return _settingsStore; |
+} |
+ |
+- (nullable NSString *)currentVideoResolutionWidthFromStore { |
+ NSString *mediaConstraintFromStore = [self currentVideoResoultionConstraintFromStore]; |
+ |
+ return [self videoResolutionComponentAtIndex:0 inConstraintsString:mediaConstraintFromStore]; |
+} |
+ |
+- (nullable NSString *)currentVideoResolutionHeightFromStore { |
+ NSString *mediaConstraintFromStore = [self currentVideoResoultionConstraintFromStore]; |
+ return [self videoResolutionComponentAtIndex:1 inConstraintsString:mediaConstraintFromStore]; |
+} |
+ |
+#pragma mark - |
+ |
+- (NSString *)defaultVideoResolutionMediaConstraint { |
+ return videoResolutionsStaticValues()[0]; |
+} |
+ |
+- (nullable NSString *)videoResolutionComponentAtIndex:(int)index |
+ inConstraintsString:(NSString *)constraint { |
+ if (index != 0 && index != 1) { |
+ return nil; |
+ } |
+ NSArray *components = [constraint componentsSeparatedByString:@"x"]; |
+ if (components.count != 2) { |
+ return nil; |
+ } |
+ return components[index]; |
+} |
+ |
+#pragma mark - Conversion to RTCMediaConstraints |
+ |
+- (nullable NSDictionary *)currentMediaConstraintFromStoreAsRTCDictionary { |
+ NSDictionary *mediaConstraintsDictionary = nil; |
+ |
+ NSString *widthConstraint = [self currentVideoResolutionWidthFromStore]; |
+ NSString *heightConstraint = [self currentVideoResolutionHeightFromStore]; |
+ if (widthConstraint && heightConstraint) { |
+ mediaConstraintsDictionary = @{ |
+ kRTCMediaConstraintsMinWidth : widthConstraint, |
+ kRTCMediaConstraintsMinHeight : heightConstraint |
+ }; |
+ } |
+ return mediaConstraintsDictionary; |
+} |
+ |
+@end |
+NS_ASSUME_NONNULL_END |