From 7ec54c2217ad1c1c00b616e9644d33902df802fb Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 11 Aug 2015 08:07:53 -0300 Subject: [PATCH] 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 --- libs/gst/base/gstbasetransform.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) 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) -- 2.7.4