From 6a2a5fd44c807ae05a20c057d726ff5605db1522 Mon Sep 17 00:00:00 2001 From: Henry Hoegelow Date: Tue, 27 Sep 2022 09:44:51 +0000 Subject: [PATCH] pulsesink: Fix occasional period of silence on resume According to comment in gst_pulsering_stream_latency_cb, latency updates happen every 100 ms. The code in gst_pulsering_stream_latency_cb does not care about the actual state of the ringbuffer, pbuf->acquired or not. Thus, every 100 ms the ringbuf->segdone may be set, even though the object itself might be in 'destroyed' state. On next gst_pulseringbuffer_acquire the segdone is not touched, so playback may resume with invalid/wrong segdone value. This finally leads to a period of silence playing after resuming the pipeline. The problem was found on 'not-yet-released'-hardware and so far was not reproducible on desktop computer. Removing the callback as long as the ringbuffer is not in 'acquired' state solves the problem reliably on the hardware device that the issue was detected on. Part-of: --- subprojects/gst-plugins-good/ext/pulse/pulsesink.c | 1 + 1 file changed, 1 insertion(+) diff --git a/subprojects/gst-plugins-good/ext/pulse/pulsesink.c b/subprojects/gst-plugins-good/ext/pulse/pulsesink.c index 723d8f95fd..c0ffff388e 100644 --- a/subprojects/gst-plugins-good/ext/pulse/pulsesink.c +++ b/subprojects/gst-plugins-good/ext/pulse/pulsesink.c @@ -323,6 +323,7 @@ gst_pulsering_destroy_stream (GstPulseRingBuffer * pbuf) pa_stream_set_write_callback (pbuf->stream, NULL, NULL); pa_stream_set_underflow_callback (pbuf->stream, NULL, NULL); pa_stream_set_overflow_callback (pbuf->stream, NULL, NULL); + pa_stream_set_latency_update_callback (pbuf->stream, NULL, NULL); pa_stream_unref (pbuf->stream); pbuf->stream = NULL;