]> git.sesse.net Git - vlc/blobdiff - modules/audio_output/audiounit_ios.c
demux: mp4: handle Qt v1 redefined samples tables (fix #12773)
[vlc] / modules / audio_output / audiounit_ios.c
index e00a7e3241d9f075eeb8c18cd206a8c658184328..cd45d10e666f960cdc6e76958407d05ddb8c0f89 100644 (file)
@@ -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"))
@@ -181,7 +182,7 @@ static int StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
 
     status = AudioComponentInstanceNew(p_sys->au_component, &p_sys->au_unit);
     if (status != noErr) {
-        msg_Warn(p_aout, "we cannot open our audio component (%li)", status);
+        msg_Warn(p_aout, "we cannot open our audio component (%i)", (int)status);
         return false;
     }
 
@@ -193,7 +194,7 @@ static int StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
                                   &flag,
                                   sizeof(flag));
     if (status != noErr)
-        msg_Warn(p_aout, "failed to set IO mode (%li)", status);
+        msg_Warn(p_aout, "failed to set IO mode (%i)", (int)status);
 
     /* Get the current format */
     AudioStreamBasicDescription streamDescription;
@@ -219,7 +220,7 @@ static int StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
                                   &streamDescription,
                                   i_param_size);
     if (status != noErr) {
-        msg_Err(p_aout, "failed to set stream format (%li)", status);
+        msg_Err(p_aout, "failed to set stream format (%i)", (int)status);
         return false;
     }
     msg_Dbg(p_aout, STREAM_FORMAT_MSG("we set the AU format: " , streamDescription));
@@ -232,7 +233,7 @@ static int StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
                                   &streamDescription,
                                   &i_param_size);
     if (status != noErr)
-        msg_Warn(p_aout, "failed to verify stream format (%li)", status);
+        msg_Warn(p_aout, "failed to verify stream format (%i)", (int)status);
     msg_Dbg(p_aout, STREAM_FORMAT_MSG("the actual set AU format is " , streamDescription));
 
     /* Do the last VLC aout setups */
@@ -247,14 +248,14 @@ static int StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
                             kAudioUnitScope_Input,
                             0, &callback, sizeof(callback));
     if (status != noErr) {
-        msg_Err(p_aout, "render callback setup failed (%li)", status);
+        msg_Err(p_aout, "render callback setup failed (%i)", (int)status);
         return false;
     }
 
     /* AU init */
     status = AudioUnitInitialize(p_sys->au_unit);
     if (status != noErr) {
-        msg_Err(p_aout, "failed to init AudioUnit (%li)", status);
+        msg_Err(p_aout, "failed to init AudioUnit (%i)", (int)status);
         return false;
     }
 
@@ -272,8 +273,9 @@ static int StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
        AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);
        AudioSessionSetActive(true);
 
+    /* start the unit */
     status = AudioOutputUnitStart(p_sys->au_unit);
-    msg_Dbg(p_aout, "audio output unit started: %li", status);
+    msg_Dbg(p_aout, "audio output unit started: %i", (int)status);
 
     return true;
 }
@@ -288,11 +290,11 @@ static void Stop(audio_output_t *p_aout)
     if (p_sys->au_unit) {
         status = AudioOutputUnitStop(p_sys->au_unit);
         if (status != noErr)
-            msg_Warn(p_aout, "failed to stop AudioUnit (%li)", status);
+            msg_Warn(p_aout, "failed to stop AudioUnit (%i)", (int)status);
 
         status = AudioComponentInstanceDispose(p_sys->au_unit);
         if (status != noErr)
-            msg_Warn(p_aout, "failed to dispose Audio Component instance (%li)", status);
+            msg_Warn(p_aout, "failed to dispose Audio Component instance (%i)", (int)status);
     }
     p_sys->i_bytes_per_sample = 0;
 
@@ -328,10 +330,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)