Lines Matching refs:itv

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