📄 xp_osi_cchan.c
字号:
| trans_audvid_cc_done+----------------------------------------------------------------------------*/static void trans_audvid_cc_done(GLOBAL_RESOURCES *pGlobal0, SHORT wChannelId, ULONG ulInterrupt){ if(pGlobal0 == NULL || pGlobal0->uDeviceIndex != 0) return; xp_osi_pcr_sync();}/*----------------------------------------------------------------------------+| 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+----------------------------------------------------------------------------*//*----------------------------------------------------------------------------+| xp0_cchan_init+----------------------------------------------------------------------------*/SHORT xp_osi_cchan_init(GLOBAL_RESOURCES *pGlobal0){ int rc; pGlobal = pGlobal0; if(pGlobal == NULL || pGlobal->uDeviceIndex != 0) return -1; pGlobal->ChanChanInfo.xp_cchan_audchan = XP_ERROR_CHANNEL_INVALID; pGlobal->ChanChanInfo.xp_cchan_audchan_pending = 0; pGlobal->ChanChanInfo.xp_cchan_audpid = 0x1fff; pGlobal->ChanChanInfo.xp_cchan_audsig = 0; pGlobal->ChanChanInfo.xp_cchan_next = 0; pGlobal->ChanChanInfo.xp_cchan_next_audpid = 0x1fff; pGlobal->ChanChanInfo.xp_cchan_next_vidpid = 0x1fff; pGlobal->ChanChanInfo.xp_cchan_next_pcrpid = 0x1fff; pGlobal->ChanChanInfo.xp_cchan_pcrpid = 0x1fff; pGlobal->ChanChanInfo.xp_cchan_vidchan = XP_ERROR_CHANNEL_INVALID; pGlobal->ChanChanInfo.xp_cchan_vidchan_pending = 0; pGlobal->ChanChanInfo.xp_cchan_vidpid = 0x1fff; pGlobal->ChanChanInfo.xp_cchan_vidsig = 0; pGlobal->ChanChanInfo.xp_cchan_vid_oflw = 0; pGlobal->ChanChanInfo.xp_cchan_aud_oflw = 0; pGlobal->ChanChanInfo.xp_cchan_def_oflw = 0; /*-------------------------------------------------------------------------+ | Set-up Audio and Video Channel Change Complete Interrupt Handlers +-------------------------------------------------------------------------*/ //lingh delete /*-------------------------------------------------------------------------+ | Set-up Transport Audio/Video Channel Change Complete Interrupt Handlers +-------------------------------------------------------------------------*/ if ((rc = xp_osi_interrupt_notify (pGlobal,XP_INTERRUPT_NOTIFY_ADD, XP_INTERRUPT_IR_ACCC, (PFS)trans_aud_cc_done)) != 0) { return(rc); } if ((rc = xp_osi_interrupt_notify (pGlobal,XP_INTERRUPT_NOTIFY_ADD, XP_INTERRUPT_IR_VCCC, (PFS)trans_vid_cc_done)) != 0) { return(rc); } if ((rc = xp_osi_interrupt_notify (pGlobal,XP_INTERRUPT_NOTIFY_ADD, XP_INTERRUPT_IR_ACCC | XP_INTERRUPT_IR_VCCC, (PFS)trans_audvid_cc_done)) != 0) { return(rc); } sema = os_create_semaphore(1); 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+----------------------------------------------------------------------------*//*----------------------------------------------------------------------------+| xp0_cchan_auto+----------------------------------------------------------------------------*/void xp_osi_video_cchan_auto(GLOBAL_RESOURCES *pGlobal0,unsigned short vpid){ unsigned long crit; /*-------------------------------------------------------------------------+ | Issue a Manual Channel Change When Audio and Video not Playing +-------------------------------------------------------------------------*/ if ((vpid == 0x1fff) ) { xp_osi_cchan_stop_video(); xp_osi_cchan_start_video(vpid); /*-------------------------------------------------------------------------+ | Use Hardware Channel Change if Audio and Video is Already Playing +-------------------------------------------------------------------------*/ } else { crit = os_enter_critical_section(); if (!pGlobal->ChanChanInfo.xp_cchan_vidchan_pending) { hardware_video_cchan(vpid); } /*----------------------------------------------------------------------+ | Channel change is still pending, set the waiting flag +----------------------------------------------------------------------*/ else { //lingh added for test os_wait_semaphore(sema,100); hardware_video_cchan(vpid); pGlobal->ChanChanInfo.xp_cchan_vidchan_pending = 0; pGlobal->ChanChanInfo.xp_cchan_next = 1; pGlobal->ChanChanInfo.xp_cchan_next_vidpid = vpid; } os_leave_critical_section(crit); } return;}void xp_osi_audio_cchan_auto(GLOBAL_RESOURCES *pGlobal0,unsigned short apid){ unsigned long crit; /*-------------------------------------------------------------------------+ | Issue a Manual Channel Change When Audio and Video not Playing +-------------------------------------------------------------------------*/ if ((apid == 0x1fff)) { xp_osi_cchan_stop_audio(); xp_osi_cchan_start_audio(apid); /*-------------------------------------------------------------------------+ | Use Hardware Channel Change if Audio and Video is Already Playing +-------------------------------------------------------------------------*/ } else { crit = os_enter_critical_section(); if (!pGlobal->ChanChanInfo.xp_cchan_audchan_pending) { hardware_audio_cchan(apid); } /*----------------------------------------------------------------------+ | Channel change is still pending, set the waiting flag +----------------------------------------------------------------------*/ else { os_wait_semaphore(sema,100); hardware_audio_cchan(apid); pGlobal->ChanChanInfo.xp_cchan_audchan_pending = 0; pGlobal->ChanChanInfo.xp_cchan_next = 1; pGlobal->ChanChanInfo.xp_cchan_next_audpid = apid; } os_leave_critical_section(crit); } return;}void xp_osi_pcr_cchan_auto(GLOBAL_RESOURCES *pGlobal0,unsigned short ppid){ hardware_pcr_cchan(ppid); /*-------------------------------------------------------------------------+ | Enable Synchronization +-------------------------------------------------------------------------*/ if (ppid == 0x1fff) { xp_osi_pcr_sync_stop(); //added in Jan.10/2002 (void)xp_atom_a_hw_sync_off(); (void)xp_atom_v_hw_sync_off(); } else { xp_osi_pcr_sync_start(); } return;}/*----------------------------------------------------------------------------+| xp0_cchan_start_audio+----------------------------------------------------------------------------*/int xp_osi_cchan_start_audio(unsigned short pid){ return(0);}/*----------------------------------------------------------------------------+| xp0_cchan_start_video+----------------------------------------------------------------------------*/int xp_osi_cchan_start_video(unsigned short pid){ return(0);}/*----------------------------------------------------------------------------+| xp0_cchan_start_pcr+----------------------------------------------------------------------------*/void xp_osi_cchan_start_pcr(unsigned short pid){}/*----------------------------------------------------------------------------+| xp0_cchan_stop_audio+----------------------------------------------------------------------------*/int xp_osi_cchan_stop_audio(void){ return(0);}/*----------------------------------------------------------------------------+| xp0_cchan_stop_video+----------------------------------------------------------------------------*/int xp_osi_cchan_stop_video(void){ return(0);}/*----------------------------------------------------------------------------+| xp0_cchan_stop_pcr+----------------------------------------------------------------------------*/void xp_osi_cchan_stop_pcr(void){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -