From 97236cb80ebc96198ea6cae7b62a9183c8255d7b Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Wed, 3 Jul 2024 17:18:59 +0800 Subject: [PATCH 13/13] HACK: v4l2src: Support bypassing buf cache cleaning Set env GST_V4L2SRC_NO_CACHE_CLEAN=1. Signed-off-by: Jeffy Chen --- sys/v4l2/gstv4l2bufferpool.c | 2 ++ sys/v4l2/gstv4l2bufferpool.h | 2 ++ sys/v4l2/gstv4l2src.c | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c index 58c2099..3df189e 100644 --- a/sys/v4l2/gstv4l2bufferpool.c +++ b/sys/v4l2/gstv4l2bufferpool.c @@ -1173,6 +1173,8 @@ gst_v4l2_buffer_pool_qbuf (GstV4l2BufferPool * pool, GstBuffer * buf, group->buffer.field = field; } + group->buffer.flags |= pool->extra_buf_flags; + if (frame_number) { group->buffer.timestamp.tv_sec = *frame_number; group->buffer.timestamp.tv_usec = 0; diff --git a/sys/v4l2/gstv4l2bufferpool.h b/sys/v4l2/gstv4l2bufferpool.h index db8c554..c63c9ed 100644 --- a/sys/v4l2/gstv4l2bufferpool.h +++ b/sys/v4l2/gstv4l2bufferpool.h @@ -97,6 +97,8 @@ struct _GstV4l2BufferPool /* Control to warn only once on buggy feild driver bug */ gboolean has_warned_on_buggy_field; + + guint32 extra_buf_flags; }; struct _GstV4l2BufferPoolClass diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c index ddd4c9d..9cd8608 100644 --- a/sys/v4l2/gstv4l2src.c +++ b/sys/v4l2/gstv4l2src.c @@ -1210,6 +1210,10 @@ gst_v4l2src_create (GstPushSrc * src, GstBuffer ** buf) { GstV4l2BufferPool *obj_pool = GST_V4L2_BUFFER_POOL_CAST (gst_v4l2_object_get_buffer_pool (obj)); + + if (g_getenv("GST_V4L2SRC_NO_CACHE_CLEAN")) + obj_pool->extra_buf_flags |= V4L2_BUF_FLAG_NO_CACHE_CLEAN; + ret = gst_v4l2_buffer_pool_process (obj_pool, buf, NULL); if (obj_pool) gst_object_unref (obj_pool); -- 2.20.1