PATCH: gscpa stv06xx + ov518: dont discard every other frame
Hi,
As noticed by James Blanford <[email protected]>, 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
linux/drivers/media/video/gspca/ov519.c +1 -1
@@ -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 ; }
linux/drivers/media/video/gspca/stv06xx/stv06xx.c +1 -1
@@ -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 "
2009/10/4 Hans de Goede <[email protected]>:
Quoted 17 lines
Hi,
As noticed by James Blanford <[email protected]>, 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 withLAST_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.
Quoted 6 lines
We are not doing this in
stv06xx.cpkt_scanmethod, which the cause of what James is seeing. So I started checking all drivers, and we are not doing this
either inov519.cwhen handling an ov518 bridge. So now the framerate of my 3 ov518 test cams has just doubled. Thanks James!
What a great discovery! \o/
Regards,
Erik
Quoted 6 lines
The attached patch fixes this.
Regards,
Hans