V4L/DVB (13430): cx18: Fix YUV capture so that encoder passes a single frame per...
authorAndy Walls <awalls@radix.net>
Tue, 10 Nov 2009 02:55:30 +0000 (23:55 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 5 Dec 2009 20:41:52 +0000 (18:41 -0200)
commit22dce188ef3e1e058ceabe3b3072640d7568f764
tree6a5ee29e5b7cdf9125bea7456c8de75ab0861b92
parent52fcb3ecc6707f52dfe4297f96b7609d4ba517fb
V4L/DVB (13430): cx18: Fix YUV capture so that encoder passes a single frame per transfer

Fix YUV capture such that the encoder will pass one frame per transfer.  This
will allow the application to maintain frame alignment when a transfer from
the encoder is missed due to high system latency in service the CX23418 IRQ.

Also force YUV buffer sizes to be specified in multiples of 33.75 kB, the
smalled amount of buffer sizes need to store a complete set of HM12 4:2:0
macroblocks specifying 32 lines of the frame.  A full 60Hz/525 line
screen requires 15 * 33.75 kB per frame and a full 50Hz/625 line screen
requires 18 * 33.75 kB per frame so the default buffer size is 3 * 33.75 kB,
requiring exactly 5 or 6 buffers per MDL respectively.  The bytes needed per
frame and hence MDL need not be the bytes in an integer number of buffers.
However, if frame artifacts are seen with scaled screen sizes, the YUV buffer
size can be set 34 kB (33.75 kB) to get rid of the artifacts at the cost of more
copies between the kernel and userspace.

Signed-off-by: Andy Walls <awalls@radix.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/cx18/cx18-driver.c
drivers/media/video/cx18/cx18-driver.h
drivers/media/video/cx18/cx18-dvb.c
drivers/media/video/cx18/cx18-queue.c
drivers/media/video/cx18/cx18-streams.c