urisourcebin: Fix usage of raw and non-raw source provider

The computation in analyze_source was wrong, and would state that the element
has "all raw source pads" if it had at least one.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1029

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3199>
This commit is contained in:
Edward Hervey 2022-10-17 13:01:53 +02:00 committed by GStreamer Marge Bot
parent 4df3da3bab
commit 0c47735c4a

View file

@ -1720,6 +1720,8 @@ analyse_source (GstURISourceBin * urisrc, gboolean * is_raw,
gboolean res = TRUE; gboolean res = TRUE;
GstPad *pad; GstPad *pad;
GValue item = { 0, }; GValue item = { 0, };
guint nb_raw = 0;
guint nb_pads = 0;
GstCaps *rawcaps = DEFAULT_CAPS; GstCaps *rawcaps = DEFAULT_CAPS;
*have_out = FALSE; *have_out = FALSE;
@ -1740,6 +1742,7 @@ analyse_source (GstURISourceBin * urisrc, gboolean * is_raw,
*have_out = FALSE; *have_out = FALSE;
*is_raw = FALSE; *is_raw = FALSE;
*is_dynamic = FALSE; *is_dynamic = FALSE;
nb_pads = nb_raw = 0;
gst_iterator_resync (pads_iter); gst_iterator_resync (pads_iter);
break; break;
case GST_ITERATOR_OK: case GST_ITERATOR_OK:
@ -1754,10 +1757,12 @@ analyse_source (GstURISourceBin * urisrc, gboolean * is_raw,
break; break;
} }
nb_pads++;
/* caps on source pad are all raw, we can add the pad */ /* caps on source pad are all raw, we can add the pad */
if (*is_raw) { if (*is_raw) {
GstPad *output_pad; GstPad *output_pad;
nb_raw++;
GST_URI_SOURCE_BIN_LOCK (urisrc); GST_URI_SOURCE_BIN_LOCK (urisrc);
if (use_queue) { if (use_queue) {
OutputSlotInfo *slot = get_output_slot (urisrc, FALSE, FALSE, NULL); OutputSlotInfo *slot = get_output_slot (urisrc, FALSE, FALSE, NULL);
@ -1808,6 +1813,9 @@ analyse_source (GstURISourceBin * urisrc, gboolean * is_raw,
walk = g_list_next (walk); walk = g_list_next (walk);
} }
if (nb_pads && nb_pads == nb_raw)
*is_raw = TRUE;
return res; return res;
no_slot: no_slot:
{ {