basetransform: Allow going passthrough inside decide_allocation
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 12 Dec 2017 01:58:16 +0000 (20:58 -0500)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Sun, 17 Dec 2017 20:39:51 +0000 (15:39 -0500)
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

index 3a604b8..259cf95 100644 (file)
@@ -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) {