Lines Matching defs:itv

15 static void ivtv_set_vps(struct ivtv *itv, int enabled)
19 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
24 data.data[2] = itv->vbi.vps_payload.data[0];
25 data.data[8] = itv->vbi.vps_payload.data[1];
26 data.data[9] = itv->vbi.vps_payload.data[2];
27 data.data[10] = itv->vbi.vps_payload.data[3];
28 data.data[11] = itv->vbi.vps_payload.data[4];
29 ivtv_call_hw(itv, IVTV_HW_SAA7127, vbi, s_vbi_data, &data);
32 static void ivtv_set_cc(struct ivtv *itv, int mode, const struct vbi_cc *cc)
36 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
43 ivtv_call_hw(itv, IVTV_HW_SAA7127, vbi, s_vbi_data, &data);
48 ivtv_call_hw(itv, IVTV_HW_SAA7127, vbi, s_vbi_data, &data);
51 static void ivtv_set_wss(struct ivtv *itv, int enabled, int mode)
55 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT))
62 if ((itv->std_out & V4L2_STD_625_50) && !enabled) {
71 ivtv_call_hw(itv, IVTV_HW_SAA7127, vbi, s_vbi_data, &data);
83 static void ivtv_write_vbi_line(struct ivtv *itv,
87 struct vbi_info *vi = &itv->vbi;
108 set_bit(IVTV_F_I_UPDATE_VPS, &itv->i_flags);
116 set_bit(IVTV_F_I_UPDATE_WSS, &itv->i_flags);
121 static void ivtv_write_vbi_cc_lines(struct ivtv *itv, const struct vbi_cc *cc)
123 struct vbi_info *vi = &itv->vbi;
129 set_bit(IVTV_F_I_UPDATE_CC, &itv->i_flags);
133 static void ivtv_write_vbi(struct ivtv *itv,
142 ivtv_write_vbi_line(itv, sliced + i, &cc, &found_cc);
145 ivtv_write_vbi_cc_lines(itv, &cc);
149 ivtv_write_vbi_from_user(struct ivtv *itv,
165 ivtv_write_vbi_line(itv, &d, &cc, &found_cc);
169 ivtv_write_vbi_cc_lines(itv, &cc);
174 static void copy_vbi_data(struct ivtv *itv, int lines, u32 pts_stamp)
187 int idx = itv->vbi.frame % IVTV_VBI_FRAMES;
188 u8 *dst = &itv->vbi.sliced_mpeg_data[idx][0];
193 if (itv->vbi.sliced_data[i].id == 0)
196 l = itv->vbi.sliced_data[i].line - 6;
197 f = itv->vbi.sliced_data[i].field;
205 ivtv_service2vbi(itv->vbi.sliced_data[i].id);
206 memcpy(dst + sd + 12 + line * 43 + 1, itv->vbi.sliced_data[i].data, 42);
231 itv->vbi.sliced_mpeg_size[idx] = sd + size;
234 static int ivtv_convert_ivtv_vbi(struct ivtv *itv, u8 *p)
279 itv->vbi.sliced_dec_data[line].line = l;
280 itv->vbi.sliced_dec_data[line].field = i >= 18;
281 itv->vbi.sliced_dec_data[line].id = id2;
282 memcpy(itv->vbi.sliced_dec_data[line].data, p + 1, 42);
288 itv->vbi.sliced_dec_data[line].id = 0;
289 itv->vbi.sliced_dec_data[line].line = 0;
290 itv->vbi.sliced_dec_data[line].field = 0;
293 return line * sizeof(itv->vbi.sliced_dec_data[0]);
299 static u32 compress_raw_buf(struct ivtv *itv, u8 *buf, u32 size)
301 u32 line_size = itv->vbi.raw_decoder_line_size;
302 u32 lines = itv->vbi.count;
303 u8 sav1 = itv->vbi.raw_decoder_sav_odd_field;
304 u8 sav2 = itv->vbi.raw_decoder_sav_even_field;
325 static u32 compress_sliced_buf(struct ivtv *itv, u32 line, u8 *buf, u32 size, u8 sav)
327 u32 line_size = itv->vbi.sliced_decoder_line_size;
350 v4l2_subdev_call(itv->sd_video, vbi, decode_vbi_line, &vbi);
353 itv->vbi.sliced_data[line].id = vbi.type;
354 itv->vbi.sliced_data[line].field = vbi.is_second_field;
355 itv->vbi.sliced_data[line].line = vbi.line;
356 memcpy(itv->vbi.sliced_data[line].data, vbi.p, 42);
363 void ivtv_process_vbi_data(struct ivtv *itv, struct ivtv_buffer *buf,
371 if (streamtype == IVTV_ENC_STREAM_TYPE_VBI && ivtv_raw_vbi(itv)) {
378 size = buf->bytesused = compress_raw_buf(itv, p, size);
381 if (type == itv->vbi.raw_decoder_sav_even_field) {
385 memcpy(p, &itv->vbi.frame, 4);
386 itv->vbi.frame++;
398 lines = compress_sliced_buf(itv, 0, p, size / 2,
399 itv->vbi.sliced_decoder_sav_odd_field);
403 lines = compress_sliced_buf(itv, lines, p + size / 2 - 32, size / 2 + 32,
404 itv->vbi.sliced_decoder_sav_even_field);
407 itv->vbi.sliced_data[0].id = 0;
408 itv->vbi.sliced_data[0].line = 0;
409 itv->vbi.sliced_data[0].field = 0;
412 buf->bytesused = size = lines * sizeof(itv->vbi.sliced_data[0]);
413 memcpy(p, &itv->vbi.sliced_data[0], size);
415 if (itv->vbi.insert_mpeg) {
416 copy_vbi_data(itv, lines, pts_stamp);
418 itv->vbi.frame++;
442 cnt = ivtv_convert_ivtv_vbi(itv, p + offset);
443 memcpy(buf->buf, itv->vbi.sliced_dec_data, cnt);
446 ivtv_write_vbi(itv, itv->vbi.sliced_dec_data,
447 cnt / sizeof(itv->vbi.sliced_dec_data[0]));
452 void ivtv_disable_cc(struct ivtv *itv)
456 clear_bit(IVTV_F_I_UPDATE_CC, &itv->i_flags);
457 ivtv_set_cc(itv, 0, &cc);
458 itv->vbi.cc_payload_idx = 0;
462 void ivtv_vbi_work_handler(struct ivtv *itv)
464 struct vbi_info *vi = &itv->vbi;
469 if (itv->output_mode == OUT_PASSTHROUGH) {
470 if (itv->is_50hz) {
474 if (v4l2_subdev_call(itv->sd_video, vbi, g_vbi_data, &data) == 0) {
475 ivtv_set_wss(itv, 1, data.data[0] & 0xf);
478 ivtv_set_wss(itv, 1, 0x8); /* 4x3 full format */
488 if (v4l2_subdev_call(itv->sd_video, vbi, g_vbi_data, &data) == 0) {
494 if (v4l2_subdev_call(itv->sd_video, vbi, g_vbi_data, &data) == 0) {
501 ivtv_set_cc(itv, mode, &cc);
503 ivtv_set_cc(itv, 0, &cc);
511 if (test_and_clear_bit(IVTV_F_I_UPDATE_WSS, &itv->i_flags)) {
512 ivtv_set_wss(itv, 1, vi->wss_payload & 0xf);
515 if (test_bit(IVTV_F_I_UPDATE_CC, &itv->i_flags)) {
517 clear_bit(IVTV_F_I_UPDATE_CC, &itv->i_flags);
518 ivtv_set_cc(itv, 3, &cc);
529 ivtv_set_cc(itv, 3, &cc);
534 if (test_and_clear_bit(IVTV_F_I_UPDATE_VPS, &itv->i_flags)) {
535 ivtv_set_vps(itv, 1);