1 // Copyright 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "media/audio/ios/audio_session_util_ios.h" 6 7 #include <AVFoundation/AVFoundation.h> 8 9 #include "base/logging.h" 10 11 namespace media { 12 13 bool InitAudioSessionIOS() { 14 static bool kSessionInitialized = false; 15 static dispatch_once_t once = 0; 16 dispatch_once(&once, ^{ 17 OSStatus error = AudioSessionInitialize(NULL, NULL, NULL, NULL); 18 if (error != kAudioSessionNoError) 19 DLOG(ERROR) << "AudioSessionInitialize OSStatus error: " << error; 20 BOOL result = [[AVAudioSession sharedInstance] 21 setCategory:AVAudioSessionCategoryPlayAndRecord 22 error:nil]; 23 if (!result) 24 DLOG(ERROR) << "AVAudioSession setCategory failed"; 25 UInt32 allowMixing = true; 26 AudioSessionSetProperty( 27 kAudioSessionProperty_OverrideCategoryMixWithOthers, 28 sizeof(allowMixing), &allowMixing); 29 UInt32 defaultToSpeaker = true; 30 AudioSessionSetProperty( 31 kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, 32 sizeof(defaultToSpeaker), 33 &defaultToSpeaker); 34 // Speech input cannot be used if either of these two conditions fail. 35 kSessionInitialized = (error == kAudioSessionNoError) && result; 36 }); 37 return kSessionInitialized; 38 } 39 40 } // namespace media 41