[pvrusb2] [patch] 625/50 24xxx shifted capture window simple fix
vdb128 at picaros.org
vdb128 at picaros.org
Thu Jul 30 08:27:08 CDT 2009
Perhaps some have noticed that capturing 625/50/i with encoder
firmware 2.06.039 or later shifts the capture window down by 2 lines.
Here below is a quick kernel patch which works for the setup:
Linux 2.6.29.6, 24xxx device, cx25840 decoder, cx23416 encoder.
This patch indeed changes the defaults. This might be justifiable
since, for vblank,
1. the stream then follows itu-r bt.656 timing,
2. the firmware 2.06.039 expects this,
3. it is the decoder default for 625 line systems.
Additionally vblank656=vblank+4 holds for NTSC-M and PAL-60 so I
moved this setting out of the if-then-else standard selection.
The proposed hblank is the only value that always captures the whole
frame. It seems that the hsync detection is early. The set color
burst delay of 93 instead of the itu-r bt.470 delay of 91 hints to
the same observation.
Some example captures with these defaults:
http://picaros.org/xorg/bbc.png ri=15/11
http://picaros.org/xorg/cn.png
http://picaros.org/xorg/dvd.png
http://picaros.org/xorg/ned1.png
http://picaros.org/xorg/tmfc.png ri=4/3
Test results:
http://picaros.org/xorg/v36-40.png vblank=36
http://picaros.org/xorg/v34-38.png vblank=34
http://picaros.org/xorg/ntsc26.png vblank=26
http://picaros.org/xorg/ntsc656-26.png vblank656=26
Synchronization details:
http://picaros.org/ftp/key/tvsync.html
Wed Jul 29 12:42:32 CEST 2009
--- linux-2.6.29.6/drivers/media/video/cx25840/cx25840-core-d.c 2009-07-03 01:41:20.000000000 +0200
+++ linux-2.6.29.6/drivers/media/video/cx25840/cx25840-core.c 2009-07-28 03:10:36.000000000 +0200
@@ -363,14 +363,13 @@ void cx25840_std_setup(struct i2c_client
else
cx25840_write(client, 0x49f, 0x14);
+ src_decimation = 543;
if (std & V4L2_STD_625_50) {
- hblank = 132;
+ hblank = 136; /* 132 */
hactive = 720;
burst = 93;
- vblank = 36;
+ vblank = 34;
vactive = 580;
- vblank656 = 40;
- src_decimation = 0x21f;
luma_lpf = 2;
if (std & V4L2_STD_SECAM) {
@@ -393,28 +392,25 @@ void cx25840_std_setup(struct i2c_client
luma_lpf = 1;
uv_lpf = 1;
- src_decimation = 0x21f;
if (std == V4L2_STD_PAL_60) {
vblank = 26;
- vblank656 = 26;
burst = 0x5b;
luma_lpf = 2;
comb = 0x20;
sc = 688739;
} else if (std == V4L2_STD_PAL_M) {
vblank = 20;
- vblank656 = 24;
burst = 0x61;
comb = 0x20;
sc = 555452;
} else {
vblank = 26;
- vblank656 = 26;
burst = 0x5b;
comb = 0x66;
sc = 556063;
}
}
+ vblank656 = vblank+4;
/* DEBUG: Displays configured PLL frequency */
pll_int = cx25840_read(client, 0x108);
@@ -446,8 +442,8 @@ void cx25840_std_setup(struct i2c_client
v4l_dbg(1, cx25840_debug, client, "hblank %i, hactive %i, "
"vblank %i, vactive %i, vblank656 %i, src_dec %i, "
- "burst 0x%02x, luma_lpf %i, uv_lpf %i, comb 0x%02x, "
- "sc 0x%06x\n",
+ "burst %i, luma_lpf %i, uv_lpf %i, comb 0x%02x, "
+ "sc %i\n",
hblank, hactive, vblank, vactive, vblank656,
src_decimation, burst, luma_lpf, uv_lpf, comb, sc);
}
@@ -491,6 +487,8 @@ void cx25840_std_setup(struct i2c_client
cx25840_write(client, 0x47f, 0x00);
state->vbi_line_offset = 8;
}
+ /* Alignment test: force the use of vblank656 VIP_OPT_AL */
+ /* cx25840_write(client, 0x406, 0x17); */
}
/* ----------------------------------------------------------------------- */
More information about the pvrusb2
mailing list