[Mesa-dev] [PATCH v3 10/12] gst-decoder.c: advertise support for GstVideoMeta

Carlos Rafael Giani dv at pseudoterminal.org
Wed Apr 26 18:56:22 UTC 2017


From: Nicolas Dufresne <nicolas.dufresne at collabora.com>

This way, upstream decoder the produce frame with special strides and
offsets won't have to copy the frames. This also ensure DMABuf can be
delivered to kmscube.

Signed-off-by: Nicolas Dufresne <nicolas at ndufresne.ca>
---
 gst-decoder.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gst-decoder.c b/gst-decoder.c
index 2001cba..deffad5 100644
--- a/gst-decoder.c
+++ b/gst-decoder.c
@@ -238,11 +238,26 @@ bus_watch_cb(GstBus *bus, GstMessage *msg, gpointer user_data)
 	return TRUE;
 }
 
+static GstPadProbeReturn
+appsink_query_cb(GstPad *pad G_GNUC_UNUSED, GstPadProbeInfo *info,
+	gpointer user_data G_GNUC_UNUSED)
+{
+	GstQuery *query = info->data;
+
+	if (GST_QUERY_TYPE (query) != GST_QUERY_ALLOCATION)
+	  return GST_PAD_PROBE_OK;
+
+	gst_query_add_allocation_meta(query, GST_VIDEO_META_API_TYPE, NULL);
+
+	return GST_PAD_PROBE_HANDLED;
+}
+
 struct decoder *
 video_init(const struct egl *egl, const struct gbm *gbm, const char *filename)
 {
 	struct decoder *dec;
 	GstElement *src, *decodebin;
+	GstPad *pad;
 	GstBus *bus;
 
 	dec = calloc(1, sizeof(*dec));
@@ -257,6 +272,16 @@ video_init(const struct egl *egl, const struct gbm *gbm, const char *filename)
 
 	dec->sink = gst_bin_get_by_name(GST_BIN(dec->pipeline), "sink");
 
+	/* Implement the allocation query using a pad probe. This probe will
+	 * adverstize support for GstVideoMeta, which avoid hardware accelerated
+	 * decoder that produce special strides and offsets from having to
+	 * copy the buffers.
+	 */
+	pad = gst_element_get_static_pad(dec->sink, "sink");
+	gst_pad_add_probe(pad, GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM,
+		appsink_query_cb, NULL, NULL);
+	gst_object_unref(pad);
+
 	src = gst_bin_get_by_name(GST_BIN(dec->pipeline), "src");
 	g_object_set(G_OBJECT(src), "location", filename, NULL);
 	gst_object_unref(src);
-- 
2.7.4



More information about the mesa-dev mailing list