diff options
| author | Roger Hardiman <roger@FreeBSD.org> | 1999-12-08 14:01:30 +0000 |
|---|---|---|
| committer | Roger Hardiman <roger@FreeBSD.org> | 1999-12-08 14:01:30 +0000 |
| commit | 7313447c12ad468695ceb81d80d58d5e744463be (patch) | |
| tree | 372128138239e41b7d1e4433b65e65d19dbb54b1 /sys/dev | |
| parent | 1bc51f6ae7f29c65bed9710bfbbe5091becc0951 (diff) | |
Notes
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/bktr/bktr_core.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/sys/dev/bktr/bktr_core.c b/sys/dev/bktr/bktr_core.c index a6158c59a1a23..e55e6f2e4e6f1 100644 --- a/sys/dev/bktr/bktr_core.c +++ b/sys/dev/bktr/bktr_core.c @@ -702,11 +702,11 @@ common_bktr_intr( void *arg ) /* - * Process the VBI data if /dev/vbi is open. We do this after + * Process the VBI data if it is being captured. We do this once * both Odd and Even VBI data is captured. Therefore we do this * in the Even field interrupt handler. */ - if ((bktr->vbiflags & VBI_OPEN)&&(field==EVEN_F)) { + if ((bktr->vbiflags & VBI_CAPTURE)&&(field==EVEN_F)) { /* Put VBI data into circular buffer */ vbidecode(bktr); @@ -2527,8 +2527,7 @@ static bool_t split(bktr_reg_t * bktr, volatile u_long **dma_prog, int width , flag = OP_SOL | OP_EOL; } else if (bktr->current_col == 0 ) { flag = OP_SOL; - } else if (bktr->current_col == cols - || bktr->current_col + width >= cols) { + } else if (bktr->current_col == cols) { flag = OP_EOL; } else flag = 0; @@ -2554,8 +2553,7 @@ static bool_t split(bktr_reg_t * bktr, volatile u_long **dma_prog, int width , } else if (bktr->current_col == 0 ) { flag = OP_SOL; flag2 = 0; - } else if (bktr->current_col >= cols - || bktr->current_col + width >= cols) { + } else if (bktr->current_col >= cols) { flag = 0; flag2 = OP_EOL; } else { @@ -2678,7 +2676,7 @@ rgb_vbi_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace ) *dma_prog++ = OP_SYNC | BKTR_FM1; *dma_prog++ = 0; /* NULL WORD */ width = cols; - for (i = 0; i < rows; i += interlace) { + for (i = 0; i < (rows/interlace); i++) { target = target_buffer; if ( notclipped(bktr, i, width)) { split(bktr, (volatile u_long **) &dma_prog, @@ -2735,7 +2733,7 @@ rgb_vbi_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace ) *dma_prog++ = OP_SYNC | BKTR_FM1; *dma_prog++ = 0; /* NULL WORD */ width = cols; - for (i = 1; i < rows; i += interlace) { + for (i = 0; i < (rows/interlace); i++) { target = target_buffer; if ( notclipped(bktr, i, width)) { split(bktr, (volatile u_long **) &dma_prog, @@ -2836,7 +2834,7 @@ rgb_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace ) /* sync, mode indicator packed data */ *dma_prog++ = 0; /* NULL WORD */ width = cols; - for (i = 0; i < rows; i += interlace) { + for (i = 0; i < (rows/interlace); i++) { target = target_buffer; if ( notclipped(bktr, i, width)) { split(bktr, (volatile u_long **) &dma_prog, @@ -2902,7 +2900,7 @@ rgb_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace ) *dma_prog++ = OP_SYNC | BKTR_RESYNC | BKTR_FM1; *dma_prog++ = 0; /* NULL WORD */ width = cols; - for (i = 1; i < rows; i += interlace) { + for (i = 0; i < (rows/interlace); i++) { target = target_buffer; if ( notclipped(bktr, i, width)) { split(bktr, (volatile u_long **) &dma_prog, @@ -3450,10 +3448,18 @@ build_dma_prog( bktr_ptr_t bktr, char i_flag ) rows = bktr->rows; cols = bktr->cols; + bktr->vbiflags &= ~VBI_CAPTURE; /* default - no vbi capture */ + /* If /dev/vbi is already open, then use the rgb_vbi RISC program */ - if (pf_int->public.type == METEOR_PIXTYPE_RGB) { + if ( (pf_int->public.type == METEOR_PIXTYPE_RGB) + &&(bktr->vbiflags & VBI_OPEN) ) { + if (i_flag==1) bktr->bktr_cap_ctl |= BT848_CAP_CTL_VBI_EVEN; + if (i_flag==2) bktr->bktr_cap_ctl |= BT848_CAP_CTL_VBI_ODD; + if (i_flag==3) bktr->bktr_cap_ctl |= + BT848_CAP_CTL_VBI_EVEN | BT848_CAP_CTL_VBI_ODD; bktr->bktr_cap_ctl |= BT848_CAP_CTL_VBI_EVEN | BT848_CAP_CTL_VBI_ODD; + bktr->vbiflags |= VBI_CAPTURE; rgb_vbi_prog(bktr, i_flag, cols, rows, interlace); return; } |
