diff mbox series

[yavta,1/1] Print V4L2 fourcc code in format enumeration

Message ID 20240425210815.1820591-1-sakari.ailus@linux.intel.com
State New
Headers show
Series [yavta,1/1] Print V4L2 fourcc code in format enumeration | expand

Commit Message

Sakari Ailus April 25, 2024, 9:08 p.m. UTC
Also print the V4L2 fourcc code in format enumeration (--enum-formats).

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 yavta.c | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

Comments

Laurent Pinchart May 2, 2024, 10:53 p.m. UTC | #1
Hi Sakari,

Thank you for the patch.

On Fri, Apr 26, 2024 at 12:08:15AM +0300, Sakari Ailus wrote:
> Also print the V4L2 fourcc code in format enumeration (--enum-formats).
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
>  yavta.c | 27 +++++++++++++++++++--------
>  1 file changed, 19 insertions(+), 8 deletions(-)

This doesn't apply cleanly.

> 
> diff --git a/yavta.c b/yavta.c
> index b2283aed09cb..2153e8b5775f 100644
> --- a/yavta.c
> +++ b/yavta.c
> @@ -370,6 +370,18 @@ static struct v4l2_format_info {
>  	{ "GENERIC_CSI2_24", V4L2_META_FMT_GENERIC_CSI2_24, 1 },
>  };
>  
> +void v4l2_format_fourcc(__u32 fourcc, char name[5])
> +{
> +	unsigned int i;
> +
> +	for (i = 0; i < 4; ++i) {
> +		name[i] = fourcc & 0xff;

While at it, could we handle non-printable characters better ?

> +		fourcc >>= 8;
> +	}
> +
> +	name[4] = '\0';
> +}
> +
>  static void list_formats(void)
>  {
>  	unsigned int i;
> @@ -412,18 +424,13 @@ static const char *v4l2_format_name(unsigned int fourcc)
>  {
>  	const struct v4l2_format_info *info;
>  	static char name[5];
> -	unsigned int i;
>  
>  	info = v4l2_format_by_fourcc(fourcc);
>  	if (info)
>  		return info->name;
>  
> -	for (i = 0; i < 4; ++i) {
> -		name[i] = fourcc & 0xff;
> -		fourcc >>= 8;
> -	}
> +	v4l2_format_fourcc(fourcc, name);
>  
> -	name[4] = '\0';
>  	return name;
>  }
>  
> @@ -1815,6 +1822,8 @@ static void video_enum_formats(struct device *dev, enum v4l2_buf_type type)
>  	int ret;
>  
>  	for (i = 0; ; ++i) {
> +		char fourcc[5];
> +
>  		memset(&fmt, 0, sizeof fmt);
>  		fmt.index = i;
>  		fmt.type = type;
> @@ -1829,8 +1838,10 @@ static void video_enum_formats(struct device *dev, enum v4l2_buf_type type)
>  			printf("Warning: driver returned wrong format type "
>  				"%u.\n", fmt.type);
>  
> -		printf("\tFormat %u: %s (%08x)\n", i,
> -			v4l2_format_name(fmt.pixelformat), fmt.pixelformat);
> +		v4l2_format_fourcc(fmt.pixelformat, fourcc);
> +		printf("\tFormat %u: %s (%08x, \"%s\")\n", i,
> +			v4l2_format_name(fmt.pixelformat), fmt.pixelformat,
> +			fourcc);

One could argue that it would be nice to extend this to all users of
v4l2_format_fourcc(). I suppose that would be overkill.

If the format is unknown to yavta you'll end up printing the same thing
twice, but consistency in the format is probably better than avoiding
the duplication. The patch looks OK to me, I'll apply it if you send me
a version that applies :-)

>  		printf("\tType: %s (%u)\n", v4l2_buf_type_name(fmt.type),
>  			fmt.type);
>  		printf("\tName: %.32s\n", fmt.description);
diff mbox series

Patch

diff --git a/yavta.c b/yavta.c
index b2283aed09cb..2153e8b5775f 100644
--- a/yavta.c
+++ b/yavta.c
@@ -370,6 +370,18 @@  static struct v4l2_format_info {
 	{ "GENERIC_CSI2_24", V4L2_META_FMT_GENERIC_CSI2_24, 1 },
 };
 
+void v4l2_format_fourcc(__u32 fourcc, char name[5])
+{
+	unsigned int i;
+
+	for (i = 0; i < 4; ++i) {
+		name[i] = fourcc & 0xff;
+		fourcc >>= 8;
+	}
+
+	name[4] = '\0';
+}
+
 static void list_formats(void)
 {
 	unsigned int i;
@@ -412,18 +424,13 @@  static const char *v4l2_format_name(unsigned int fourcc)
 {
 	const struct v4l2_format_info *info;
 	static char name[5];
-	unsigned int i;
 
 	info = v4l2_format_by_fourcc(fourcc);
 	if (info)
 		return info->name;
 
-	for (i = 0; i < 4; ++i) {
-		name[i] = fourcc & 0xff;
-		fourcc >>= 8;
-	}
+	v4l2_format_fourcc(fourcc, name);
 
-	name[4] = '\0';
 	return name;
 }
 
@@ -1815,6 +1822,8 @@  static void video_enum_formats(struct device *dev, enum v4l2_buf_type type)
 	int ret;
 
 	for (i = 0; ; ++i) {
+		char fourcc[5];
+
 		memset(&fmt, 0, sizeof fmt);
 		fmt.index = i;
 		fmt.type = type;
@@ -1829,8 +1838,10 @@  static void video_enum_formats(struct device *dev, enum v4l2_buf_type type)
 			printf("Warning: driver returned wrong format type "
 				"%u.\n", fmt.type);
 
-		printf("\tFormat %u: %s (%08x)\n", i,
-			v4l2_format_name(fmt.pixelformat), fmt.pixelformat);
+		v4l2_format_fourcc(fmt.pixelformat, fourcc);
+		printf("\tFormat %u: %s (%08x, \"%s\")\n", i,
+			v4l2_format_name(fmt.pixelformat), fmt.pixelformat,
+			fourcc);
 		printf("\tType: %s (%u)\n", v4l2_buf_type_name(fmt.type),
 			fmt.type);
 		printf("\tName: %.32s\n", fmt.description);