From 443221c6619395c2f1cc5584ed9d0c321ef68ff5 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Mon, 11 Dec 2017 20:58:16 -0500 Subject: [PATCH] basetransform: Allow going passthrough inside decide_allocation Sub-class may want to decide to go passthrough/in-place by inspecting the support meta APIs. This patch duplicates the check for this mode, so we still don't do uneeded allocation query while we allow sub-classes to switch the behaviour during it's own decide_allocation call. Notice that such sub-class need to reset the class to non-passthrough in set_caps() in order for decide_allocation to be called again. This is needed otherwise we'd be doing an allocation query in element in which it make no sense (notably capsfilter). https://bugzilla.gnome.org/show_bug.cgi?id=791453 --- libs/gst/base/gstbasetransform.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libs/gst/base/gstbasetransform.c b/libs/gst/base/gstbasetransform.c index 3a604b8447..259cf9532b 100644 --- a/libs/gst/base/gstbasetransform.c +++ b/libs/gst/base/gstbasetransform.c @@ -949,6 +949,15 @@ gst_base_transform_do_bufferpool (GstBaseTransform * trans, GstCaps * outcaps) if (!result) goto no_decide_allocation; + /* check again in case the sub-class have switch to passthrough/in-place + * after looking at the meta APIs */ + if (priv->passthrough || priv->always_in_place) { + GST_DEBUG_OBJECT (trans, "no doing passthrough, delay bufferpool"); + gst_base_transform_set_allocation (trans, NULL, NULL, NULL, NULL); + gst_query_unref (query); + return TRUE; + } + /* we got configuration from our peer or the decide_allocation method, * parse them */ if (gst_query_get_n_allocation_params (query) > 0) {