From: Thiago Santos Date: Tue, 11 Aug 2015 11:07:53 +0000 (-0300) Subject: basetransform: respect accept-caps intersect flag X-Git-Tag: 1.6.1~67 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7ec54c2217ad1c1c00b616e9644d33902df802fb;p=platform%2Fupstream%2Fgstreamer.git basetransform: respect accept-caps intersect flag GstPad has a flag for suggesting if the accept-caps query should use intersect instead of the default subset caps operation to verify if the caps would be acceptable. basetransform currently always uses the subset check and this patch makes it honor the flag for using intersect if it is set. https://bugzilla.gnome.org/show_bug.cgi?id=748635 --- diff --git a/libs/gst/base/gstbasetransform.c b/libs/gst/base/gstbasetransform.c index 41b0fba..f6e0c0c 100644 --- a/libs/gst/base/gstbasetransform.c +++ b/libs/gst/base/gstbasetransform.c @@ -1289,8 +1289,13 @@ gst_base_transform_acceptcaps_default (GstBaseTransform * trans, GstPad *otherpad; GstCaps *othercaps = NULL; #endif + GstPad *pad; gboolean ret = TRUE; + pad = + (direction == + GST_PAD_SINK) ? GST_BASE_TRANSFORM_SINK_PAD (trans) : + GST_BASE_TRANSFORM_SRC_PAD (trans); #if 0 otherpad = (pad == trans->srcpad) ? trans->sinkpad : trans->srcpad; @@ -1304,11 +1309,7 @@ gst_base_transform_acceptcaps_default (GstBaseTransform * trans, GST_DEBUG_OBJECT (trans, "accept caps %" GST_PTR_FORMAT, caps); /* get all the formats we can handle on this pad */ - if (direction == GST_PAD_SRC) - allowed = gst_pad_query_caps (trans->srcpad, caps); - else - allowed = gst_pad_query_caps (trans->sinkpad, caps); - + allowed = gst_pad_query_caps (pad, caps); if (!allowed) { GST_DEBUG_OBJECT (trans, "gst_pad_query_caps() failed"); goto no_transform_possible; @@ -1317,7 +1318,16 @@ gst_base_transform_acceptcaps_default (GstBaseTransform * trans, GST_DEBUG_OBJECT (trans, "allowed caps %" GST_PTR_FORMAT, allowed); /* intersect with the requested format */ - ret = gst_caps_is_subset (caps, allowed); + if (GST_PAD_IS_ACCEPT_INTERSECT (pad)) { + GST_DEBUG_OBJECT (pad, + "allowed caps intersect %" GST_PTR_FORMAT ", caps %" GST_PTR_FORMAT, + allowed, caps); + ret = gst_caps_can_intersect (caps, allowed); + } else { + GST_DEBUG_OBJECT (pad, "allowed caps subset %" GST_PTR_FORMAT ", caps %" + GST_PTR_FORMAT, allowed, caps); + ret = gst_caps_is_subset (caps, allowed); + } gst_caps_unref (allowed); if (!ret)