]> git.sesse.net Git - vlc/commitdiff
audiounit: run an AudioSession when outputting media content, so the user is able...
authorFelix Paul Kühne <fkuehne@videolan.org>
Sat, 9 Mar 2013 17:48:05 +0000 (18:48 +0100)
committerFelix Paul Kühne <fkuehne@videolan.org>
Thu, 4 Apr 2013 17:35:17 +0000 (19:35 +0200)
modules/audio_output/audiounit_ios.c

index e0f969309a3c9ba82ee1970a1d6d3ab38a1a64b4..4763cb79e593e9e1e896e6112c3bc227c9818048 100644 (file)
@@ -258,6 +258,17 @@ static int StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
         return false;
     }
 
         return false;
     }
 
+    /* start audio session so playback continues if mute switch is on */
+    AudioSessionInitialize (NULL,
+                            kCFRunLoopCommonModes,
+                            NULL,
+                            NULL);
+
+       /* Set audio session to mediaplayback */
+       UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
+       AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);
+       AudioSessionSetActive(true);
+
     /* setup circular buffer */
     TPCircularBufferInit(&p_sys->circular_buffer, kBufferLength);
 
     /* setup circular buffer */
     TPCircularBufferInit(&p_sys->circular_buffer, kBufferLength);
 
@@ -274,6 +285,8 @@ static void Stop(audio_output_t *p_aout)
     struct aout_sys_t   *p_sys = p_aout->sys;
     OSStatus status;
 
     struct aout_sys_t   *p_sys = p_aout->sys;
     OSStatus status;
 
+    AudioSessionSetActive(false);
+
     if (p_sys->au_unit) {
         status = AudioOutputUnitStop(p_sys->au_unit);
         if (status != noErr)
     if (p_sys->au_unit) {
         status = AudioOutputUnitStop(p_sys->au_unit);
         if (status != noErr)
@@ -331,10 +344,13 @@ static void Pause (audio_output_t *p_aout, bool pause, mtime_t date)
     struct aout_sys_t * p_sys = p_aout->sys;
     VLC_UNUSED(date);
 
     struct aout_sys_t * p_sys = p_aout->sys;
     VLC_UNUSED(date);
 
-    if (pause)
+    if (pause) {
         AudioOutputUnitStop(p_sys->au_unit);
         AudioOutputUnitStop(p_sys->au_unit);
-    else
+        AudioSessionSetActive(false);
+    } else {
         AudioOutputUnitStart(p_sys->au_unit);
         AudioOutputUnitStart(p_sys->au_unit);
+        AudioSessionSetActive(true);
+    }
 }
 
 static void Flush(audio_output_t *p_aout, bool wait)
 }
 
 static void Flush(audio_output_t *p_aout, bool wait)