Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

V4L/DVB (9090): gspca: Restart the state machine when no frame buffer in finepix.

Signed-off-by: Frank Zago <frank@zago.net>
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Frank Zago and committed by
Mauro Carvalho Chehab
a3a58467 b1043e56

+11 -10
+11 -10
drivers/media/video/gspca/finepix.c
··· 135 135 struct gspca_frame *frame; 136 136 137 137 frame = gspca_get_i_frame(&dev->gspca_dev); 138 - if (frame == NULL) { 138 + if (frame == NULL) 139 139 gspca_dev->last_packet_type = DISCARD_PACKET; 140 - break; 141 - } 142 140 if (urb->actual_length < FPIX_MAX_TRANSFER || 143 141 (data[urb->actual_length-2] == 0xff && 144 142 data[urb->actual_length-1] == 0xd9)) { ··· 147 149 * but there's nothing we can do. We also end 148 150 * here if the the jpeg ends right at the end 149 151 * of the frame. */ 150 - gspca_frame_add(gspca_dev, LAST_PACKET, 151 - frame, 152 - data, urb->actual_length); 152 + if (frame) 153 + gspca_frame_add(gspca_dev, LAST_PACKET, 154 + frame, 155 + data, urb->actual_length); 153 156 dev_new_state(FPIX_REQ_FRAME); 154 157 schedule_delayed_work(&dev->wqe, NEXT_FRAME_DELAY); 155 158 } else { 156 159 157 160 /* got a partial image */ 158 - gspca_frame_add(gspca_dev, 159 - gspca_dev->last_packet_type == LAST_PACKET 160 - ? FIRST_PACKET : INTER_PACKET, 161 - frame, 161 + if (frame) 162 + gspca_frame_add(gspca_dev, 163 + gspca_dev->last_packet_type 164 + == LAST_PACKET 165 + ? FIRST_PACKET : INTER_PACKET, 166 + frame, 162 167 data, urb->actual_length); 163 168 read_frame_part(dev); 164 169 }