Re: [PATCH v2] rcar-vin: Do not enumerate unsupported pixel formats

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

 



Hi Niklas,

Thank you for the patch.

On Mon, Oct 14, 2019 at 02:07:50AM +0200, Niklas Söderlund wrote:
> If a pixel format is not supported by the hardware NULL is returned by
> rvin_format_from_pixel() for that fourcc. Verify that the pixel format
> is supported using this or skip it when enumerating.
> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx>
> ---
>  drivers/media/platform/rcar-vin/rcar-v4l2.c | 20 +++++++++++++++-----
>  1 file changed, 15 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/media/platform/rcar-vin/rcar-v4l2.c b/drivers/media/platform/rcar-vin/rcar-v4l2.c
> index 9a9b89c0dc0b3be4..13b7cd5d2e40415a 100644
> --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c
> +++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c
> @@ -296,12 +296,22 @@ static int rvin_g_fmt_vid_cap(struct file *file, void *priv,
>  static int rvin_enum_fmt_vid_cap(struct file *file, void *priv,
>  				 struct v4l2_fmtdesc *f)
>  {
> -	if (f->index >= ARRAY_SIZE(rvin_formats))
> -		return -EINVAL;
> -
> -	f->pixelformat = rvin_formats[f->index].fourcc;
> +	struct rvin_dev *vin = video_drvdata(file);
> +	unsigned int i;
> +	int matched;
> +
> +	matched = -1;
> +	for (i = 0; i < ARRAY_SIZE(rvin_formats); i++) {
> +		if (rvin_format_from_pixel(vin, rvin_formats[i].fourcc))
> +			matched++;
> +
> +		if (matched == f->index) {
> +			f->pixelformat = rvin_formats[i].fourcc;
> +			return 0;
> +		}
> +	}

I wonder if the following would be more readable ?

	struct rvin_dev *vin = video_drvdata(file);
	unsigned int index = f->index;
	unsigned int i;

	for (i = 0; i < ARRAY_SIZE(rvin_formats); i++) {
		if (rvin_format_from_pixel(vin, rvin_formats[i].fourcc))
			continue;

		if (index-- == 0) {
			f->pixelformat = rvin_formats[i].fourcc;
			return 0;
		}
	}
 
	return -EINVAL;

In any case,

Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>

> -	return 0;
> +	return -EINVAL;
>  }
>  
>  static int rvin_g_selection(struct file *file, void *fh,

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