diff mbox

uvcvideo: Fix uvc_fixup_video_ctrl() format search

Message ID 1296180273.17673.5.camel@svmlwks101 (mailing list archive)
State Accepted
Headers show

Commit Message

Stephan Lachowsky Jan. 28, 2011, 2:04 a.m. UTC
None

Comments

Stephan Lachowsky Aug. 7, 2012, 8:37 a.m. UTC | #1
Hi Laurent,

On 19/02/11 12:35, Laurent Pinchart wrote:
> Hi Stephan,
>
> On Friday 28 January 2011 03:04:33 Stephan Lachowsky wrote:
>> The scheme used to index format in uvc_fixup_video_ctrl() is not robust:
>> format index is based on descriptor ordering, which does not necessarily
>> match bFormatIndex ordering.  Searching for first matching format will
>> prevent uvc_fixup_video_ctrl() from using the wrong format/frame to make
>> adjustments.
> Thanks for the patch. It's missing your Signed-off-by line, can I add it ?
Sorry for the late reply, you certainly may.
>> ---
>>   drivers/media/video/uvc/uvc_video.c |   14 +++++++++-----
>>   1 files changed, 9 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/media/video/uvc/uvc_video.c
>> b/drivers/media/video/uvc/uvc_video.c index 5673d67..545c029 100644
>> --- a/drivers/media/video/uvc/uvc_video.c
>> +++ b/drivers/media/video/uvc/uvc_video.c
>> @@ -89,15 +89,19 @@ int uvc_query_ctrl(struct uvc_device *dev, __u8 query,
>> __u8 unit, static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
>>   	struct uvc_streaming_control *ctrl)
>>   {
>> -	struct uvc_format *format;
>> +	struct uvc_format *format = NULL;
>>   	struct uvc_frame *frame = NULL;
>>   	unsigned int i;
>>
>> -	if (ctrl->bFormatIndex <= 0 ||
>> -	    ctrl->bFormatIndex > stream->nformats)
>> -		return;
>> +	for (i = 0; i < stream->nformats; ++i) {
>> +		if (stream->format[i].index == ctrl->bFormatIndex) {
>> +			format = &stream->format[i];
>> +			break;
>> +		}
>> +	}
>>
>> -	format = &stream->format[ctrl->bFormatIndex - 1];
>> +	if (format == NULL)
>> +		return;
>>
>>   	for (i = 0; i < format->nframes; ++i) {
>>   		if (format->frame[i].bFrameIndex == ctrl->bFrameIndex) {

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/media/video/uvc/uvc_video.c b/drivers/media/video/uvc/uvc_video.c
index 5673d67..545c029 100644
--- a/drivers/media/video/uvc/uvc_video.c
+++ b/drivers/media/video/uvc/uvc_video.c
@@ -89,15 +89,19 @@  int uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 unit,
 static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
 	struct uvc_streaming_control *ctrl)
 {
-	struct uvc_format *format;
+	struct uvc_format *format = NULL;
 	struct uvc_frame *frame = NULL;
 	unsigned int i;
 
-	if (ctrl->bFormatIndex <= 0 ||
-	    ctrl->bFormatIndex > stream->nformats)
-		return;
+	for (i = 0; i < stream->nformats; ++i) {
+		if (stream->format[i].index == ctrl->bFormatIndex) {
+			format = &stream->format[i];
+			break;
+		}
+	}
 
-	format = &stream->format[ctrl->bFormatIndex - 1];
+	if (format == NULL)
+		return;
 
 	for (i = 0; i < format->nframes; ++i) {
 		if (format->frame[i].bFrameIndex == ctrl->bFrameIndex) {