vlc | branch: master | Felix Paul Kühne <[email protected]> | Sat Jan 25 
20:09:16 2014 +0100| [bfa8edd879c2af197092e867f32ce1a202932fe9] | committer: 
Felix Paul Kühne

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

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

 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)

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to