58 static const u8 sliced_vbi_did[2] = { 0x91, 0x55 };
73 static int odd_parity(
u8 c)
82 static int decode_vps(
u8 *
dst,
u8 *
p)
84 static const u8 biphase_tbl[] = {
85 0xf0, 0x78, 0x70, 0xf0, 0xb4, 0x3c, 0x34, 0xb4,
86 0xb0, 0x38, 0x30, 0xb0, 0xf0, 0x78, 0x70, 0xf0,
87 0xd2, 0x5a, 0x52, 0xd2, 0x96, 0x1e, 0x16, 0x96,
88 0x92, 0x1a, 0x12, 0x92, 0xd2, 0x5a, 0x52, 0xd2,
89 0xd0, 0x58, 0x50, 0xd0, 0x94, 0x1c, 0x14, 0x94,
90 0x90, 0x18, 0x10, 0x90, 0xd0, 0x58, 0x50, 0xd0,
91 0xf0, 0x78, 0x70, 0xf0, 0xb4, 0x3c, 0x34, 0xb4,
92 0xb0, 0x38, 0x30, 0xb0, 0xf0, 0x78, 0x70, 0xf0,
93 0xe1, 0x69, 0x61, 0xe1, 0xa5, 0x2d, 0x25, 0xa5,
94 0xa1, 0x29, 0x21, 0xa1, 0xe1, 0x69, 0x61, 0xe1,
95 0xc3, 0x4b, 0x43, 0xc3, 0x87, 0x0f, 0x07, 0x87,
96 0x83, 0x0b, 0x03, 0x83, 0xc3, 0x4b, 0x43, 0xc3,
97 0xc1, 0x49, 0x41, 0xc1, 0x85, 0x0d, 0x05, 0x85,
98 0x81, 0x09, 0x01, 0x81, 0xc1, 0x49, 0x41, 0xc1,
99 0xe1, 0x69, 0x61, 0xe1, 0xa5, 0x2d, 0x25, 0xa5,
100 0xa1, 0x29, 0x21, 0xa1, 0xe1, 0x69, 0x61, 0xe1,
101 0xe0, 0x68, 0x60, 0xe0, 0xa4, 0x2c, 0x24, 0xa4,
102 0xa0, 0x28, 0x20, 0xa0, 0xe0, 0x68, 0x60, 0xe0,
103 0xc2, 0x4a, 0x42, 0xc2, 0x86, 0x0e, 0x06, 0x86,
104 0x82, 0x0a, 0x02, 0x82, 0xc2, 0x4a, 0x42, 0xc2,
105 0xc0, 0x48, 0x40, 0xc0, 0x84, 0x0c, 0x04, 0x84,
106 0x80, 0x08, 0x00, 0x80, 0xc0, 0x48, 0x40, 0xc0,
107 0xe0, 0x68, 0x60, 0xe0, 0xa4, 0x2c, 0x24, 0xa4,
108 0xa0, 0x28, 0x20, 0xa0, 0xe0, 0x68, 0x60, 0xe0,
109 0xf0, 0x78, 0x70, 0xf0, 0xb4, 0x3c, 0x34, 0xb4,
110 0xb0, 0x38, 0x30, 0xb0, 0xf0, 0x78, 0x70, 0xf0,
111 0xd2, 0x5a, 0x52, 0xd2, 0x96, 0x1e, 0x16, 0x96,
112 0x92, 0x1a, 0x12, 0x92, 0xd2, 0x5a, 0x52, 0xd2,
113 0xd0, 0x58, 0x50, 0xd0, 0x94, 0x1c, 0x14, 0x94,
114 0x90, 0x18, 0x10, 0x90, 0xd0, 0x58, 0x50, 0xd0,
115 0xf0, 0x78, 0x70, 0xf0, 0xb4, 0x3c, 0x34, 0xb4,
116 0xb0, 0x38, 0x30, 0xb0, 0xf0, 0x78, 0x70, 0xf0,
122 for (i = 0; i < 2 * 13; i += 2) {
123 err |= biphase_tbl[p[
i]] | biphase_tbl[p[i + 1]];
124 c = (biphase_tbl[p[i + 1]] & 0xf) |
125 ((biphase_tbl[p[i]] & 0xf) << 4);
134 struct cx18 *cx = v4l2_get_subdevdata(sd);
136 static const u16 lcr2vbi[] = {
154 for (i = 7; i <= 23; i++) {
163 for (i = 10; i <= 21; i++) {
177 struct cx18 *cx = v4l2_get_subdevdata(sd);
191 struct cx18 *cx = v4l2_get_subdevdata(sd);
197 for (x = 0; x <= 23; x++)
210 for (i = 0; i <= 6; i++)
214 for (i = 0; i <= 9; i++)
218 for (i = 22; i <= 23; i++)
224 for (i = 7; i <= 23; i++) {
225 for (x = 0; x <= 1; x++) {
228 lcr[
i] |= 1 << (4 *
x);
231 lcr[
i] |= 4 << (4 *
x);
234 lcr[
i] |= 6 << (4 *
x);
237 lcr[
i] |= 9 << (4 *
x);
244 for (x = 1, i = 0x424; i <= 0x434; i++, x++)
247 for (x = 1, i = 0x424; i <= 0x430; i++, x++)
249 for (i = 0x431; i <= 0x434; i++)
262 struct cx18 *cx = v4l2_get_subdevdata(sd);
273 (anc->
did != sliced_vbi_did[0] &&
274 anc->
did != sliced_vbi_did[1])) {
281 l = anc->
idid[0] & 0x3f;
295 err = !odd_parity(p[0]) || !odd_parity(p[1]);
299 if (decode_vps(p, p) != 0)
309 vbi->
line = err ? 0 :
l;