From: Sebastian Dröge Date: Fri, 18 Feb 2011 16:26:53 +0000 (+0100) Subject: playbin2: If a sink claims to support ANY caps assume that it only supports the usual... X-Git-Tag: 1.19.3~511^2~6555^2~1139 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0e3c32ac72c2dd62de05c815ce90e38b4a484b5f;p=platform%2Fupstream%2Fgstreamer.git playbin2: If a sink claims to support ANY caps assume that it only supports the usual raw formats This should be changed again in 0.11, if a sink really claims to support ANY caps it should support everything or provide correct caps. --- diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c index 5eaae69..2f2a42e 100644 --- a/gst/playback/gstplaybin2.c +++ b/gst/playback/gstplaybin2.c @@ -2924,6 +2924,10 @@ autoplug_factories_cb (GstElement * decodebin, GstPad * pad, /* autoplug-continue decides, if a pad has raw caps that can be exposed * directly or if further decoding is necessary. We use this to expose * supported subtitles directly */ + +/* FIXME 0.11: Remove the checks for ANY caps, a sink should specify + * explicitely the caps it supports and if it claims to support ANY + * caps it really should support everything */ static gboolean autoplug_continue_cb (GstElement * element, GstPad * pad, GstCaps * caps, GstSourceGroup * group) @@ -2938,7 +2942,11 @@ autoplug_continue_cb (GstElement * element, GstPad * pad, GstCaps * caps, if ((sink = group->playbin->text_sink)) sinkpad = gst_element_get_static_pad (sink, "sink"); if (sinkpad) { - ret = !gst_pad_accept_caps (sinkpad, caps); + GstCaps *sinkcaps = gst_pad_get_caps_reffed (sinkpad); + + if (!gst_caps_is_any (sinkcaps)) + ret = !gst_pad_accept_caps (sinkpad, caps); + gst_caps_unref (sinkcaps); gst_object_unref (sinkpad); } else { GstCaps *subcaps = gst_subtitle_overlay_create_factory_caps (); @@ -2951,7 +2959,11 @@ autoplug_continue_cb (GstElement * element, GstPad * pad, GstCaps * caps, if ((sink = group->playbin->audio_sink)) { sinkpad = gst_element_get_static_pad (sink, "sink"); if (sinkpad) { - ret = !gst_pad_accept_caps (sinkpad, caps); + GstCaps *sinkcaps = gst_pad_get_caps_reffed (sinkpad); + + if (!gst_caps_is_any (sinkcaps)) + ret = !gst_pad_accept_caps (sinkpad, caps); + gst_caps_unref (sinkcaps); gst_object_unref (sinkpad); } } @@ -2961,7 +2973,11 @@ autoplug_continue_cb (GstElement * element, GstPad * pad, GstCaps * caps, if ((sink = group->playbin->video_sink)) { sinkpad = gst_element_get_static_pad (sink, "sink"); if (sinkpad) { - ret = !gst_pad_accept_caps (sinkpad, caps); + GstCaps *sinkcaps = gst_pad_get_caps_reffed (sinkpad); + + if (!gst_caps_is_any (sinkcaps)) + ret = !gst_pad_accept_caps (sinkpad, caps); + gst_caps_unref (sinkcaps); gst_object_unref (sinkpad); } }