Commit 815adc46 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

[media] uvcvideo: Don't fail when an unsupported format is requested

Return the default format in that case.
This issue was found by the v4l2-compliance tool.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 30ecb936
...@@ -165,17 +165,18 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream, ...@@ -165,17 +165,18 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream,
fcc[0], fcc[1], fcc[2], fcc[3], fcc[0], fcc[1], fcc[2], fcc[3],
fmt->fmt.pix.width, fmt->fmt.pix.height); fmt->fmt.pix.width, fmt->fmt.pix.height);
/* Check if the hardware supports the requested format. */ /* Check if the hardware supports the requested format, use the default
* format otherwise.
*/
for (i = 0; i < stream->nformats; ++i) { for (i = 0; i < stream->nformats; ++i) {
format = &stream->format[i]; format = &stream->format[i];
if (format->fcc == fmt->fmt.pix.pixelformat) if (format->fcc == fmt->fmt.pix.pixelformat)
break; break;
} }
if (format == NULL || format->fcc != fmt->fmt.pix.pixelformat) { if (i == stream->nformats) {
uvc_trace(UVC_TRACE_FORMAT, "Unsupported format 0x%08x.\n", format = stream->def_format;
fmt->fmt.pix.pixelformat); fmt->fmt.pix.pixelformat = format->fcc;
return -EINVAL;
} }
/* Find the closest image size. The distance between image sizes is /* Find the closest image size. The distance between image sizes is
......
...@@ -1812,6 +1812,7 @@ int uvc_video_init(struct uvc_streaming *stream) ...@@ -1812,6 +1812,7 @@ int uvc_video_init(struct uvc_streaming *stream)
probe->bFormatIndex = format->index; probe->bFormatIndex = format->index;
probe->bFrameIndex = frame->bFrameIndex; probe->bFrameIndex = frame->bFrameIndex;
stream->def_format = format;
stream->cur_format = format; stream->cur_format = format;
stream->cur_frame = frame; stream->cur_frame = frame;
......
...@@ -436,6 +436,7 @@ struct uvc_streaming { ...@@ -436,6 +436,7 @@ struct uvc_streaming {
struct uvc_format *format; struct uvc_format *format;
struct uvc_streaming_control ctrl; struct uvc_streaming_control ctrl;
struct uvc_format *def_format;
struct uvc_format *cur_format; struct uvc_format *cur_format;
struct uvc_frame *cur_frame; struct uvc_frame *cur_frame;
/* Protect access to ctrl, cur_format, cur_frame and hardware video /* Protect access to ctrl, cur_format, cur_frame and hardware video
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment