Re: [yavta PATCH 1/1] Print V4L2 fourcc code in format enumeration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxxx>
> ---
>  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




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux