Lines Matching +full:10 +full:- +full:bit
1 // SPDX-License-Identifier: GPL-2.0-only
3 * vivid-vbi-gen.c - vbi generator support functions.
14 #include "vivid-vbi-gen.h"
18 while (size--) in wss_insert()
29 unsigned bit = 0; in vivid_vbi_gen_wss_raw() local
33 wss_insert(wss + bit, 0x1f1c71c7, 29); bit += 29; in vivid_vbi_gen_wss_raw()
34 wss_insert(wss + bit, 0x1e3c1f, 24); bit += 24; in vivid_vbi_gen_wss_raw()
36 wss_data = (data->data[1] << 8) | data->data[0]; in vivid_vbi_gen_wss_raw()
37 for (i = 0; i <= 13; i++, bit += 6) in vivid_vbi_gen_wss_raw()
38 wss_insert(wss + bit, (wss_data & (1 << i)) ? one : zero, 6); in vivid_vbi_gen_wss_raw()
40 for (i = 0, bit = 0; bit < sizeof(wss); bit++) { in vivid_vbi_gen_wss_raw()
41 unsigned n = ((bit + 1) * sampling_rate) / rate; in vivid_vbi_gen_wss_raw()
44 buf[i++] = wss[bit]; in vivid_vbi_gen_wss_raw()
51 const unsigned rate = 6937500 / 10; /* Teletext has a 6.9375 MHz transmission rate */ in vivid_vbi_gen_teletext_raw()
53 unsigned bit = 0; in vivid_vbi_gen_teletext_raw() local
56 memcpy(teletext + 3, data->data, sizeof(teletext) - 3); in vivid_vbi_gen_teletext_raw()
57 /* prevents 32 bit overflow */ in vivid_vbi_gen_teletext_raw()
58 sampling_rate /= 10; in vivid_vbi_gen_teletext_raw()
60 for (i = 0, bit = 0; bit < sizeof(teletext) * 8; bit++) { in vivid_vbi_gen_teletext_raw()
61 unsigned n = ((bit + 1) * sampling_rate) / rate; in vivid_vbi_gen_teletext_raw()
62 u8 val = (teletext[bit / 8] & (1 << (bit & 7))) ? 0xc0 : 0x10; in vivid_vbi_gen_teletext_raw()
89 /* Clock run-in: 7 cycles */ in vivid_vbi_gen_cc_raw()
93 /* Start bit of 1 (each bit is two cycles) */ in vivid_vbi_gen_cc_raw()
96 unsigned bit, i; in vivid_vbi_gen_cc_raw() local
98 cc_insert(cc + CC_PREAMBLE_BITS, data->data[0]); in vivid_vbi_gen_cc_raw()
99 cc_insert(cc + CC_PREAMBLE_BITS + 16, data->data[1]); in vivid_vbi_gen_cc_raw()
101 for (i = 0, bit = 0; bit < sizeof(cc); bit++) { in vivid_vbi_gen_cc_raw()
102 unsigned n = ((bit + 1) * sampling_rate) / rate; in vivid_vbi_gen_cc_raw()
105 buf[i++] = cc[bit] ? 0xc0 : 0x10; in vivid_vbi_gen_cc_raw()
115 const struct v4l2_sliced_vbi_data *data = vbi->data + idx; in vivid_vbi_gen_raw()
117 unsigned line = data->line; in vivid_vbi_gen_raw()
120 start_2nd_field = (data->id & V4L2_SLICED_VBI_525) ? 263 : 313; in vivid_vbi_gen_raw()
121 if (data->field) in vivid_vbi_gen_raw()
123 line -= vbi_fmt->start[data->field]; in vivid_vbi_gen_raw()
125 if (vbi_fmt->flags & V4L2_VBI_INTERLACED) in vivid_vbi_gen_raw()
126 linebuf += (line * 2 + data->field) * in vivid_vbi_gen_raw()
127 vbi_fmt->samples_per_line; in vivid_vbi_gen_raw()
129 linebuf += (line + data->field * vbi_fmt->count[0]) * in vivid_vbi_gen_raw()
130 vbi_fmt->samples_per_line; in vivid_vbi_gen_raw()
131 if (data->id == V4L2_SLICED_CAPTION_525) in vivid_vbi_gen_raw()
132 vivid_vbi_gen_cc_raw(data, linebuf, vbi_fmt->sampling_rate); in vivid_vbi_gen_raw()
133 else if (data->id == V4L2_SLICED_WSS_625) in vivid_vbi_gen_raw()
134 vivid_vbi_gen_wss_raw(data, linebuf, vbi_fmt->sampling_rate); in vivid_vbi_gen_raw()
135 else if (data->id == V4L2_SLICED_TELETEXT_B) in vivid_vbi_gen_raw()
136 vivid_vbi_gen_teletext_raw(data, linebuf, vbi_fmt->sampling_rate); in vivid_vbi_gen_raw()
192 packet[7] = calc_parity(0x40 | ((tm.tm_year - 90) & 0x3f)); in vivid_vbi_gen_set_time_of_day()
196 packet[9] = calc_parity(0x100 - checksum); in vivid_vbi_gen_set_time_of_day()
198 packet[10] = calc_parity(0x07); in vivid_vbi_gen_set_time_of_day()
206 for (checksum = 0, i = 10; i <= 14; i++) in vivid_vbi_gen_set_time_of_day()
208 packet[15] = calc_parity(0x100 - checksum); in vivid_vbi_gen_set_time_of_day()
226 packet[2] = hamming[frame % 10]; in vivid_vbi_gen_teletext()
227 packet[3] = hamming[frame / 10]; in vivid_vbi_gen_teletext()
234 offset = 10; in vivid_vbi_gen_teletext()
237 memcpy(packet, "Page: 100 Row: 10", 17); in vivid_vbi_gen_teletext()
238 packet[7] = '0' + frame / 10; in vivid_vbi_gen_teletext()
239 packet[8] = '0' + frame % 10; in vivid_vbi_gen_teletext()
240 packet[15] = '0' + line / 10; in vivid_vbi_gen_teletext()
241 packet[16] = '0' + line % 10; in vivid_vbi_gen_teletext()
242 for (i = 0; i < 42 - offset; i++) in vivid_vbi_gen_teletext()
249 struct v4l2_sliced_vbi_data *data0 = vbi->data; in vivid_vbi_gen_sliced()
250 struct v4l2_sliced_vbi_data *data1 = vbi->data + 1; in vivid_vbi_gen_sliced()
253 memset(vbi->data, 0, sizeof(vbi->data)); in vivid_vbi_gen_sliced()
259 data0->id = V4L2_SLICED_TELETEXT_B; in vivid_vbi_gen_sliced()
260 data0->line = 7 + i; in vivid_vbi_gen_sliced()
261 vivid_vbi_gen_teletext(data0->data, i, frame); in vivid_vbi_gen_sliced()
264 data0->id = V4L2_SLICED_WSS_625; in vivid_vbi_gen_sliced()
265 data0->line = 23; in vivid_vbi_gen_sliced()
267 data0->data[0] = 0x08; in vivid_vbi_gen_sliced()
270 data0->id = V4L2_SLICED_TELETEXT_B; in vivid_vbi_gen_sliced()
271 data0->field = 1; in vivid_vbi_gen_sliced()
272 data0->line = 7 + i; in vivid_vbi_gen_sliced()
273 vivid_vbi_gen_teletext(data0->data, 12 + i, frame); in vivid_vbi_gen_sliced()
279 data0->id = V4L2_SLICED_CAPTION_525; in vivid_vbi_gen_sliced()
280 data0->line = 21; in vivid_vbi_gen_sliced()
281 data1->id = V4L2_SLICED_CAPTION_525; in vivid_vbi_gen_sliced()
282 data1->field = 1; in vivid_vbi_gen_sliced()
283 data1->line = 21; in vivid_vbi_gen_sliced()
286 data0->data[0] = calc_parity(vivid_cc_sequence1[2 * frame]); in vivid_vbi_gen_sliced()
287 data0->data[1] = calc_parity(vivid_cc_sequence1[2 * frame + 1]); in vivid_vbi_gen_sliced()
289 frame -= 30; in vivid_vbi_gen_sliced()
290 data0->data[0] = calc_parity(vivid_cc_sequence2[2 * frame]); in vivid_vbi_gen_sliced()
291 data0->data[1] = calc_parity(vivid_cc_sequence2[2 * frame + 1]); in vivid_vbi_gen_sliced()
293 data0->data[0] = calc_parity(0); in vivid_vbi_gen_sliced()
294 data0->data[1] = calc_parity(0); in vivid_vbi_gen_sliced()
300 vivid_vbi_gen_set_time_of_day(vbi->time_of_day_packet); in vivid_vbi_gen_sliced()
303 data1->data[0] = vbi->time_of_day_packet[frame * 2]; in vivid_vbi_gen_sliced()
304 data1->data[1] = vbi->time_of_day_packet[frame * 2 + 1]; in vivid_vbi_gen_sliced()
307 data1->data[0] = calc_parity(0); in vivid_vbi_gen_sliced()
308 data1->data[1] = calc_parity(0); in vivid_vbi_gen_sliced()