From ba8aa440bb5100e00d9ba85b1a420c0b9c6d352f Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Tue, 1 Aug 2017 09:22:43 -0400 Subject: [PATCH] v4l2bufferpool: Copy flags and timestamp when importing Whenever we import from downstream pool (userptr or dmabuf-import), we should copy over the flags and timestamp, otherwise downstream will not get proper synchronization or will not be able to notice frames that has corruption in it. https://bugzilla.gnome.org/show_bug.cgi?id=785680 --- sys/v4l2/gstv4l2bufferpool.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c index cf8c29e..6ed429b 100644 --- a/sys/v4l2/gstv4l2bufferpool.c +++ b/sys/v4l2/gstv4l2bufferpool.c @@ -1823,12 +1823,20 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf) case GST_V4L2_IO_USERPTR: { struct UserPtrData *data; + GstBuffer *tmp; /* Replace our buffer with downstream allocated buffer */ data = gst_mini_object_steal_qdata (GST_MINI_OBJECT (*buf), GST_V4L2_IMPORT_QUARK); - gst_buffer_replace (buf, data->buffer); + tmp = gst_buffer_ref (data->buffer); _unmap_userptr_frame (data); + + /* Now tmp is writable, copy the flags and timestamp */ + gst_buffer_copy_into (tmp, *buf, + GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1); + + gst_buffer_replace (buf, tmp); + gst_buffer_unref (tmp); break; } @@ -1839,6 +1847,10 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf) /* Replace our buffer with downstream allocated buffer */ tmp = gst_mini_object_steal_qdata (GST_MINI_OBJECT (*buf), GST_V4L2_IMPORT_QUARK); + + gst_buffer_copy_into (tmp, *buf, + GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1); + gst_buffer_replace (buf, tmp); gst_buffer_unref (tmp); break; -- 2.7.4