Lines Matching refs:itv

27 static void ivtv_set_vps(struct ivtv *itv, int enabled)  in ivtv_set_vps()  argument
31 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)) in ivtv_set_vps()
36 data.data[2] = itv->vbi.vps_payload.data[0]; in ivtv_set_vps()
37 data.data[8] = itv->vbi.vps_payload.data[1]; in ivtv_set_vps()
38 data.data[9] = itv->vbi.vps_payload.data[2]; in ivtv_set_vps()
39 data.data[10] = itv->vbi.vps_payload.data[3]; in ivtv_set_vps()
40 data.data[11] = itv->vbi.vps_payload.data[4]; in ivtv_set_vps()
41 ivtv_call_hw(itv, IVTV_HW_SAA7127, vbi, s_vbi_data, &data); in ivtv_set_vps()
44 static void ivtv_set_cc(struct ivtv *itv, int mode, const struct vbi_cc *cc) in ivtv_set_cc() argument
48 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)) in ivtv_set_cc()
55 ivtv_call_hw(itv, IVTV_HW_SAA7127, vbi, s_vbi_data, &data); in ivtv_set_cc()
60 ivtv_call_hw(itv, IVTV_HW_SAA7127, vbi, s_vbi_data, &data); in ivtv_set_cc()
63 static void ivtv_set_wss(struct ivtv *itv, int enabled, int mode) in ivtv_set_wss() argument
67 if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)) in ivtv_set_wss()
74 if ((itv->std_out & V4L2_STD_625_50) && !enabled) { in ivtv_set_wss()
83 ivtv_call_hw(itv, IVTV_HW_SAA7127, vbi, s_vbi_data, &data); in ivtv_set_wss()
95 static void ivtv_write_vbi_line(struct ivtv *itv, in ivtv_write_vbi_line() argument
99 struct vbi_info *vi = &itv->vbi; in ivtv_write_vbi_line()
120 set_bit(IVTV_F_I_UPDATE_VPS, &itv->i_flags); in ivtv_write_vbi_line()
128 set_bit(IVTV_F_I_UPDATE_WSS, &itv->i_flags); in ivtv_write_vbi_line()
133 static void ivtv_write_vbi_cc_lines(struct ivtv *itv, const struct vbi_cc *cc) in ivtv_write_vbi_cc_lines() argument
135 struct vbi_info *vi = &itv->vbi; in ivtv_write_vbi_cc_lines()
141 set_bit(IVTV_F_I_UPDATE_CC, &itv->i_flags); in ivtv_write_vbi_cc_lines()
145 static void ivtv_write_vbi(struct ivtv *itv, in ivtv_write_vbi() argument
154 ivtv_write_vbi_line(itv, sliced + i, &cc, &found_cc); in ivtv_write_vbi()
157 ivtv_write_vbi_cc_lines(itv, &cc); in ivtv_write_vbi()
161 ivtv_write_vbi_from_user(struct ivtv *itv, in ivtv_write_vbi_from_user() argument
177 ivtv_write_vbi_line(itv, &d, &cc, &found_cc); in ivtv_write_vbi_from_user()
181 ivtv_write_vbi_cc_lines(itv, &cc); in ivtv_write_vbi_from_user()
186 static void copy_vbi_data(struct ivtv *itv, int lines, u32 pts_stamp) in copy_vbi_data() argument
199 int idx = itv->vbi.frame % IVTV_VBI_FRAMES; in copy_vbi_data()
200 u8 *dst = &itv->vbi.sliced_mpeg_data[idx][0]; in copy_vbi_data()
205 if (itv->vbi.sliced_data[i].id == 0) in copy_vbi_data()
208 l = itv->vbi.sliced_data[i].line - 6; in copy_vbi_data()
209 f = itv->vbi.sliced_data[i].field; in copy_vbi_data()
217 ivtv_service2vbi(itv->vbi.sliced_data[i].id); in copy_vbi_data()
218 memcpy(dst + sd + 12 + line * 43 + 1, itv->vbi.sliced_data[i].data, 42); in copy_vbi_data()
243 itv->vbi.sliced_mpeg_size[idx] = sd + size; in copy_vbi_data()
246 static int ivtv_convert_ivtv_vbi(struct ivtv *itv, u8 *p) in ivtv_convert_ivtv_vbi() argument
291 itv->vbi.sliced_dec_data[line].line = l; in ivtv_convert_ivtv_vbi()
292 itv->vbi.sliced_dec_data[line].field = i >= 18; in ivtv_convert_ivtv_vbi()
293 itv->vbi.sliced_dec_data[line].id = id2; in ivtv_convert_ivtv_vbi()
294 memcpy(itv->vbi.sliced_dec_data[line].data, p + 1, 42); in ivtv_convert_ivtv_vbi()
300 itv->vbi.sliced_dec_data[line].id = 0; in ivtv_convert_ivtv_vbi()
301 itv->vbi.sliced_dec_data[line].line = 0; in ivtv_convert_ivtv_vbi()
302 itv->vbi.sliced_dec_data[line].field = 0; in ivtv_convert_ivtv_vbi()
305 return line * sizeof(itv->vbi.sliced_dec_data[0]); in ivtv_convert_ivtv_vbi()
311 static u32 compress_raw_buf(struct ivtv *itv, u8 *buf, u32 size) in compress_raw_buf() argument
313 u32 line_size = itv->vbi.raw_decoder_line_size; in compress_raw_buf()
314 u32 lines = itv->vbi.count; in compress_raw_buf()
315 u8 sav1 = itv->vbi.raw_decoder_sav_odd_field; in compress_raw_buf()
316 u8 sav2 = itv->vbi.raw_decoder_sav_even_field; in compress_raw_buf()
337 static u32 compress_sliced_buf(struct ivtv *itv, u32 line, u8 *buf, u32 size, u8 sav) in compress_sliced_buf() argument
339 u32 line_size = itv->vbi.sliced_decoder_line_size; in compress_sliced_buf()
362 v4l2_subdev_call(itv->sd_video, vbi, decode_vbi_line, &vbi); in compress_sliced_buf()
365 itv->vbi.sliced_data[line].id = vbi.type; in compress_sliced_buf()
366 itv->vbi.sliced_data[line].field = vbi.is_second_field; in compress_sliced_buf()
367 itv->vbi.sliced_data[line].line = vbi.line; in compress_sliced_buf()
368 memcpy(itv->vbi.sliced_data[line].data, vbi.p, 42); in compress_sliced_buf()
375 void ivtv_process_vbi_data(struct ivtv *itv, struct ivtv_buffer *buf, in ivtv_process_vbi_data() argument
383 if (streamtype == IVTV_ENC_STREAM_TYPE_VBI && ivtv_raw_vbi(itv)) { in ivtv_process_vbi_data()
390 size = buf->bytesused = compress_raw_buf(itv, p, size); in ivtv_process_vbi_data()
393 if (type == itv->vbi.raw_decoder_sav_even_field) { in ivtv_process_vbi_data()
397 memcpy(p, &itv->vbi.frame, 4); in ivtv_process_vbi_data()
398 itv->vbi.frame++; in ivtv_process_vbi_data()
410 lines = compress_sliced_buf(itv, 0, p, size / 2, in ivtv_process_vbi_data()
411 itv->vbi.sliced_decoder_sav_odd_field); in ivtv_process_vbi_data()
415 lines = compress_sliced_buf(itv, lines, p + size / 2 - 32, size / 2 + 32, in ivtv_process_vbi_data()
416 itv->vbi.sliced_decoder_sav_even_field); in ivtv_process_vbi_data()
419 itv->vbi.sliced_data[0].id = 0; in ivtv_process_vbi_data()
420 itv->vbi.sliced_data[0].line = 0; in ivtv_process_vbi_data()
421 itv->vbi.sliced_data[0].field = 0; in ivtv_process_vbi_data()
424 buf->bytesused = size = lines * sizeof(itv->vbi.sliced_data[0]); in ivtv_process_vbi_data()
425 memcpy(p, &itv->vbi.sliced_data[0], size); in ivtv_process_vbi_data()
427 if (itv->vbi.insert_mpeg) { in ivtv_process_vbi_data()
428 copy_vbi_data(itv, lines, pts_stamp); in ivtv_process_vbi_data()
430 itv->vbi.frame++; in ivtv_process_vbi_data()
454 cnt = ivtv_convert_ivtv_vbi(itv, p + offset); in ivtv_process_vbi_data()
455 memcpy(buf->buf, itv->vbi.sliced_dec_data, cnt); in ivtv_process_vbi_data()
458 ivtv_write_vbi(itv, itv->vbi.sliced_dec_data, in ivtv_process_vbi_data()
459 cnt / sizeof(itv->vbi.sliced_dec_data[0])); in ivtv_process_vbi_data()
464 void ivtv_disable_cc(struct ivtv *itv) in ivtv_disable_cc() argument
468 clear_bit(IVTV_F_I_UPDATE_CC, &itv->i_flags); in ivtv_disable_cc()
469 ivtv_set_cc(itv, 0, &cc); in ivtv_disable_cc()
470 itv->vbi.cc_payload_idx = 0; in ivtv_disable_cc()
474 void ivtv_vbi_work_handler(struct ivtv *itv) in ivtv_vbi_work_handler() argument
476 struct vbi_info *vi = &itv->vbi; in ivtv_vbi_work_handler()
481 if (itv->output_mode == OUT_PASSTHROUGH) { in ivtv_vbi_work_handler()
482 if (itv->is_50hz) { in ivtv_vbi_work_handler()
486 if (v4l2_subdev_call(itv->sd_video, vbi, g_vbi_data, &data) == 0) { in ivtv_vbi_work_handler()
487 ivtv_set_wss(itv, 1, data.data[0] & 0xf); in ivtv_vbi_work_handler()
490 ivtv_set_wss(itv, 1, 0x8); /* 4x3 full format */ in ivtv_vbi_work_handler()
500 if (v4l2_subdev_call(itv->sd_video, vbi, g_vbi_data, &data) == 0) { in ivtv_vbi_work_handler()
506 if (v4l2_subdev_call(itv->sd_video, vbi, g_vbi_data, &data) == 0) { in ivtv_vbi_work_handler()
513 ivtv_set_cc(itv, mode, &cc); in ivtv_vbi_work_handler()
515 ivtv_set_cc(itv, 0, &cc); in ivtv_vbi_work_handler()
523 if (test_and_clear_bit(IVTV_F_I_UPDATE_WSS, &itv->i_flags)) { in ivtv_vbi_work_handler()
524 ivtv_set_wss(itv, 1, vi->wss_payload & 0xf); in ivtv_vbi_work_handler()
527 if (test_bit(IVTV_F_I_UPDATE_CC, &itv->i_flags)) { in ivtv_vbi_work_handler()
529 clear_bit(IVTV_F_I_UPDATE_CC, &itv->i_flags); in ivtv_vbi_work_handler()
530 ivtv_set_cc(itv, 3, &cc); in ivtv_vbi_work_handler()
541 ivtv_set_cc(itv, 3, &cc); in ivtv_vbi_work_handler()
546 if (test_and_clear_bit(IVTV_F_I_UPDATE_VPS, &itv->i_flags)) { in ivtv_vbi_work_handler()
547 ivtv_set_vps(itv, 1); in ivtv_vbi_work_handler()