From 0062fdd98daaa23e47afef4d2a65ef5cc8523416 Mon Sep 17 00:00:00 2001
From: Jiangh <jianghao@allwinnertech.com>
Date: Thu, 7 Aug 2025 18:50:00 +0800
Subject: [PATCH] add raw12 format

Scope:
IssueID:
Relation:
---
 sys/v4l2/gstv4l2object.c | 32 +++++++++++++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
index e4fb772..ee699fb 100644
--- a/sys/v4l2/gstv4l2object.c
+++ b/sys/v4l2/gstv4l2object.c
@@ -170,6 +170,10 @@ static const GstV4L2FormatDesc gst_v4l2_formats[] = {
   {V4L2_PIX_FMT_SGBRG10, TRUE, GST_V4L2_RAW},
   {V4L2_PIX_FMT_SGRBG10, TRUE, GST_V4L2_RAW},
   {V4L2_PIX_FMT_SRGGB10, TRUE, GST_V4L2_RAW},
+  {V4L2_PIX_FMT_SBGGR12, TRUE, GST_V4L2_RAW},
+  {V4L2_PIX_FMT_SGBRG12, TRUE, GST_V4L2_RAW},
+  {V4L2_PIX_FMT_SGRBG12, TRUE, GST_V4L2_RAW},
+  {V4L2_PIX_FMT_SRGGB12, TRUE, GST_V4L2_RAW},
 
   /* compressed formats */
   {V4L2_PIX_FMT_MJPEG, FALSE, GST_V4L2_CODEC},
@@ -1126,6 +1130,10 @@ gst_v4l2_object_format_get_rank (const struct v4l2_fmtdesc *fmt)
     case V4L2_PIX_FMT_SGBRG10:
     case V4L2_PIX_FMT_SGRBG10:
     case V4L2_PIX_FMT_SRGGB10:
+    case V4L2_PIX_FMT_SBGGR12:
+    case V4L2_PIX_FMT_SGBRG12:
+    case V4L2_PIX_FMT_SGRBG12:
+    case V4L2_PIX_FMT_SRGGB12:
       rank = BAYER_BASE_RANK;
       break;
 
@@ -1429,6 +1437,10 @@ gst_v4l2_object_v4l2fourcc_is_rgb (guint32 fourcc)
     case V4L2_PIX_FMT_SGBRG10:
     case V4L2_PIX_FMT_SGRBG10:
     case V4L2_PIX_FMT_SRGGB10:
+    case V4L2_PIX_FMT_SBGGR12:
+    case V4L2_PIX_FMT_SGBRG12:
+    case V4L2_PIX_FMT_SGRBG12:
+    case V4L2_PIX_FMT_SRGGB12:
     case V4L2_PIX_FMT_SBGGR8:
     case V4L2_PIX_FMT_SGBRG8:
     case V4L2_PIX_FMT_SGRBG8:
@@ -1578,6 +1590,16 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc)
           fourcc == V4L2_PIX_FMT_SGRBG10 ? "gr10" :
           /* fourcc == V4L2_PIX_FMT_SRGGB8 ? */ "rg10", NULL);
       break;
+    case V4L2_PIX_FMT_SBGGR12:
+    case V4L2_PIX_FMT_SGBRG12:
+    case V4L2_PIX_FMT_SGRBG12:
+    case V4L2_PIX_FMT_SRGGB12:
+      structure = gst_structure_new ("video/x-bayer", "format", G_TYPE_STRING,
+          fourcc == V4L2_PIX_FMT_SBGGR12 ? "bg12" :
+          fourcc == V4L2_PIX_FMT_SGBRG12 ? "gb12" :
+          fourcc == V4L2_PIX_FMT_SGRBG12 ? "gr12" :
+          /* fourcc == V4L2_PIX_FMT_SRGGB12 ? */ "rg12", NULL);
+      break;
     case V4L2_PIX_FMT_SN9C10X:
       structure = gst_structure_new_empty ("video/x-sonix");
       break;
@@ -1947,8 +1969,16 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
           fourcc = V4L2_PIX_FMT_SGBRG10;
         else if (!g_ascii_strcasecmp (format, "gr10"))
           fourcc = V4L2_PIX_FMT_SGRBG10;
-         else if (!g_ascii_strcasecmp (format, "rg"))
+        else if (!g_ascii_strcasecmp (format, "rg10"))
           fourcc = V4L2_PIX_FMT_SRGGB10;
+        else if (!g_ascii_strcasecmp (format, "bg12"))
+          fourcc = V4L2_PIX_FMT_SBGGR12;
+        else if (!g_ascii_strcasecmp (format, "gb12"))
+          fourcc = V4L2_PIX_FMT_SGBRG12;
+        else if (!g_ascii_strcasecmp (format, "gr12"))
+          fourcc = V4L2_PIX_FMT_SGRBG12;
+        else if (!g_ascii_strcasecmp (format, "rg12"))
+          fourcc = V4L2_PIX_FMT_SRGGB12;
       }
     } else if (g_str_equal (mimetype, "video/x-sonix")) {
       fourcc = V4L2_PIX_FMT_SN9C10X;
-- 
2.29.0

