From b0ef98001ffafe17b1e2102d78baf59f24c6d644 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Thu, 10 Mar 2011 19:04:51 +0530 Subject: [PATCH] playbin2: Check if an element accepts requisite caps before selecting In addition to ensuring that an element we want to select in autoplug-select can enter the READY state, we also now check if it can accept the caps we wish to plug it for. This is handy for sinks that need to perform a probe to figure out whether they can actually handle a given format. --- gst/playback/gstplaybin2.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c index 1cd9d5b..05cac2a 100644 --- a/gst/playback/gstplaybin2.c +++ b/gst/playback/gstplaybin2.c @@ -3058,6 +3058,7 @@ autoplug_select_cb (GstElement * decodebin, GstPad * pad, const gchar *klass; GstPlaySinkType type; GstElement **sinkp; + GstPad *sinkpad; playbin = group->playbin; @@ -3130,6 +3131,20 @@ autoplug_select_cb (GstElement * decodebin, GstPad * pad, return GST_AUTOPLUG_SELECT_SKIP; } + if ((sinkpad = gst_element_get_static_pad (element, "sink"))) { + /* Got the sink pad, now let's see if the element actually does accept the + * caps that we have */ + if (!gst_pad_accept_caps (sinkpad, caps)) { + GST_DEBUG_OBJECT (playbin, "%s doesn't accept our caps", + GST_ELEMENT_NAME (element)); + gst_object_unref (sinkpad); + gst_element_set_state (element, GST_STATE_NULL); + gst_object_unref (element); + return GST_AUTOPLUG_SELECT_SKIP; + } + gst_object_unref (sinkpad); + } + /* remember the sink in the group now, the element is floating, we take * ownership now */ GST_SOURCE_GROUP_LOCK (group); -- 2.7.4