[media] ov7670: check for valid width/height in ov7670_enum_frame_interval
The width and height should be checked in the enum_frame_interval op. This fixes a v4l2-compliance failure. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
5a878f97fd
commit
b8cc79fd83
|
@ -1073,10 +1073,33 @@ static int ov7670_enum_frame_interval(struct v4l2_subdev *sd,
|
|||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
struct ov7670_info *info = to_state(sd);
|
||||
unsigned int n_win_sizes = info->devtype->n_win_sizes;
|
||||
int i;
|
||||
|
||||
if (fie->pad)
|
||||
return -EINVAL;
|
||||
if (fie->index >= ARRAY_SIZE(ov7670_frame_rates))
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* Check if the width/height is valid.
|
||||
*
|
||||
* If a minimum width/height was requested, filter out the capture
|
||||
* windows that fall outside that.
|
||||
*/
|
||||
for (i = 0; i < n_win_sizes; i++) {
|
||||
struct ov7670_win_size *win = &info->devtype->win_sizes[i];
|
||||
|
||||
if (info->min_width && win->width < info->min_width)
|
||||
continue;
|
||||
if (info->min_height && win->height < info->min_height)
|
||||
continue;
|
||||
if (fie->width == win->width && fie->height == win->height)
|
||||
break;
|
||||
}
|
||||
if (i == n_win_sizes)
|
||||
return -EINVAL;
|
||||
fie->interval.numerator = 1;
|
||||
fie->interval.denominator = ov7670_frame_rates[fie->index];
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue