Re: [PATCH v2] yavta: Add patches form embedded metadata capture

Devarsh Thakkar <[email protected]> Wed, 8 Jul 2026 18:41:02 +0530
Newsgroups org.yoctoproject.lists.meta-arago
Message-ID <[email protected]>
On 08/07/26 17:25, Rishikesh Donadkar wrote:
> Add patches on top of yavta to capture metadata from sensors
> like IMX219.
> 
> This patches are not added in upstream yavta yet because
> embedded data support is not yet functional in the mainline
> Linux kernel
> 
> Signed-off-by: Rishikesh Donadkar <[email protected]>

Reviewed-by: Devarsh Thakkar <[email protected]>

Regards
Devarsh

> ---
>   .../v4l2apps/yavta-arago.inc                  | 10 +++
>   .../yavta/0001-Update-kernel-headers.patch    | 89 +++++++++++++++++++
>   ...et-and-get-metadata-width-and-height.patch | 52 +++++++++++
>   ...support-for-generic-metadata-formats.patch | 42 +++++++++
>   .../yavta/0004-Add-metadata-layout-ctrl.patch | 31 +++++++
>   .../v4l2apps/yavta_%.bbappend                 |  4 +
>   6 files changed, 228 insertions(+)
>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l2apps/yavta-arago.inc
>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0001-Update-kernel-headers.patch
>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0002-Set-and-get-metadata-width-and-height.patch
>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0003-Add-support-for-generic-metadata-formats.patch
>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0004-Add-metadata-layout-ctrl.patch
>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l2apps/yavta_%.bbappend
> 
> diff --git a/meta-arago-extras/recipes-multimedia/v4l2apps/yavta-arago.inc b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta-arago.inc
> new file mode 100644
> index 00000000..ca04b36d
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta-arago.inc
> @@ -0,0 +1,10 @@
> +FILESEXTRAPATHS:prepend := "${THISDIR}/yavta:"
> +
> +SRC_URI:append = " \
> +    file://0001-Update-kernel-headers.patch \
> +    file://0002-Set-and-get-metadata-width-and-height.patch \
> +    file://0003-Add-support-for-generic-metadata-formats.patch \
> +    file://0004-Add-metadata-layout-ctrl.patch \
> +"
> +
> +PR:append = ".arago0"
> diff --git a/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0001-Update-kernel-headers.patch b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0001-Update-kernel-headers.patch
> new file mode 100644
> index 00000000..6e798577
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0001-Update-kernel-headers.patch
> @@ -0,0 +1,89 @@
> +From c4dd8eb96b5d6f6e791fc66752a97b362cd885f2 Mon Sep 17 00:00:00 2001
> +From: Sakari Ailus <[email protected]>
> +Date: Thu, 24 Aug 2023 10:57:07 +0300
> +Subject: [PATCH 1/4] Update kernel headers
> +
> +Update kernel headers to v6.5 media tree + metadata patches.
> +
> +Upstream-Status: Pending
> +Signed-off-by: Sakari Ailus <[email protected]>
> +Signed-off-by: Rishikesh Donadkar <[email protected]>
> +---
> + include/linux/v4l2-controls.h |  1 -
> + include/linux/videodev2.h     | 23 ++++++++++++++++++++++-
> + 2 files changed, 22 insertions(+), 2 deletions(-)
> +
> +diff --git a/include/linux/v4l2-controls.h b/include/linux/v4l2-controls.h
> +index 8a33537..150fa87 100644
> +--- a/include/linux/v4l2-controls.h
> ++++ b/include/linux/v4l2-controls.h
> +@@ -1208,7 +1208,6 @@ enum v4l2_jpeg_chroma_subsampling {
> + #define V4L2_CID_UNIT_CELL_SIZE			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
> + #define V4L2_CID_NOTIFY_GAINS			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9)
> +
> +-
> + /* Image processing controls */
> +
> + #define V4L2_CID_IMAGE_PROC_CLASS_BASE		(V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
> +diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
> +index 397a99e..bb2d05b 100644
> +--- a/include/linux/videodev2.h
> ++++ b/include/linux/videodev2.h
> +@@ -812,6 +812,18 @@ struct v4l2_pix_format {
> + #define V4L2_META_FMT_RK_ISP1_PARAMS	v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 3A Parameters */
> + #define V4L2_META_FMT_RK_ISP1_STAT_3A	v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A Statistics */
> +
> ++/*
> ++ * Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when
> ++ * adding new ones!
> ++ */
> ++#define V4L2_META_FMT_GENERIC_8		v4l2_fourcc('M', 'E', 'T', '8') /* Generic 8-bit metadata */
> ++#define V4L2_META_FMT_GENERIC_CSI2_10	v4l2_fourcc('M', 'E', 'C', 'A') /* 10-bit CSI-2 packed 8-bit metadata */
> ++#define V4L2_META_FMT_GENERIC_CSI2_12	v4l2_fourcc('M', 'E', 'C', 'C') /* 12-bit CSI-2 packed 8-bit metadata */
> ++#define V4L2_META_FMT_GENERIC_CSI2_14	v4l2_fourcc('M', 'E', 'C', 'E') /* 14-bit CSI-2 packed 8-bit metadata */
> ++#define V4L2_META_FMT_GENERIC_CSI2_16	v4l2_fourcc('M', 'E', 'C', 'G') /* 16-bit CSI-2 packed 8-bit metadata */
> ++#define V4L2_META_FMT_GENERIC_CSI2_20	v4l2_fourcc('M', 'E', 'C', 'K') /* 20-bit CSI-2 packed 8-bit metadata */
> ++#define V4L2_META_FMT_GENERIC_CSI2_24	v4l2_fourcc('M', 'E', 'C', 'O') /* 24-bit CSI-2 packed 8-bit metadata */
> ++
> + /* priv field value to indicates that subsequent fields are valid. */
> + #define V4L2_PIX_FMT_PRIV_MAGIC		0xfeedcafe
> +
> +@@ -842,6 +854,7 @@ struct v4l2_fmtdesc {
> + #define V4L2_FMT_FLAG_CSC_YCBCR_ENC		0x0080
> + #define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
> + #define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
> ++#define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
> +
> + 	/* Frame Size and frame rate enumeration */
> + /*
> +@@ -1005,7 +1018,6 @@ struct v4l2_requestbuffers {
> +  *			pointing to this plane
> +  * @fd:			when memory is V4L2_MEMORY_DMABUF, a userspace file
> +  *			descriptor associated with this plane
> +- * @m:			union of @mem_offset, @userptr and @fd
> +  * @data_offset:	offset in the plane to the start of data; usually 0,
> +  *			unless there is a header in front of the data
> +  * @reserved:		drivers and applications must zero this array
> +@@ -2359,10 +2371,19 @@ struct v4l2_sdr_format {
> +  * struct v4l2_meta_format - metadata format definition
> +  * @dataformat:		little endian four character code (fourcc)
> +  * @buffersize:		maximum size in bytes required for data
> ++ * @width:		number of data units of data per line (valid for line
> ++ *			based formats only, see format documentation)
> ++ * @height:		number of lines of data per buffer (valid for line based
> ++ *			formats only)
> ++ * @bytesperline:	offset between the beginnings of two adjacent lines in
> ++ *			bytes (valid for line based formats only)
> +  */
> + struct v4l2_meta_format {
> + 	__u32				dataformat;
> + 	__u32				buffersize;
> ++	__u32				width;
> ++	__u32				height;
> ++	__u32				bytesperline;
> + } __attribute__ ((packed));
> +
> + /**
> +--
> +2.34.1
> +
> diff --git a/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0002-Set-and-get-metadata-width-and-height.patch b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0002-Set-and-get-metadata-width-and-height.patch
> new file mode 100644
> index 00000000..e08ff913
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0002-Set-and-get-metadata-width-and-height.patch
> @@ -0,0 +1,52 @@
> +From 94ea50843fa80fd91f8aa3ef3618310a53f40dc6 Mon Sep 17 00:00:00 2001
> +From: Sakari Ailus <[email protected]>
> +Date: Fri, 9 May 2025 18:43:38 +0300
> +Subject: [PATCH 2/4] Set and get metadata width and height
> +
> +Support getting and setting the width and height fields of the metadata
> +formats. This is required to capture line-based metadata e.g. from camera
> +sensors.
> +
> +Upstream-Status: Pending
> +Signed-off-by: Sakari Ailus <[email protected]>
> +Signed-off-by: Rishikesh Donadkar <[email protected]>
> +---
> + yavta.c | 13 ++++++++-----
> + 1 file changed, 8 insertions(+), 5 deletions(-)
> +
> +diff --git a/yavta.c b/yavta.c
> +index ba94bfa..25b95e7 100644
> +--- a/yavta.c
> ++++ b/yavta.c
> +@@ -889,13 +889,14 @@ static int video_get_format(struct device *dev)
> + 				fmt.fmt.pix_mp.plane_fmt[i].sizeimage);
> + 		}
> + 	} else if (video_is_meta(dev)) {
> +-		dev->width = 0;
> +-		dev->height = 0;
> ++		dev->width = fmt.fmt.meta.width;
> ++		dev->height = fmt.fmt.meta.height;
> + 		dev->num_planes = 1;
> +
> +-		printf("Meta-data format: %s (%08x) buffer size %u\n",
> +-			v4l2_format_name(fmt.fmt.meta.dataformat), fmt.fmt.meta.dataformat,
> +-					 fmt.fmt.meta.buffersize);
> ++		printf("Meta-data format: %s (%08x) %ux%u buffer size %u\n",
> ++		       v4l2_format_name(fmt.fmt.meta.dataformat),
> ++		       fmt.fmt.meta.dataformat, fmt.fmt.meta.width,
> ++		       fmt.fmt.meta.height, fmt.fmt.meta.buffersize);
> + 	} else {
> + 		dev->width = fmt.fmt.pix.width;
> + 		dev->height = fmt.fmt.pix.height;
> +@@ -951,6 +952,8 @@ static int video_set_format(struct device *dev, unsigned int w, unsigned int h,
> + 	} else if (video_is_meta(dev)) {
> + 		fmt.fmt.meta.dataformat = format;
> + 		fmt.fmt.meta.buffersize = buffer_size;
> ++		fmt.fmt.meta.width = w;
> ++		fmt.fmt.meta.height = h;
> + 	} else {
> + 		fmt.fmt.pix.width = w;
> + 		fmt.fmt.pix.height = h;
> +--
> +2.34.1
> +
> diff --git a/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0003-Add-support-for-generic-metadata-formats.patch b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0003-Add-support-for-generic-metadata-formats.patch
> new file mode 100644
> index 00000000..3728e5b5
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0003-Add-support-for-generic-metadata-formats.patch
> @@ -0,0 +1,42 @@
> +From a4f5a948d05827d95ff2f73a997fd3cdba46d2bf Mon Sep 17 00:00:00 2001
> +From: Sakari Ailus <[email protected]>
> +Date: Thu, 24 Aug 2023 11:08:56 +0300
> +Subject: [PATCH 3/4] Add support for generic metadata formats
> +
> +Upstream-Status: Pending
> +Signed-off-by: Sakari Ailus <[email protected]>
> +Signed-off-by: Rishikesh Donadkar <[email protected]>
> +---
> + yavta.c | 9 +++++++++
> + 1 file changed, 9 insertions(+)
> +
> +diff --git a/yavta.c b/yavta.c
> +index 25b95e7..6a494da 100644
> +--- a/yavta.c
> ++++ b/yavta.c
> +@@ -340,6 +340,7 @@ static const struct v4l2_format_info {
> + 	unsigned int fourcc;
> + 	unsigned char n_planes;
> + } pixel_formats[] = {
> ++	/* Pixel data formats */
> + 	{ "RGB332", V4L2_PIX_FMT_RGB332, 1 },
> + 	{ "RGB444", V4L2_PIX_FMT_RGB444, 1 },
> + 	{ "ARGB444", V4L2_PIX_FMT_ARGB444, 1 },
> +@@ -424,6 +425,14 @@ static const struct v4l2_format_info {
> + 	{ "DV", V4L2_PIX_FMT_DV, 1 },
> + 	{ "MJPEG", V4L2_PIX_FMT_MJPEG, 1 },
> + 	{ "MPEG", V4L2_PIX_FMT_MPEG, 1 },
> ++	/* Metadata formats */
> ++	{ "GENERIC_8", V4L2_META_FMT_GENERIC_8, 1 },
> ++	{ "GENERIC_CSI2_10", V4L2_META_FMT_GENERIC_CSI2_10, 1 },
> ++	{ "GENERIC_CSI2_12", V4L2_META_FMT_GENERIC_CSI2_12, 1 },
> ++	{ "GENERIC_CSI2_14", V4L2_META_FMT_GENERIC_CSI2_14, 1 },
> ++	{ "GENERIC_CSI2_16", V4L2_META_FMT_GENERIC_CSI2_16, 1 },
> ++	{ "GENERIC_CSI2_20", V4L2_META_FMT_GENERIC_CSI2_20, 1 },
> ++	{ "GENERIC_CSI2_24", V4L2_META_FMT_GENERIC_CSI2_24, 1 },
> + };
> +
> + static void list_formats(void)
> +--
> +2.34.1
> +
> diff --git a/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0004-Add-metadata-layout-ctrl.patch b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0004-Add-metadata-layout-ctrl.patch
> new file mode 100644
> index 00000000..cf0a4bf9
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta/0004-Add-metadata-layout-ctrl.patch
> @@ -0,0 +1,31 @@
> +From 7d5fc4a3b0982fdc894c946d16fc7152d7da8b30 Mon Sep 17 00:00:00 2001
> +From: Rishikesh Donadkar <[email protected]>
> +Date: Tue, 7 Jul 2026 13:28:41 +0530
> +Subject: [PATCH 4/4] Add metadata layout ctrl
> +
> +Add V4L2_CID_METADATA_LAYOUT ctrl
> +
> +Upstream-Status: Pending
> +Signed-off-by: Rishikesh Donadkar <[email protected]>
> +---
> + include/linux/v4l2-controls.h | 4 ++++
> + 1 file changed, 4 insertions(+)
> +
> +diff --git a/include/linux/v4l2-controls.h b/include/linux/v4l2-controls.h
> +index 150fa87..32291d3 100644
> +--- a/include/linux/v4l2-controls.h
> ++++ b/include/linux/v4l2-controls.h
> +@@ -1208,6 +1208,10 @@ enum v4l2_jpeg_chroma_subsampling {
> + #define V4L2_CID_UNIT_CELL_SIZE			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
> + #define V4L2_CID_NOTIFY_GAINS			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9)
> +
> ++#define V4L2_CID_METADATA_LAYOUT		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 12)
> ++#define V4L2_METADATA_LAYOUT_CCS		1U
> ++
> ++
> + /* Image processing controls */
> +
> + #define V4L2_CID_IMAGE_PROC_CLASS_BASE		(V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
> +--
> +2.34.1
> +
> diff --git a/meta-arago-extras/recipes-multimedia/v4l2apps/yavta_%.bbappend b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta_%.bbappend
> new file mode 100644
> index 00000000..602fd07f
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l2apps/yavta_%.bbappend
> @@ -0,0 +1,4 @@
> +YAVTA_ARAGO = ""
> +YAVTA_ARAGO:arago = "yavta-arago.inc"
> +
> +require ${YAVTA_ARAGO}