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

📄 xp_osi_cchan.c

📁 IBM source for pallas/vulcan/vesta
💻 C
📖 第 1 页 / 共 2 页
字号:
/*----------------------------------------------------------------------------+|       This source code has been made available to you by IBM on an AS-IS|       basis.  Anyone receiving this source is licensed under IBM|       copyrights to use it in any way he or she deems fit, including|       copying it, modifying it, compiling it, and redistributing it either|       with or without modifications.  No license under IBM patents or|       patent applications is to be implied by the copyright license.||       Any user of this software should understand that IBM cannot provide|       technical support for this software and will not be responsible for|       any consequences resulting from the use of this software.||       Any person who transfers this source code or any derivative work|       must include the IBM copyright notice, this paragraph, and the|       preceding two paragraphs in the transferred software.||       COPYRIGHT   I B M   CORPORATION 1998|       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M+----------------------------------------------------------------------------*//*----------------------------------------------------------------------------+||   Author    :  Ian Govett and Paul Gramann|   Component :  xp|   File      :  xp_cchan.c|   Purpose   :  Channel change functions.|   Changes   :|   Date       By   Comments|   ---------  ---  ------------------------------------------------------|   27-Apr-98       Created|   22-Jun-99  PAG  Added stat and clear stat commands|   01-Feb-00  RLB  Removed printf's from pes_error.|   02-Jun-01  TJC  Substituted "demux_" calls for "xp_" calls.|   04-Jun-01  TJC  Moved from "menus" to "xp" folder.|   30-Sep-01  LGH  ported to Linux|   10-Jan-02  LGH  Added xp_osi_sync_stop when pcr = 0x1fff+----------------------------------------------------------------------------*//* The necessary header files */#include <linux/config.h>#include <linux/version.h>#ifdef MODVERSIONS#include <linux/modversions.h>#endif#define  __NO_VERSION__#include <linux/module.h>#include <linux/kernel.h>#include <linux/types.h>#include  <vid/vid_types.h>#include "xp_osi_global.h"#include "xp_atom_reg.h"GLOBAL_RESOURCES *pGlobal=NULL;extern XP_STC_NOTIFY_FN stc_notify_fn;SEMAPHORE_T     sema;void hardware_cchan (USHORT audio_pid,USHORT video_pid,USHORT pcr_pid);void hardware_audio_cchan(USHORT audio_pid);void hardware_video_cchan(USHORT video_pid);void hardware_pcr_cchan(USHORT pcr_pid);extern void vid_atom_set_sfm(vidsfm_t sfm);/*----------------------------------------------------------------------------+| XXXX   XX   XX   XXXXXX  XXXXXXX  XXXXXX   XX   XX     XX    XXXX|  XX    XXX  XX   X XX X   XX   X   XX  XX  XXX  XX    XXXX    XX|  XX    XXXX XX     XX     XX X     XX  XX  XXXX XX   XX  XX   XX|  XX    XX XXXX     XX     XXXX     XXXXX   XX XXXX   XX  XX   XX|  XX    XX  XXX     XX     XX X     XX XX   XX  XXX   XXXXXX   XX|  XX    XX   XX     XX     XX   X   XX  XX  XX   XX   XX  XX   XX  XX| XXXX   XX   XX    XXXX   XXXXXXX  XXX  XX  XX   XX   XX  XX  XXXXXXX+----------------------------------------------------------------------------*//*----------------------------------------------------------------------------+|  hardware_cchan+----------------------------------------------------------------------------*/void hardware_cchan (USHORT audio_pid,                            USHORT video_pid,                            USHORT pcr_pid){    if(pGlobal == NULL)        return;    hardware_audio_cchan(audio_pid);    hardware_video_cchan(video_pid);    hardware_pcr_cchan(pcr_pid);    return;}void hardware_audio_cchan(USHORT audio_pid){    if(pGlobal == NULL)        return;    pGlobal->ChanChanInfo.xp_cchan_audchan_pending = 1;    pGlobal->ChanChanInfo.xp_cchan_audpid          = audio_pid;    xp_osi_channel_set_pid(pGlobal,XP_CHANNEL_CC_AUDIO, audio_pid);    return;}void hardware_video_cchan(USHORT video_pid){    if(pGlobal == NULL)        return;    pGlobal->ChanChanInfo.xp_cchan_vidchan_pending = 1;    pGlobal->ChanChanInfo.xp_cchan_vidpid          = video_pid;    vid_atom_set_sfm(VID_SFM_FIRST_ONLY);    xp_osi_channel_set_pid(pGlobal,XP_CHANNEL_CC_VIDEO, video_pid);    return;}void hardware_pcr_cchan(USHORT pcr_pid){    if(pGlobal == NULL)        return;    if(stc_notify_fn != NULL)        (*stc_notify_fn)(pGlobal,STC_REMOVED);    pGlobal->ChanChanInfo.xp_cchan_pcrpid          = pcr_pid;    xp_osi_clk_set_pid(pGlobal,pcr_pid);    return;}/*----------------------------------------------------------------------------+| aud_cc_done+----------------------------------------------------------------------------*/void aud_cc_done(){   /*-------------------------------------------------------------------------+   | Disable Audio Synchronization   +-------------------------------------------------------------------------*/    if(pGlobal == NULL)        return;    xp_atom_disable_aud_sync();   /*-------------------------------------------------------------------------+   | Complete Pending Channel Change and Force Audio STC Update   +-------------------------------------------------------------------------*/   pGlobal->ChanChanInfo.xp_cchan_audchan_pending = 0;   if ((pGlobal->ChanChanInfo.xp_cchan_vidchan_pending==0)       && (pGlobal->ChanChanInfo.xp_cchan_next!=0))   {       if(pGlobal->ChanChanInfo.xp_cchan_next_audpid != 0x1fff)       {           hardware_audio_cchan(pGlobal->ChanChanInfo.xp_cchan_next_audpid);           pGlobal->ChanChanInfo.xp_cchan_next_audpid = 0x1fff;       }       if(pGlobal->ChanChanInfo.xp_cchan_next_vidpid != 0x1fff)       {           hardware_video_cchan(pGlobal->ChanChanInfo.xp_cchan_next_vidpid);           pGlobal->ChanChanInfo.xp_cchan_next_vidpid = 0x1fff;       }       if(pGlobal->ChanChanInfo.xp_cchan_next_pcrpid != 0x1fff)       {           hardware_pcr_cchan(pGlobal->ChanChanInfo.xp_cchan_next_pcrpid);           pGlobal->ChanChanInfo.xp_cchan_next_pcrpid = 0x1fff;       }       pGlobal->ChanChanInfo.xp_cchan_next=0;   }   xp_osi_pcr_sync();}/*----------------------------------------------------------------------------+| vid_cc_done+----------------------------------------------------------------------------*/void vid_cc_done(){    if(pGlobal == NULL)        return; /*-------------------------------------------------------------------------+   | Disable Video Synchronization   +-------------------------------------------------------------------------*/    xp_atom_disable_vid_sync();   /*-------------------------------------------------------------------------+   | Complete Pending Channel Change   +-------------------------------------------------------------------------*/   pGlobal->ChanChanInfo.xp_cchan_vidchan_pending = 0;   if ((pGlobal->ChanChanInfo.xp_cchan_audchan_pending!=0) && (xp_atom_a_hw_cc_inprogress()==0))   {      pGlobal->ChanChanInfo.xp_cchan_audchan_pending=0;   }   if ((pGlobal->ChanChanInfo.xp_cchan_audchan_pending==0) &&       (pGlobal->ChanChanInfo.xp_cchan_next!=0))   {       if(pGlobal->ChanChanInfo.xp_cchan_next_audpid != 0x1fff)       {           hardware_audio_cchan(pGlobal->ChanChanInfo.xp_cchan_next_audpid);           pGlobal->ChanChanInfo.xp_cchan_next_audpid = 0x1fff;       }       if(pGlobal->ChanChanInfo.xp_cchan_next_vidpid != 0x1fff)       {           hardware_video_cchan(pGlobal->ChanChanInfo.xp_cchan_next_vidpid);           pGlobal->ChanChanInfo.xp_cchan_next_vidpid = 0x1fff;       }       if(pGlobal->ChanChanInfo.xp_cchan_next_pcrpid != 0x1fff)       {           hardware_pcr_cchan(pGlobal->ChanChanInfo.xp_cchan_next_pcrpid);           pGlobal->ChanChanInfo.xp_cchan_next_pcrpid = 0x1fff;       }       pGlobal->ChanChanInfo.xp_cchan_next=0;   }   /*-------------------------------------------------------------------------+   | Unmute if Necessary and Force Video STC Update   +-------------------------------------------------------------------------*/   xp_osi_pcr_sync();}/*----------------------------------------------------------------------------+| trans_aud_cc_done+----------------------------------------------------------------------------*/static void trans_aud_cc_done(GLOBAL_RESOURCES *pGlobal0, SHORT wChannelId, ULONG ulInterrupt){   if(pGlobal0 == NULL || pGlobal0->uDeviceIndex != 0)       return ;   pGlobal->ChanChanInfo.xp_cchan_audsig++;}/*----------------------------------------------------------------------------+| trans_vid_cc_done+----------------------------------------------------------------------------*/static void trans_vid_cc_done(GLOBAL_RESOURCES *pGlobal0, SHORT wChannelId, ULONG ulInterrupt){   if(pGlobal0 == NULL || pGlobal0->uDeviceIndex != 0)       return;   pGlobal->ChanChanInfo.xp_cchan_vidsig++;}/*----------------------------------------------------------------------------+

⌨️ 快捷键说明

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