From 44dabe21d95e2685ac2a7b37a5457130f41b4c22 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Mon, 4 Dec 2017 11:52:16 -0500 Subject: [PATCH] kmssink: Fix CropMeta support We copy the meta's from the original buffer to the wrapper or copied buffer. https://bugzilla.gnome.org/show_bug.cgi?id=790473 --- sys/kms/gstkmssink.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c index fec6c28285..e9baf2f3eb 100644 --- a/sys/kms/gstkmssink.c +++ b/sys/kms/gstkmssink.c @@ -1369,11 +1369,18 @@ gst_kms_sink_get_input_buffer (GstKMSSink * self, GstBuffer * inbuf) return gst_buffer_ref (inbuf); if (gst_kms_sink_import_dmabuf (self, inbuf, &buf)) - return buf; + goto done; GST_CAT_INFO_OBJECT (CAT_PERFORMANCE, self, "frame copy"); + buf = gst_kms_sink_copy_to_dumb_buffer (self, inbuf); - return gst_kms_sink_copy_to_dumb_buffer (self, inbuf); +done: + /* Copy all the non-memory related metas, this way CropMeta will be + * available upon GstVideoOverlay::expose calls. */ + if (buf) + gst_buffer_copy_into (buf, inbuf, GST_BUFFER_COPY_METADATA, 0, -1); + + return buf; } static GstFlowReturn @@ -1398,6 +1405,9 @@ gst_kms_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf) else if (self->last_buffer) buffer = gst_buffer_ref (self->last_buffer); + /* Make sure buf is not used accidentally */ + buf = NULL; + if (!buffer) return GST_FLOW_ERROR; fb_id = gst_kms_memory_get_fb_id (gst_buffer_peek_memory (buffer, 0));