From 4a0f1826446c5e12827d0b92a01adb34950262a9 Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Thu, 6 Oct 2022 16:24:08 +0800 Subject: [PATCH] do not reset bufoffset when len=0 or len=buf[0] --- class/video/usbh_video.c | 42 +++++++++++++++------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/class/video/usbh_video.c b/class/video/usbh_video.c index 14fd3786..a8c1cd23 100644 --- a/class/video/usbh_video.c +++ b/class/video/usbh_video.c @@ -422,23 +422,18 @@ void usbh_videostreaming_parse_mjpeg(struct usbh_urb *urb, struct usbh_videostre uint8_t errorBit : 1U; uint8_t endOfHeader : 1U; */ - if (iso_packet[i].actual_length == 0) { /* skip */ - stream->bufoffset = 0; + if (iso_packet[i].actual_length == 0) { /* skip no data */ continue; } - if (iso_packet[i].actual_length < iso_packet[i].transfer_buffer[0]) { - stream->bufoffset = 0; - continue; + if (iso_packet[i].actual_length < iso_packet[i].transfer_buffer[0]) { /* do not be illegal */ + while (1) { + } } - if ((iso_packet[i].transfer_buffer[0] > 12) || (iso_packet[i].transfer_buffer[0] == 0)) { - stream->bufoffset = 0; - continue; + if ((iso_packet[i].transfer_buffer[0] > 12) || (iso_packet[i].transfer_buffer[0] == 0)) { /* do not be illegal */ + while (1) { + } } - if (iso_packet[i].transfer_buffer[1] & (1 << 6)) { - stream->bufoffset = 0; - continue; - } - if (iso_packet[i].actual_length == iso_packet[i].transfer_buffer[0]) { /* skip frame header */ + if (iso_packet[i].transfer_buffer[1] & (1 << 6)) { /* error bit, re-receive */ stream->bufoffset = 0; continue; } @@ -491,23 +486,18 @@ void usbh_videostreaming_parse_yuyv2rgb565(struct usbh_urb *urb, struct usbh_vid uint8_t endOfHeader : 1U; */ - if (iso_packet[i].actual_length == 0) { /* skip */ - stream->bufoffset = 0; + if (iso_packet[i].actual_length == 0) { /* skip no data */ continue; } - if (iso_packet[i].actual_length < iso_packet[i].transfer_buffer[0]) { - stream->bufoffset = 0; - continue; + if (iso_packet[i].actual_length < iso_packet[i].transfer_buffer[0]) { /* do not be illegal */ + while (1) { + } } - if ((iso_packet[i].transfer_buffer[0] > 12) || (iso_packet[i].transfer_buffer[0] == 0)) { - stream->bufoffset = 0; - continue; + if ((iso_packet[i].transfer_buffer[0] > 12) || (iso_packet[i].transfer_buffer[0] == 0)) { /* do not be illegal */ + while (1) { + } } - if (iso_packet[i].transfer_buffer[1] & (1 << 6)) { - stream->bufoffset = 0; - continue; - } - if (iso_packet[i].actual_length == iso_packet[i].transfer_buffer[0]) { /* skip frame header */ + if (iso_packet[i].transfer_buffer[1] & (1 << 6)) { /* error bit, re-receive */ stream->bufoffset = 0; continue; }