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

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

Issue 1945563003: Provide isAudioEnabled flag to control audio unit. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix some bluetooth issue. Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_device/ios/objc/RTCAudioSession+Configuration.mm
diff --git a/webrtc/modules/audio_device/ios/objc/RTCAudioSession+Configuration.mm b/webrtc/modules/audio_device/ios/objc/RTCAudioSession+Configuration.mm
index 85d442aab2ad8e1d6c64e0d1a6cc7f65520b6362..5a7600a5d3947ec97471df86a2342b4efa0752bb 100644
--- a/webrtc/modules/audio_device/ios/objc/RTCAudioSession+Configuration.mm
+++ b/webrtc/modules/audio_device/ios/objc/RTCAudioSession+Configuration.mm
@@ -16,12 +16,28 @@
@implementation RTCAudioSession (Configuration)
-- (BOOL)isConfiguredForWebRTC {
- return self.savedConfiguration != nil;
+- (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration
+ error:(NSError **)outError {
+ return [self setConfiguration:configuration
+ active:NO
+ shouldSetActive:NO
+ error:outError];
+}
+
+- (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration
+ active:(BOOL)active
+ error:(NSError **)outError {
+ return [self setConfiguration:configuration
+ active:active
+ shouldSetActive:YES
+ error:outError];
}
+#pragma mark - Private
+
- (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration
active:(BOOL)active
+ shouldSetActive:(BOOL)shouldSetActive
error:(NSError **)outError {
NSParameterAssert(configuration);
if (outError) {
@@ -61,8 +77,22 @@
}
}
- // self.sampleRate is accurate only if the audio session is active.
- if (!self.isActive || self.sampleRate != configuration.sampleRate) {
+ // Sometimes category options don't stick after setting mode.
+ if (self.categoryOptions != configuration.categoryOptions) {
+ NSError *categoryError = nil;
+ if (![self setCategory:configuration.category
+ withOptions:configuration.categoryOptions
+ error:&categoryError]) {
+ RTCLogError(@"Failed to set category options: %@",
+ categoryError.localizedDescription);
+ error = categoryError;
+ } else {
+ RTCLog(@"Set category options to: %ld",
+ (long)configuration.categoryOptions);
+ }
+ }
+
+ if (self.preferredSampleRate != configuration.sampleRate) {
NSError *sampleRateError = nil;
if (![self setPreferredSampleRate:configuration.sampleRate
error:&sampleRateError]) {
@@ -75,9 +105,7 @@
}
}
- // self.IOBufferDuration is accurate only if the audio session is active.
- if (!self.isActive ||
- self.IOBufferDuration != configuration.ioBufferDuration) {
+ if (self.preferredIOBufferDuration != configuration.ioBufferDuration) {
NSError *bufferDurationError = nil;
if (![self setPreferredIOBufferDuration:configuration.ioBufferDuration
error:&bufferDurationError]) {
@@ -90,11 +118,13 @@
}
}
- NSError *activeError = nil;
- if (![self setActive:active error:&activeError]) {
- RTCLogError(@"Failed to setActive to %d: %@",
- active, activeError.localizedDescription);
- error = activeError;
+ if (shouldSetActive) {
+ NSError *activeError = nil;
+ if (![self setActive:active error:&activeError]) {
+ RTCLogError(@"Failed to setActive to %d: %@",
+ active, activeError.localizedDescription);
+ error = activeError;
+ }
}
if (self.isActive &&
@@ -138,84 +168,4 @@
return error == nil;
}
-- (BOOL)configureWebRTCSession:(NSError **)outError {
- if (outError) {
- *outError = nil;
- }
- if (![self checkLock:outError]) {
- return NO;
- }
- RTCLog(@"Configuring audio session for WebRTC.");
-
- if (self.isConfiguredForWebRTC) {
- RTCLogError(@"Already configured.");
- if (outError) {
- *outError =
- [self configurationErrorWithDescription:@"Already configured."];
- }
- return NO;
- }
-
- // Configure the AVAudioSession and activate it.
- // Provide an error even if there isn't one so we can log it.
- NSError *error = nil;
- RTCAudioSessionConfiguration *currentConfig =
- [RTCAudioSessionConfiguration currentConfiguration];
- RTCAudioSessionConfiguration *webRTCConfig =
- [RTCAudioSessionConfiguration webRTCConfiguration];
- self.savedConfiguration = currentConfig;
- if (![self setConfiguration:webRTCConfig active:YES error:&error]) {
- RTCLogError(@"Failed to set WebRTC audio configuration: %@",
- error.localizedDescription);
- [self unconfigureWebRTCSession:nil];
- if (outError) {
- *outError = error;
- }
- return NO;
- }
-
- // Ensure that the device currently supports audio input.
- // TODO(tkchin): Figure out if this is really necessary.
- if (!self.inputAvailable) {
- RTCLogError(@"No audio input path is available!");
- [self unconfigureWebRTCSession:nil];
- if (outError) {
- *outError = [self configurationErrorWithDescription:@"No input path."];
- }
- return NO;
- }
-
- // Give delegates a chance to process the event. In particular, the audio
- // devices listening to this event will initialize their audio units.
- [self notifyDidConfigure];
-
- return YES;
-}
-
-- (BOOL)unconfigureWebRTCSession:(NSError **)outError {
- if (outError) {
- *outError = nil;
- }
- if (![self checkLock:outError]) {
- return NO;
- }
- RTCLog(@"Unconfiguring audio session for WebRTC.");
-
- if (!self.isConfiguredForWebRTC) {
- RTCLogError(@"Already unconfigured.");
- if (outError) {
- *outError =
- [self configurationErrorWithDescription:@"Already unconfigured."];
- }
- return NO;
- }
-
- [self setConfiguration:self.savedConfiguration active:NO error:outError];
- self.savedConfiguration = nil;
-
- [self notifyDidUnconfigure];
-
- return YES;
-}
-
@end

Powered by Google App Engine
This is Rietveld 408576698