mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-27 02:30:35 +00:00
audiobasesink: Don't wait on gap events
Don't call wait_event() at all for gap events, as basesink will end up waiting for the time that the gap event would be rendered out at the audio device. There's no need to render it at all, just treat it as a handy point to resync the audio if needed, let the ringbuffer render silence, and place the next buffer into the ringbuffer where it belongs. The only thing we really need to do is make sure the ringbuffer and clock are running, and wait for preroll. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2749 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5953>
This commit is contained in:
parent
4950fcc6de
commit
8e923a8e2d
1 changed files with 9 additions and 0 deletions
|
@ -1124,6 +1124,15 @@ gst_audio_base_sink_wait_event (GstBaseSink * bsink, GstEvent * event)
|
|||
/* Make sure the ringbuffer will start again if interrupted during event_wait() */
|
||||
g_atomic_int_set (&sink->eos_rendering, 1);
|
||||
clear_force_start_flag = TRUE;
|
||||
|
||||
/* For gap events, don't actually wait for the clock to
|
||||
* reach that time, or it will drain the ringbuffer, just
|
||||
* ensure we're prerolled and let the next actual buffer
|
||||
* get rendered where it belongs */
|
||||
if (GST_EVENT_TYPE (event) == GST_EVENT_GAP) {
|
||||
ret = gst_base_sink_do_preroll (bsink, GST_MINI_OBJECT_CAST (event));
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue