From cb67f760f0f08ac338496dc79058c46f42ab2319 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Mon, 6 Nov 2023 15:19:33 -0500 Subject: [PATCH] v4l2codecs: Add Rockchip 8bit/10bit 422 formats This enable NV16 and NV16_10LE40 formats. These formats are produced by notably rkvdec driver. Part-of: --- subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.c | 6 ++---- subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.h | 4 +++- .../gst-plugins-bad/sys/v4l2codecs/linux/videodev2.h | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.c index 9b58e7bcc7..717c791c01 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.c @@ -30,10 +30,6 @@ GST_DEBUG_CATEGORY_EXTERN (gstv4l2codecs_debug); #define V4L2_PIX_FMT_NC12 v4l2_fourcc('N', 'C', '1', '2') /* Y/CbCr 4:2:0 (128b cols) */ #endif -#ifndef V4L2_PIX_FMT_NV15 -#define V4L2_PIX_FMT_NV15 v4l2_fourcc('N', 'V', '1', '5') /* 15 Y/CbCr 4:2:0 10-bit packed */ -#endif - typedef struct { guint32 v4l2_pix_fmt; @@ -46,6 +42,8 @@ typedef struct /* *INDENT-OFF* */ /* Keep the same order as GST_V4L2_DEFAULT_VIDEO_FORMATS */ static const GstV4l2FormatDesc gst_v4l2_descriptions[] = { + {V4L2_PIX_FMT_NV20, GST_VIDEO_FORMAT_NV16_10LE40, DRM_FORMAT_INVALID, DRM_FORMAT_MOD_INVALID, 0}, + {V4L2_PIX_FMT_NV16, GST_VIDEO_FORMAT_NV16, DRM_FORMAT_INVALID, DRM_FORMAT_MOD_INVALID, 0}, {V4L2_PIX_FMT_MT2110R, GST_VIDEO_FORMAT_MT2110R, DRM_FORMAT_INVALID, DRM_FORMAT_MOD_INVALID, 0}, {V4L2_PIX_FMT_MT2110T, GST_VIDEO_FORMAT_MT2110T, DRM_FORMAT_INVALID, DRM_FORMAT_MOD_INVALID, 0}, {V4L2_PIX_FMT_NV15_4L4, GST_VIDEO_FORMAT_NV12_10LE40_4L4, DRM_FORMAT_INVALID, DRM_FORMAT_MOD_INVALID, 0}, diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.h b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.h index 7949d0a37d..4012d7dd0f 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.h +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2format.h @@ -23,11 +23,13 @@ #include #include "linux/videodev2.h" -/* +/* * Ordered similar to what libgstvideo does, but keeping tiled formats first, * and prefering bandwidth over alignment (NV12_10LE40 over P010_LE). */ #define GST_V4L2_DEFAULT_VIDEO_FORMATS "{ " \ + "NV16_10LE40, " \ + "NV16, " \ "MT2110R, " \ "MT2110T, " \ "NV12_10LE40_4L4, " \ diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/linux/videodev2.h b/subprojects/gst-plugins-bad/sys/v4l2codecs/linux/videodev2.h index 7947536bd4..9a1e386a4f 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/linux/videodev2.h +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/linux/videodev2.h @@ -611,8 +611,10 @@ struct v4l2_pix_format { /* two planes -- one Y, one Cr + Cb interleaved */ #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ #define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') /* 12 Y/CrCb 4:2:0 */ +#define V4L2_PIX_FMT_NV15 v4l2_fourcc('N', 'V', '1', '5') /* 15 Y/CbCr 4:2:0 10-bit packed */ #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ +#define V4L2_PIX_FMT_NV20 v4l2_fourcc('N', 'V', '2', '0') /* 20 Y/CbCr 4:2:2 10-bit packed */ #define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */ #define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */ #define V4L2_PIX_FMT_P010 v4l2_fourcc('P', '0', '1', '0') /* 24 Y/CbCr 4:2:0 10-bit per component */