linuxOS_AP06/buildroot/package/gstreamer1/gst1-plugins-good/0013-HACK-v4l2src-Support-bypassing-buf-cache-cleaning.patch
2025-06-03 12:28:32 +08:00

59 lines
1.9 KiB
Diff

From 97236cb80ebc96198ea6cae7b62a9183c8255d7b Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
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 <jeffy.chen@rock-chips.com>
---
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