coreaudio: fix invalid delay after a unpause
authorThomas Guillem <thomas@gllm.fr>
Fri, 22 May 2020 18:26:02 +0000 (20:26 +0200)
committerThomas Guillem <thomas@gllm.fr>
Sun, 24 May 2020 18:59:35 +0000 (20:59 +0200)
The render host time was not updated while paused.

This caused the first time_get(), after a unpause, to return a delay way too
early (corresponding to the pause time). This could happen only when the ca
render callback was not triggered between an unpause and a time_get.

This invalid delay caused the insertion of a long silence, that was not
interruptible, hence the impression of a deadlock.

Fixes #24668

modules/audio_output/coreaudio_common.c

index 5f8a633..70811aa 100644 (file)
@@ -139,7 +139,13 @@ ca_Render(audio_output_t *p_aout, uint32_t i_frames, uint64_t i_host_time,
         vlc_sem_post(&p_sys->flush_sem);
     }
 
         vlc_sem_post(&p_sys->flush_sem);
     }
 
-    if (p_sys->b_paused || unlikely(p_sys->i_first_render_host_time == 0))
+    if (p_sys->b_paused)
+    {
+        p_sys->i_render_host_time = i_host_time;
+        goto drop;
+    }
+
+    if (unlikely(p_sys->i_first_render_host_time == 0))
         goto drop;
 
     /* Start deferred: write silence (zeros) until we reach the first render
         goto drop;
 
     /* Start deferred: write silence (zeros) until we reach the first render