input-selector: Use proper segments when cleaning cached buffers

We need to use the segment associated with the cached buffer, not the
current segment of the pad, otherwise we miscalculate the running time
of cached buffers from before a segment change.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/859>
This commit is contained in:
Jan Alexander Steffens (heftig) 2021-07-23 16:20:20 +02:00 committed by GStreamer Marge Bot
parent 408a3bfcf2
commit 97601e49cb

View file

@ -914,7 +914,6 @@ gst_input_selector_cleanup_old_cached_buffers (GstInputSelector * sel,
GST_DEBUG_OBJECT (sel, "Cleaning up old cached buffers"); GST_DEBUG_OBJECT (sel, "Cleaning up old cached buffers");
for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) { for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) {
GstSelectorPad *selpad; GstSelectorPad *selpad;
GstSegment *seg;
GstSelectorPadCachedBuffer *cached_buffer; GstSelectorPadCachedBuffer *cached_buffer;
GSList *maybe_remove; GSList *maybe_remove;
guint queue_position; guint queue_position;
@ -923,13 +922,12 @@ gst_input_selector_cleanup_old_cached_buffers (GstInputSelector * sel,
if (!selpad->cached_buffers) if (!selpad->cached_buffers)
continue; continue;
seg = &selpad->segment;
maybe_remove = NULL; maybe_remove = NULL;
queue_position = 0; queue_position = 0;
while ((cached_buffer = g_queue_peek_nth (selpad->cached_buffers, while ((cached_buffer = g_queue_peek_nth (selpad->cached_buffers,
queue_position))) { queue_position))) {
GstBuffer *buffer = cached_buffer->buffer; GstBuffer *buffer = cached_buffer->buffer;
GstSegment *seg = &cached_buffer->segment;
GstClockTime running_time; GstClockTime running_time;
GSList *l; GSList *l;