From faa6b852b08980ebce06f1fbc6fc1828e3a35328 Mon Sep 17 00:00:00 2001
From: Jiangh <jianghao@allwinnertech.com>
Date: Thu, 7 Aug 2025 18:47:26 +0800
Subject: [PATCH] support sun-vin merge

Scope:
IssueID:
Relation:
---
 sys/v4l2/ext/videodev2.h | 3 +++
 sys/v4l2/v4l2_calls.c    | 6 ++++++
 2 files changed, 9 insertions(+)

diff --git a/sys/v4l2/ext/videodev2.h b/sys/v4l2/ext/videodev2.h
index 24832ee..ff27400 100644
--- a/sys/v4l2/ext/videodev2.h
+++ b/sys/v4l2/ext/videodev2.h
@@ -2599,6 +2599,9 @@ struct v4l2_create_buffers {
 
 #define BASE_VIDIOC_PRIVATE	192		/* 192-255 are private */
 
+#define VIDIOC_SET_DMA_MERGE \
+	_IOWR('V', BASE_VIDIOC_PRIVATE + 50, unsigned char)
+
 /* Deprecated definitions kept for backwards compatibility */
 #define V4L2_PIX_FMT_HM12 V4L2_PIX_FMT_NV12_16L16
 #define V4L2_PIX_FMT_SUNXI_TILED_NV12 V4L2_PIX_FMT_NV12_32L32
diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
index cdc4092..ad8ccb9 100644
--- a/sys/v4l2/v4l2_calls.c
+++ b/sys/v4l2/v4l2_calls.c
@@ -521,6 +521,7 @@ gst_v4l2_open (GstV4l2Object * v4l2object, GstV4l2Error * error)
   struct stat st;
   int libv4l2_fd = -1;
   struct v4l2_input inp;
+  char dma_merge_mode = 1;
   int sel = 0;
 
   GST_DEBUG_OBJECT (v4l2object->dbg_obj, "Trying to open device %s",
@@ -547,6 +548,11 @@ gst_v4l2_open (GstV4l2Object * v4l2object, GstV4l2Error * error)
   if (!GST_V4L2_IS_OPEN (v4l2object))
     goto not_open;
 
+  if (-1 == ioctl(v4l2object->video_fd, VIDIOC_SET_DMA_MERGE, &dma_merge_mode)) {
+      GST_ERROR_OBJECT(v4l2object->dbg_obj,"VIDIOC_SET_DMA_MERGE error!\n");
+      return -1;
+  }
+
   inp.index = sel;
   if (-1 == ioctl(v4l2object->video_fd, VIDIOC_S_INPUT, &inp)) {
       GST_ERROR_OBJECT(v4l2object->dbg_obj,"VIDIOC_S_INPUT %d error!\n", sel);
-- 
2.29.0

