1 /*
2  *  Copyright 2016 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 #import <Foundation/Foundation.h>
12 
13 #import <WebRTC/RTCVideoCodecInfo.h>
14 
15 NS_ASSUME_NONNULL_BEGIN
16 
17 /**
18  * Model class for user defined settings.
19  *
20  * Handles storing the settings and provides default values if setting is not
21  * set. Also provides list of available options for different settings. Stores
22  * for example video codec, video resolution and maximum bitrate.
23  */
24 @interface ARDSettingsModel : NSObject
25 
26 /**
27  * Returns array of available capture resoultions.
28  *
29  * The capture resolutions are represented as strings in the following format
30  * [width]x[height]
31  */
32 - (NSArray<NSString *> *)availableVideoResolutions;
33 
34 /**
35  * Returns current video resolution string.
36  * If no resolution is in store, default value of 640x480 is returned.
37  * When defaulting to value, the default is saved in store for consistency reasons.
38  */
39 - (NSString *)currentVideoResolutionSettingFromStore;
40 - (int)currentVideoResolutionWidthFromStore;
41 - (int)currentVideoResolutionHeightFromStore;
42 
43 /**
44  * Stores the provided video resolution string into the store.
45  *
46  * If the provided resolution is no part of the available video resolutions
47  * the store operation will not be executed and NO will be returned.
48  * @param resolution the string to be stored.
49  * @return YES/NO depending on success.
50  */
51 - (BOOL)storeVideoResolutionSetting:(NSString *)resolution;
52 
53 /**
54  * Returns array of available video codecs.
55  */
56 - (NSArray<RTC_OBJC_TYPE(RTCVideoCodecInfo) *> *)availableVideoCodecs;
57 
58 /**
59  * Returns current video codec setting from store if present or default (H264) otherwise.
60  */
61 - (RTC_OBJC_TYPE(RTCVideoCodecInfo) *)currentVideoCodecSettingFromStore;
62 
63 /**
64  * Stores the provided video codec setting into the store.
65  *
66  * If the provided video codec is not part of the available video codecs
67  * the store operation will not be executed and NO will be returned.
68  * @param video codec settings the string to be stored.
69  * @return YES/NO depending on success.
70  */
71 - (BOOL)storeVideoCodecSetting:(RTC_OBJC_TYPE(RTCVideoCodecInfo) *)videoCodec;
72 
73 /**
74  * Returns current max bitrate setting from store if present.
75  */
76 - (nullable NSNumber *)currentMaxBitrateSettingFromStore;
77 
78 /**
79  * Stores the provided bitrate value into the store.
80  *
81  * @param bitrate NSNumber representation of the max bitrate value.
82  */
83 - (void)storeMaxBitrateSetting:(nullable NSNumber *)bitrate;
84 
85 /**
86  * Returns current audio only setting from store if present or default (NO) otherwise.
87  */
88 - (BOOL)currentAudioOnlySettingFromStore;
89 
90 /**
91  * Stores the provided audio only setting into the store.
92  *
93  * @param setting the boolean value to be stored.
94  */
95 - (void)storeAudioOnlySetting:(BOOL)audioOnly;
96 
97 /**
98  * Returns current create AecDump setting from store if present or default (NO) otherwise.
99  */
100 - (BOOL)currentCreateAecDumpSettingFromStore;
101 
102 /**
103  * Stores the provided create AecDump setting into the store.
104  *
105  * @param setting the boolean value to be stored.
106  */
107 - (void)storeCreateAecDumpSetting:(BOOL)createAecDump;
108 
109 /**
110  * Returns current setting whether to use manual audio config from store if present or default (YES)
111  * otherwise.
112  */
113 - (BOOL)currentUseManualAudioConfigSettingFromStore;
114 
115 /**
116  * Stores the provided use manual audio config setting into the store.
117  *
118  * @param setting the boolean value to be stored.
119  */
120 - (void)storeUseManualAudioConfigSetting:(BOOL)useManualAudioConfig;
121 
122 @end
123 NS_ASSUME_NONNULL_END
124