All of lore.kernel.org
 help / color / mirror / Atom feed
* [yavta PATCH 1/1] Print V4L2 fourcc code in format enumeration
@ 2024-04-25 21:08 Sakari Ailus
  2024-05-02 22:53 ` Laurent Pinchart
  0 siblings, 1 reply; 2+ messages in thread
From: Sakari Ailus @ 2024-04-25 21:08 UTC (permalink / raw)
  To: linux-media; +Cc: laurent.pinchart

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(-)

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);
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [yavta PATCH 1/1] Print V4L2 fourcc code in format enumeration
  2024-04-25 21:08 [yavta PATCH 1/1] Print V4L2 fourcc code in format enumeration Sakari Ailus
@ 2024-05-02 22:53 ` Laurent Pinchart
  0 siblings, 0 replies; 2+ messages in thread
From: Laurent Pinchart @ 2024-05-02 22:53 UTC (permalink / raw)
  To: Sakari Ailus; +Cc: linux-media

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);

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-05-02 22:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-25 21:08 [yavta PATCH 1/1] Print V4L2 fourcc code in format enumeration Sakari Ailus
2024-05-02 22:53 ` Laurent Pinchart

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.