From: Edward Hervey Date: Mon, 14 Nov 2022 13:17:25 +0000 (+0100) Subject: urisourcebin: Use a non-buffering multiqueue for non-streamable URI X-Git-Tag: 1.22.0~356 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5702568a7e1c100ee3e3f528461d373c8e820a58;p=platform%2Fupstream%2Fgstreamer.git urisourcebin: Use a non-buffering multiqueue for non-streamable URI Even though buffering is not required, we need to ensure we are dealing with the interleave (if any) before pushing the elementary streams further downstream. Part-of: --- diff --git a/subprojects/gst-plugins-base/gst/playback/gsturisourcebin.c b/subprojects/gst-plugins-base/gst/playback/gsturisourcebin.c index edee933..76b503b 100644 --- a/subprojects/gst-plugins-base/gst/playback/gsturisourcebin.c +++ b/subprojects/gst-plugins-base/gst/playback/gsturisourcebin.c @@ -1048,7 +1048,7 @@ static void setup_multiqueue (GstURISourceBin * urisrc, ChildSrcPadInfo * info, GstElement * multiqueue) { - if (info->use_downloadbuffer) { + if (info->use_downloadbuffer || !urisrc->is_stream) { /* If we have a downloadbuffer we will let that one deal with buffering, and we only use multiqueue for dealing with interleave */ g_object_set (info->multiqueue, "use-buffering", FALSE, NULL); @@ -1092,12 +1092,13 @@ new_output_slot (ChildSrcPadInfo * info, GstPad * originating_pad) /* If a demuxer/parsebin is present, then the downloadbuffer will have been handled before that */ use_downloadbuffer = info->use_downloadbuffer && !info->demuxer; - /* If parsebin is used and buffering is required, we go through a multiqueue */ - if (urisrc->parse_streams && (info->use_queue2 || info->use_downloadbuffer)) { + /* If parsebin is used, we might have to go through a multiqueue */ + if (urisrc->parse_streams && (info->use_queue2 || info->use_downloadbuffer + || !urisrc->is_stream)) { GST_DEBUG_OBJECT (urisrc, "Using multiqueue"); if (!info->multiqueue) { GST_DEBUG_OBJECT (urisrc, - "Creating multiqueue for buffering elementary streams"); + "Creating multiqueue for handling elementary streams"); elem_name = "multiqueue"; info->multiqueue = gst_element_factory_make (elem_name, NULL); if (!info->multiqueue)