From 7f78f7f9e387759c362388a991094da6b6ba715e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 30 Mar 2013 12:15:38 +0100 Subject: [PATCH] playbin: Ignore caps from audio/video sink factories if there are fixed sinks already --- gst/playback/gstplaybin2.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c index 502479221e..ad02c891f2 100644 --- a/gst/playback/gstplaybin2.c +++ b/gst/playback/gstplaybin2.c @@ -3649,6 +3649,7 @@ autoplug_query_cb (GstElement * uridecodebin, GstPad * pad, GstQuery * query, GstPad *sinkpad = NULL; GValueArray *factories; gint i, n; + gboolean have_audio_sink = FALSE, have_video_sink = FALSE; if (GST_QUERY_TYPE (query) != GST_QUERY_CAPS) return FALSE; @@ -3714,6 +3715,7 @@ autoplug_query_cb (GstElement * uridecodebin, GstPad * pad, GstQuery * query, } gst_object_unref (sinkpad); } + have_audio_sink = TRUE; } if ((sink = group->video_sink)) { @@ -3738,6 +3740,7 @@ autoplug_query_cb (GstElement * uridecodebin, GstPad * pad, GstQuery * query, } gst_object_unref (sinkpad); } + have_video_sink = TRUE; } factories = autoplug_factories_cb (uridecodebin, pad, NULL, group); @@ -3749,10 +3752,20 @@ autoplug_query_cb (GstElement * uridecodebin, GstPad * pad, GstQuery * query, const GList *l; GstCaps *templ_caps; - if (!gst_element_factory_list_is_type (GST_ELEMENT_FACTORY_CAST (factory), + if (!gst_element_factory_list_is_type (factory, GST_ELEMENT_FACTORY_TYPE_SINK)) continue; + if (have_audio_sink + && gst_element_factory_list_is_type (factory, + GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO)) + continue; + if (have_video_sink + && gst_element_factory_list_is_type (factory, + GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO | + GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE)) + continue; + templates = gst_element_factory_get_static_pad_templates (factory); for (l = templates; l; l = l->next) {