[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