diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2011-11-03 14:24:34 +0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-12-11 17:14:31 +0400 |
commit | 3afedb95858bcc117b207a7c0a6767fe891bdfe9 (patch) | |
tree | cf21cbf7f8fb866ab281544b9a33d387a2cad7aa /drivers/media/video/uvc | |
parent | 0c6a3b268e14ab99960028c9ad202b9aebae0a03 (diff) | |
download | linux-3afedb95858bcc117b207a7c0a6767fe891bdfe9.tar.xz |
[media] uvcvideo: Don't skip erroneous payloads
Instead of skipping the payload completely, which would make the
resulting image corrupted anyway, store the payload normally and mark
the buffer as erroneous. If the no_drop module parameter is set to 1 the
buffer will then be passed to userspace, and tt will then be up to the
application to decide what to do with the buffer.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/uvc')
-rw-r--r-- | drivers/media/video/uvc/uvc_video.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/media/video/uvc/uvc_video.c b/drivers/media/video/uvc/uvc_video.c index b953dae5205d..a57f81341849 100644 --- a/drivers/media/video/uvc/uvc_video.c +++ b/drivers/media/video/uvc/uvc_video.c @@ -409,13 +409,6 @@ static int uvc_video_decode_start(struct uvc_streaming *stream, if (len < 2 || data[0] < 2 || data[0] > len) return -EINVAL; - /* Skip payloads marked with the error bit ("error frames"). */ - if (data[1] & UVC_STREAM_ERR) { - uvc_trace(UVC_TRACE_FRAME, "Dropping payload (error bit " - "set).\n"); - return -ENODATA; - } - fid = data[1] & UVC_STREAM_FID; /* Increase the sequence number regardless of any buffer states, so @@ -432,6 +425,13 @@ static int uvc_video_decode_start(struct uvc_streaming *stream, return -ENODATA; } + /* Mark the buffer as bad if the error bit is set. */ + if (data[1] & UVC_STREAM_ERR) { + uvc_trace(UVC_TRACE_FRAME, "Marking buffer as bad (error bit " + "set).\n"); + buf->error = 1; + } + /* Synchronize to the input stream by waiting for the FID bit to be * toggled when the the buffer state is not UVC_BUF_STATE_ACTIVE. * stream->last_fid is initialized to -1, so the first isochronous |