Hi, As noticed by James Blanford <jhblanford@xxxxxxxxx>, we were discarding every other frame in stv06xx and the ov518 (part of ov519.c) drivers. When we call gspca_frame_add, it returns a pointer to the frame passed in, unless we call it with LAST_PACKET, when it will return a pointer to a new frame in which to store the frame data for the next frame. So whenever calling: gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, len); we should do this as: frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, len); So that any further data got from of the pkt we are handling in pkt_scan, goes to the next frame. We are not doing this in stv06xx.c pkt_scan method, which the cause of what James is seeing. So I started checking all drivers, and we are not doing this either in ov519.c when handling an ov518 bridge. So now the framerate of my 3 ov518 test cams has just doubled. Thanks James! The attached patch fixes this. Regards, Hans
diff -r 5ad36b0c0e90 linux/drivers/media/video/gspca/ov519.c --- a/linux/drivers/media/video/gspca/ov519.c Sun Oct 04 16:23:04 2009 +0200 +++ b/linux/drivers/media/video/gspca/ov519.c Sun Oct 04 17:26:43 2009 +0200 @@ -2939,7 +2939,7 @@ /* A false positive here is likely, until OVT gives me * the definitive SOF/EOF format */ if ((!(data[0] | data[1] | data[2] | data[3] | data[5])) && data[6]) { - gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0); + frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0); gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, 0); sd->packet_nr = 0; } diff -r 5ad36b0c0e90 linux/drivers/media/video/gspca/stv06xx/stv06xx.c --- a/linux/drivers/media/video/gspca/stv06xx/stv06xx.c Sun Oct 04 16:23:04 2009 +0200 +++ b/linux/drivers/media/video/gspca/stv06xx/stv06xx.c Sun Oct 04 17:26:43 2009 +0200 @@ -394,7 +394,7 @@ PDEBUG(D_PACK, "End of frame detected"); /* Complete the last frame (if any) */ - gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0); + frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0); if (chunk_len) PDEBUG(D_ERR, "Chunk length is "