[vlc-commits] audiounit_ios: fix audio unit handling in pause state (close #10480)

Felix Paul Kühne git at videolan.org
Sat Jan 25 20:10:48 CET 2014


vlc/vlc-2.1 | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Sat Jan 25 20:09:16 2014 +0100| [d25f9b77ef06f5ca743f8ce9e940a581e13a65e8] | committer: Felix Paul Kühne

audiounit_ios: fix audio unit handling in pause state (close #10480)

(cherry picked from commit bfa8edd879c2af197092e867f32ce1a202932fe9)

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.1.git/?a=commit;h=d25f9b77ef06f5ca743f8ce9e940a581e13a65e8
---

 modules/audio_output/audiounit_ios.c |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/modules/audio_output/audiounit_ios.c b/modules/audio_output/audiounit_ios.c
index e00a7e3..1408dc5 100644
--- a/modules/audio_output/audiounit_ios.c
+++ b/modules/audio_output/audiounit_ios.c
@@ -88,6 +88,7 @@ static void     Flush                   (audio_output_t *, bool);
 static int      TimeGet                 (audio_output_t *, mtime_t *);
 static OSStatus RenderCallback    (vlc_object_t *, AudioUnitRenderActionFlags *, const AudioTimeStamp *,
                                          UInt32 , UInt32, AudioBufferList *);
+
 vlc_module_begin ()
     set_shortname("audiounit_ios")
     set_description(N_("AudioUnit output for iOS"))
@@ -328,10 +329,21 @@ static void Pause (audio_output_t *p_aout, bool pause, mtime_t date)
     p_sys->b_paused = pause;
     vlc_mutex_unlock(&p_sys->lock);
 
-    if (pause)
+    /* we need to start / stop the audio unit here because otherwise
+     * the OS won't believe us that we stopped the audio output
+     * so in case of an interruption, our unit would be permanently
+     * silenced.
+     * in case of multi-tasking, the multi-tasking view would still
+     * show a playing state despite we are paused, same for lock screen */
+    if (pause) {
+        AudioOutputUnitStop(p_sys->au_unit);
         AudioSessionSetActive(false);
-    else
+    } else {
+        AudioOutputUnitStart(p_sys->au_unit);
+        UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
+        AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);
         AudioSessionSetActive(true);
+    }
 }
 
 static void Flush(audio_output_t *p_aout, bool wait)



More information about the vlc-commits mailing list