Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: webrtc/modules/audio_device/ios/objc/RTCAudioSession+Configuration.mm

Issue 2855023003: Move RTCAudioSession* files modules/audio_device/ -> sdk/Framework. (Closed)
Patch Set: Address comments Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 "webrtc/modules/audio_device/ios/objc/RTCAudioSession.h"
12
13 #import "WebRTC/RTCLogging.h"
14 #import "webrtc/modules/audio_device/ios/objc/RTCAudioSession+Private.h"
15 #import "webrtc/modules/audio_device/ios/objc/RTCAudioSessionConfiguration.h"
16
17 @implementation RTCAudioSession (Configuration)
18
19 - (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration
20 error:(NSError **)outError {
21 return [self setConfiguration:configuration
22 active:NO
23 shouldSetActive:NO
24 error:outError];
25 }
26
27 - (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration
28 active:(BOOL)active
29 error:(NSError **)outError {
30 return [self setConfiguration:configuration
31 active:active
32 shouldSetActive:YES
33 error:outError];
34 }
35
36 #pragma mark - Private
37
38 - (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration
39 active:(BOOL)active
40 shouldSetActive:(BOOL)shouldSetActive
41 error:(NSError **)outError {
42 NSParameterAssert(configuration);
43 if (outError) {
44 *outError = nil;
45 }
46 if (![self checkLock:outError]) {
47 return NO;
48 }
49
50 // Provide an error even if there isn't one so we can log it. We will not
51 // return immediately on error in this function and instead try to set
52 // everything we can.
53 NSError *error = nil;
54
55 if (self.category != configuration.category ||
56 self.categoryOptions != configuration.categoryOptions) {
57 NSError *categoryError = nil;
58 if (![self setCategory:configuration.category
59 withOptions:configuration.categoryOptions
60 error:&categoryError]) {
61 RTCLogError(@"Failed to set category: %@",
62 categoryError.localizedDescription);
63 error = categoryError;
64 } else {
65 RTCLog(@"Set category to: %@", configuration.category);
66 }
67 }
68
69 if (self.mode != configuration.mode) {
70 NSError *modeError = nil;
71 if (![self setMode:configuration.mode error:&modeError]) {
72 RTCLogError(@"Failed to set mode: %@",
73 modeError.localizedDescription);
74 error = modeError;
75 } else {
76 RTCLog(@"Set mode to: %@", configuration.mode);
77 }
78 }
79
80 // Sometimes category options don't stick after setting mode.
81 if (self.categoryOptions != configuration.categoryOptions) {
82 NSError *categoryError = nil;
83 if (![self setCategory:configuration.category
84 withOptions:configuration.categoryOptions
85 error:&categoryError]) {
86 RTCLogError(@"Failed to set category options: %@",
87 categoryError.localizedDescription);
88 error = categoryError;
89 } else {
90 RTCLog(@"Set category options to: %ld",
91 (long)configuration.categoryOptions);
92 }
93 }
94
95 if (self.preferredSampleRate != configuration.sampleRate) {
96 NSError *sampleRateError = nil;
97 if (![self setPreferredSampleRate:configuration.sampleRate
98 error:&sampleRateError]) {
99 RTCLogError(@"Failed to set preferred sample rate: %@",
100 sampleRateError.localizedDescription);
101 error = sampleRateError;
102 } else {
103 RTCLog(@"Set preferred sample rate to: %.2f",
104 configuration.sampleRate);
105 }
106 }
107
108 if (self.preferredIOBufferDuration != configuration.ioBufferDuration) {
109 NSError *bufferDurationError = nil;
110 if (![self setPreferredIOBufferDuration:configuration.ioBufferDuration
111 error:&bufferDurationError]) {
112 RTCLogError(@"Failed to set preferred IO buffer duration: %@",
113 bufferDurationError.localizedDescription);
114 error = bufferDurationError;
115 } else {
116 RTCLog(@"Set preferred IO buffer duration to: %f",
117 configuration.ioBufferDuration);
118 }
119 }
120
121 if (shouldSetActive) {
122 NSError *activeError = nil;
123 if (![self setActive:active error:&activeError]) {
124 RTCLogError(@"Failed to setActive to %d: %@",
125 active, activeError.localizedDescription);
126 error = activeError;
127 }
128 }
129
130 if (self.isActive &&
131 // TODO(tkchin): Figure out which category/mode numChannels is valid for.
132 [self.mode isEqualToString:AVAudioSessionModeVoiceChat]) {
133 // Try to set the preferred number of hardware audio channels. These calls
134 // must be done after setting the audio session’s category and mode and
135 // activating the session.
136 NSInteger inputNumberOfChannels = configuration.inputNumberOfChannels;
137 if (self.inputNumberOfChannels != inputNumberOfChannels) {
138 NSError *inputChannelsError = nil;
139 if (![self setPreferredInputNumberOfChannels:inputNumberOfChannels
140 error:&inputChannelsError]) {
141 RTCLogError(@"Failed to set preferred input number of channels: %@",
142 inputChannelsError.localizedDescription);
143 error = inputChannelsError;
144 } else {
145 RTCLog(@"Set input number of channels to: %ld",
146 (long)inputNumberOfChannels);
147 }
148 }
149 NSInteger outputNumberOfChannels = configuration.outputNumberOfChannels;
150 if (self.outputNumberOfChannels != outputNumberOfChannels) {
151 NSError *outputChannelsError = nil;
152 if (![self setPreferredOutputNumberOfChannels:outputNumberOfChannels
153 error:&outputChannelsError]) {
154 RTCLogError(@"Failed to set preferred output number of channels: %@",
155 outputChannelsError.localizedDescription);
156 error = outputChannelsError;
157 } else {
158 RTCLog(@"Set output number of channels to: %ld",
159 (long)outputNumberOfChannels);
160 }
161 }
162 }
163
164 if (outError) {
165 *outError = error;
166 }
167
168 return error == nil;
169 }
170
171 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698