|
@@ -1132,6 +1132,17 @@ static int uvc_video_encode_data(struct uvc_streaming *stream,
|
|
|
* URB handling
|
|
|
*/
|
|
|
|
|
|
+/*
|
|
|
+ * Set error flag for incomplete buffer.
|
|
|
+ */
|
|
|
+static void uvc_video_validate_buffer(const struct uvc_streaming *stream,
|
|
|
+ struct uvc_buffer *buf)
|
|
|
+{
|
|
|
+ if (buf->length != buf->bytesused &&
|
|
|
+ !(stream->cur_format->flags & UVC_FMT_FLAG_COMPRESSED))
|
|
|
+ buf->error = 1;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Completion handler for video URBs.
|
|
|
*/
|
|
@@ -1156,9 +1167,11 @@ static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream,
|
|
|
do {
|
|
|
ret = uvc_video_decode_start(stream, buf, mem,
|
|
|
urb->iso_frame_desc[i].actual_length);
|
|
|
- if (ret == -EAGAIN)
|
|
|
+ if (ret == -EAGAIN) {
|
|
|
+ uvc_video_validate_buffer(stream, buf);
|
|
|
buf = uvc_queue_next_buffer(&stream->queue,
|
|
|
buf);
|
|
|
+ }
|
|
|
} while (ret == -EAGAIN);
|
|
|
|
|
|
if (ret < 0)
|
|
@@ -1173,11 +1186,7 @@ static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream,
|
|
|
urb->iso_frame_desc[i].actual_length);
|
|
|
|
|
|
if (buf->state == UVC_BUF_STATE_READY) {
|
|
|
- if (buf->length != buf->bytesused &&
|
|
|
- !(stream->cur_format->flags &
|
|
|
- UVC_FMT_FLAG_COMPRESSED))
|
|
|
- buf->error = 1;
|
|
|
-
|
|
|
+ uvc_video_validate_buffer(stream, buf);
|
|
|
buf = uvc_queue_next_buffer(&stream->queue, buf);
|
|
|
}
|
|
|
}
|