Home | History | Annotate | Download | only in ios
      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