aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx18/cx18-driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/cx18/cx18-driver.c')
-rw-r--r--drivers/media/video/cx18/cx18-driver.c49
1 files changed, 3 insertions, 46 deletions
diff --git a/drivers/media/video/cx18/cx18-driver.c b/drivers/media/video/cx18/cx18-driver.c
index 062f1910e8dd..842ce636e45c 100644
--- a/drivers/media/video/cx18/cx18-driver.c
+++ b/drivers/media/video/cx18/cx18-driver.c
@@ -586,7 +586,8 @@ static int __devinit cx18_init_struct1(struct cx18 *cx)
586 (cx->params.video_temporal_filter_mode << 1) | 586 (cx->params.video_temporal_filter_mode << 1) |
587 (cx->params.video_median_filter_type << 2); 587 (cx->params.video_median_filter_type << 2);
588 cx->params.port = CX2341X_PORT_MEMORY; 588 cx->params.port = CX2341X_PORT_MEMORY;
589 cx->params.capabilities = CX2341X_CAP_HAS_TS | CX2341X_CAP_HAS_AC3; 589 cx->params.capabilities =
590 CX2341X_CAP_HAS_TS | CX2341X_CAP_HAS_AC3 | CX2341X_CAP_HAS_SLICED_VBI;
590 init_waitqueue_head(&cx->cap_w); 591 init_waitqueue_head(&cx->cap_w);
591 init_waitqueue_head(&cx->mb_apu_waitq); 592 init_waitqueue_head(&cx->mb_apu_waitq);
592 init_waitqueue_head(&cx->mb_cpu_waitq); 593 init_waitqueue_head(&cx->mb_cpu_waitq);
@@ -596,49 +597,6 @@ static int __devinit cx18_init_struct1(struct cx18 *cx)
596 cx->vbi.in.type = V4L2_BUF_TYPE_VBI_CAPTURE; 597 cx->vbi.in.type = V4L2_BUF_TYPE_VBI_CAPTURE;
597 cx->vbi.sliced_in = &cx->vbi.in.fmt.sliced; 598 cx->vbi.sliced_in = &cx->vbi.in.fmt.sliced;
598 599
599 /*
600 * The VBI line sizes depend on the pixel clock and the horiz rate
601 *
602 * (1/Fh)*(2*Fp) = Samples/line
603 * = 4 bytes EAV + Anc data in hblank + 4 bytes SAV + active samples
604 *
605 * Sliced VBI is sent as ancillary data during horizontal blanking
606 * Raw VBI is sent as active video samples during vertcal blanking
607 *
608 * We use a BT.656 pxiel clock of 13.5 MHz and a BT.656 active line
609 * length of 720 pixels @ 4:2:2 sampling. Thus...
610 *
611 * For systems that use a 15.734 kHz horizontal rate, such as
612 * NTSC-M, PAL-M, PAL-60, and other 60 Hz/525 line systems, we have:
613 *
614 * (1/15.734 kHz) * 2 * 13.5 MHz = 1716 samples/line =
615 * 4 bytes SAV + 268 bytes anc data + 4 bytes SAV + 1440 active samples
616 *
617 * For systems that use a 15.625 kHz horizontal rate, such as
618 * PAL-B/G/H, PAL-I, SECAM-L and other 50 Hz/625 line systems, we have:
619 *
620 * (1/15.625 kHz) * 2 * 13.5 MHz = 1728 samples/line =
621 * 4 bytes SAV + 280 bytes anc data + 4 bytes SAV + 1440 active samples
622 *
623 */
624
625 /* FIXME: init these based on tuner std & modify when std changes */
626 /* CX18-AV-Core number of VBI samples output per horizontal line */
627 cx->vbi.raw_decoder_line_size = 1444; /* 4 byte SAV + 2 * 720 */
628 cx->vbi.sliced_decoder_line_size = 272; /* 60 Hz: 268+4, 50 Hz: 280+4 */
629
630 /* CX18-AV-Core VBI samples/line possibly rounded up */
631 cx->vbi.raw_size = 1444; /* Real max size is 1444 */
632 cx->vbi.sliced_size = 284; /* Real max size is 284 */
633
634 /*
635 * CX18-AV-Core SAV/EAV RP codes in VIP 1.x mode
636 * Task Field VerticalBlank HorizontalBlank 0 0 0 0
637 */
638 cx->vbi.raw_decoder_sav_odd_field = 0x20; /* V */
639 cx->vbi.raw_decoder_sav_even_field = 0x60; /* FV */
640 cx->vbi.sliced_decoder_sav_odd_field = 0xB0; /* T VH - actually EAV */
641 cx->vbi.sliced_decoder_sav_even_field = 0xF0; /* TFVH - actually EAV */
642 return 0; 600 return 0;
643} 601}
644 602
@@ -671,7 +629,6 @@ static void __devinit cx18_init_struct2(struct cx18 *cx)
671 cx->av_state.aud_input = CX18_AV_AUDIO8; 629 cx->av_state.aud_input = CX18_AV_AUDIO8;
672 cx->av_state.audclk_freq = 48000; 630 cx->av_state.audclk_freq = 48000;
673 cx->av_state.audmode = V4L2_TUNER_MODE_LANG1; 631 cx->av_state.audmode = V4L2_TUNER_MODE_LANG1;
674 /* FIXME - 8 is NTSC value, investigate */
675 cx->av_state.vbi_line_offset = 8; 632 cx->av_state.vbi_line_offset = 8;
676} 633}
677 634
@@ -936,7 +893,7 @@ static int __devinit cx18_probe(struct pci_dev *pci_dev,
936 * suboptimal, as the CVBS and SVideo inputs could use a different std 893 * suboptimal, as the CVBS and SVideo inputs could use a different std
937 * and the buffer could end up being too small in that case. 894 * and the buffer could end up being too small in that case.
938 */ 895 */
939 vbi_buf_size = cx->vbi.raw_size * (cx->is_60hz ? 24 : 36) / 2; 896 vbi_buf_size = vbi_active_samples * (cx->is_60hz ? 24 : 36) / 2;
940 cx->stream_buf_size[CX18_ENC_STREAM_TYPE_VBI] = vbi_buf_size; 897 cx->stream_buf_size[CX18_ENC_STREAM_TYPE_VBI] = vbi_buf_size;
941 898
942 if (cx->stream_buffers[CX18_ENC_STREAM_TYPE_VBI] < 0) 899 if (cx->stream_buffers[CX18_ENC_STREAM_TYPE_VBI] < 0)