⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ttx_vbi.c

📁 IBM source for pallas/vulcan/vesta
💻 C
📖 第 1 页 / 共 2 页
字号:
  /*--------------------------------------------------------------------------+  | Get current STC value  +--------------------------------------------------------------------------*/  stc = xp0_dcr_read(XP_DCR_ADDR_STCHI);  while ((mb = ttxstat->pes_queue) != NULL) {      pts = ((Ttx_mbuf_t)DATA_PTR(mb))->pts;      delta = pts - stc;      /*----------------------------------------------------------------------+      | PTS is matched to STC, write to VBI buffer      +----------------------------------------------------------------------*/      if ((TTX_PTS_MATCH_MIN < delta)     &&         (delta < TTX_PTS_MATCH_MAX)      &&         (get_field(mb) == field_update)) {          write_vbi(vbi_base, mb);          ttx_m_deq(&ttxstat->pes_queue);          ttx_m_enq(&ttxstat->done_queue, mb);          ttxstat->stax.inbound_pes++;          break;      /*----------------------------------------------------------------------+      | Do nothing. This data should be processed future VBI_START      +----------------------------------------------------------------------*/      } else if ((TTX_PTS_OUTBOUND_LOW < delta)   &&                 (delta < TTX_PTS_OUTBOUND_HIGH)) {          break;      /*----------------------------------------------------------------------+      | Out of range, discard data and continue loop to process next      +----------------------------------------------------------------------*/      } else {          ttx_m_deq(&ttxstat->pes_queue);          ttx_m_enq(&ttxstat->done_queue, mb);          ttxstat->stax.outbound_pes++;          continue;      }  }  /*--------------------------------------------------------------------------+  | Set VBI pointer for next VBI scan  +--------------------------------------------------------------------------*/  if (field_id&1) {      powerpcMtvid0_memcntl(powerpcMfvid0_memcntl()&~DRAM_VBI_POINTER);  } else {      powerpcMtvid0_memcntl(powerpcMfvid0_memcntl()|DRAM_VBI_POINTER);  }  return;}/*----------------------------------------------------------------------------+| XXXXXXX  XXX XXX   XXXXXX  XXXXXXX  XXXXXX   XX   XX     XX    XXXX|  XX   X   XX XX    X XX X   XX   X   XX  XX  XXX  XX    XXXX    XX|  XX X      XXX       XX     XX X     XX  XX  XXXX XX   XX  XX   XX|  XXXX       X        XX     XXXX     XXXXX   XX XXXX   XX  XX   XX|  XX X      XXX       XX     XX X     XX XX   XX  XXX   XXXXXX   XX|  XX   X   XX XX      XX     XX   X   XX  XX  XX   XX   XX  XX   XX  XX| XXXXXXX  XXX XXX    XXXX   XXXXXXX  XXX  XX  XX   XX   XX  XX  XXXXXXX+----------------------------------------------------------------------------*//*----------------------------------------------------------------------------+| ttx_vsync_handler| This function is called anytime there is a video decoder interrupt,| but only VBI Start interrupts are processed.+----------------------------------------------------------------------------*/void ttx_vsync_handler(){  unsigned long reg;  reg = stb_vid_int_status;  if ((reg & DECOD_HOST_MASK_VBI_START) != 0) {     ttx_vbi_send();  }  return;}/*----------------------------------------------------------------------------+|  ttx_vbi_init|  Setup video decorder to enable teletext processing.+----------------------------------------------------------------------------*/int ttx_vbi_init(void){  unsigned int reg;  unsigned int vdly;  /*--------------------------------------------------------------------------+  | Check video mode. This ttx driver supports PAL mode only.  +--------------------------------------------------------------------------*/  if (!(powerpcMfvid0_dispm()&DECOD_DISP_MODE_PAL_MODE)) {      return(E_TTX_BAD_DISP_MODE);  }  /*--------------------------------------------------------------------------+  | Check how many VBI lines were assumed by Video Driver.  | Set VBI line Count  +--------------------------------------------------------------------------*/  ttxstat->num_vbi_lines = VID_VBI_LINES;  if (ttxstat->num_vbi_lines < 16) {     return(E_TTX_LESS_VBI_COUNT);  } else {     reg = powerpcMfvid0_vbcntl() & (~DECOD_VBI_CTL_VBI_LINE_MASK);     powerpcMtvid0_vbcntl(reg | ttxstat->num_vbi_lines);  }  /*--------------------------------------------------------------------------+  | Adjust VSYNC delay  +--------------------------------------------------------------------------*/  vdly = 23 - ttxstat->num_vbi_lines;  powerpcMtvid0_dispd((powerpcMfvid0_dispd()&~0xff)|(vdly&0xff));  /*--------------------------------------------------------------------------+  | Map VBI Logical Address  +--------------------------------------------------------------------------*/  if (vid_osd_map_vbi_laddr((ULONG *)&ttxstat->vbi0_addr,                            (ULONG *)&ttxstat->vbi1_addr) != 0) {     return(E_TTX_BAD_VBI_ADDR);  }  /*--------------------------------------------------------------------------+  | Configure TTX control for field 1. All lines for TELETEXT  +--------------------------------------------------------------------------*/  powerpcMtvid0_vbcntl(powerpcMfvid0_vbcntl()&~DECOD_VBI_CTL_TTX_INDEX_MASK);  powerpcMtvid0_ttxcntl(0xffffffff);  /*--------------------------------------------------------------------------+  | Configure TTX control for field 2. All lines for TELETEXT  +--------------------------------------------------------------------------*/  powerpcMtvid0_vbcntl(powerpcMfvid0_vbcntl()|DECOD_VBI_CTL_TTX_INDEX_MASK);  powerpcMtvid0_ttxcntl(0xffffffff);  /*--------------------------------------------------------------------------+  | Attach to Video Decoder Interrupt Handler to receive VBI Start interrupts  +--------------------------------------------------------------------------*/#if 1  if (request_irq(IRQ_VID, ttx_vsync_handler, SA_SHIRQ,                  "TTXvbi", &ttx_vbi_init) != 0) {     vid_osd_unmap_vbi_laddr();     return(E_TTX_VDC_INT_NOTIFY);  }  vid_atom_set_irq_mask(vid_atom_get_irq_mask() | DECOD_HOST_MASK_VBI_START);#else  if (vid_atom_ttx_add_notify(ttx_vsync_handler,DECOD_HOST_MASK_VBI_START) != 0) {     vid_osd_unmap_vbi_laddr();     return(E_TTX_VDC_INT_NOTIFY);  }#endif  return(0);}/*----------------------------------------------------------------------------+|  ttx_vbi_term|  Setup video decorder to enable teletext processing.+----------------------------------------------------------------------------*/int ttx_vbi_term(void){  unsigned int reg;  /*--------------------------------------------------------------------------+  | Remove notification of Video Decoder interrupts for VBI Start  +--------------------------------------------------------------------------*/#if 1  vid_atom_set_irq_mask(vid_atom_get_irq_mask() & (~DECOD_HOST_MASK_VBI_START));  free_irq(IRQ_VID, &ttx_vbi_init);#else  if (vid_atom_ttx_del_notify(ttx_vsync_handler,DECOD_HOST_MASK_VBI_START) != 0) {     return(E_TTX_VDC_INT_NOTIFY);  }#endif  /*--------------------------------------------------------------------------+  | Change TTX control to reset value  +--------------------------------------------------------------------------*/  powerpcMtvid0_vbcntl(powerpcMfvid0_vbcntl()&~DECOD_VBI_CTL_TTX_INDEX_MASK);  powerpcMtvid0_ttxcntl(0x00000000);  powerpcMtvid0_vbcntl(powerpcMfvid0_vbcntl()|DECOD_VBI_CTL_TTX_INDEX_MASK);  powerpcMtvid0_ttxcntl(0x00000000);  /*--------------------------------------------------------------------------+  | Reset number of VBI lines  +--------------------------------------------------------------------------*/  ttxstat->num_vbi_lines = 0;  reg = powerpcMfvid0_vbcntl() & (~DECOD_VBI_CTL_VBI_LINE_MASK);  powerpcMtvid0_vbcntl(reg | ttxstat->num_vbi_lines);  /*--------------------------------------------------------------------------+  | Unmap VBI Logical Address  +--------------------------------------------------------------------------*/  vid_osd_unmap_vbi_laddr();  return(0);}/*----------------------------------------------------------------------------+|   XX     XXXXXX    XXXXXX    XXXXX|  XXXX    XX   XX     XX     XX   XX| XX  XX   XX   XX     XX      XX| XX  XX   XXXXX       XX        XX| XXXXXX   XX          XX         XX| XX  XX   XX          XX     XX   XX| XX  XX   XX        XXXXXX    XXXXX+----------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -