media: gspca: support multiple pixel formats in TRY_FMT
If a driver supports multiple pixel formats with the same frame size, TRY_FMT will currently always return the first pixel format. Fix this by adding pixelformat support to wxh_to_nearest_mode(). Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
fc78e0b247
commit
d4809b778a
@ -926,10 +926,16 @@ static int wxh_to_mode(struct gspca_dev *gspca_dev,
|
||||
}
|
||||
|
||||
static int wxh_to_nearest_mode(struct gspca_dev *gspca_dev,
|
||||
int width, int height)
|
||||
int width, int height, u32 pixelformat)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = gspca_dev->cam.nmodes; --i > 0; ) {
|
||||
if (width >= gspca_dev->cam.cam_mode[i].width
|
||||
&& height >= gspca_dev->cam.cam_mode[i].height
|
||||
&& pixelformat == gspca_dev->cam.cam_mode[i].pixelformat)
|
||||
return i;
|
||||
}
|
||||
for (i = gspca_dev->cam.nmodes; --i > 0; ) {
|
||||
if (width >= gspca_dev->cam.cam_mode[i].width
|
||||
&& height >= gspca_dev->cam.cam_mode[i].height)
|
||||
@ -1059,7 +1065,7 @@ static int try_fmt_vid_cap(struct gspca_dev *gspca_dev,
|
||||
fmt->fmt.pix.pixelformat, w, h);
|
||||
|
||||
/* search the nearest mode for width and height */
|
||||
mode = wxh_to_nearest_mode(gspca_dev, w, h);
|
||||
mode = wxh_to_nearest_mode(gspca_dev, w, h, fmt->fmt.pix.pixelformat);
|
||||
|
||||
/* OK if right palette */
|
||||
if (gspca_dev->cam.cam_mode[mode].pixelformat
|
||||
|
Loading…
Reference in New Issue
Block a user