1035 lines
27 KiB
C
1035 lines
27 KiB
C
//***************************************************************************
|
||
// Decoder process
|
||
//
|
||
//***************************************************************************
|
||
|
||
#include "common.h"
|
||
#include "regs.h"
|
||
#include "dvdcmd.h"
|
||
|
||
// allocate decoder data area and put 'blind' ptr to it in our device ext
|
||
PVOID decAllocateDecoderInfo( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
PMasterDecoder pDec = (PMasterDecoder) ExAllocatePool(NonPagedPool,
|
||
sizeof(MasterDecoder));
|
||
|
||
ASSERT( pDec );
|
||
if (!pDec)
|
||
return NULL;
|
||
|
||
pDec->StreamType = STREAM_MODE_DVD;
|
||
pDec->TVType = DISPLAY_MODE_NTSC;
|
||
pDec->VideoAspect = ASPECT_04_03;
|
||
pDec->LetterBox = FALSE;
|
||
pDec->PanScan = FALSE;
|
||
|
||
pDec->ADec.AudioMode = AUDIO_TYPE_AC3;
|
||
pDec->VPro.AudioMode = pDec->ADec.AudioMode;
|
||
|
||
pDec->ADec.AudioType = AUDIO_OUT_ANALOG;
|
||
pDec->AudioVolume = 0x7f;
|
||
// ?? No copying is permitted
|
||
pDec->ADec.AudioCgms = AUDIO_CGMS_03; // ( 0<=aCgms && aCgms<=3 ) ? aCgms : 3;
|
||
|
||
pDec->ADec.AudioFreq = AUDIO_FS_48;
|
||
|
||
pDec->VideoMute = FALSE;
|
||
pDec->AudioMute = FALSE;
|
||
pDec->VPro.SubpicMute = FALSE;
|
||
pDec->OSDMute = TRUE;
|
||
pDec->SubpicHilite = FALSE;
|
||
|
||
pDec->PlayMode = PLAY_MODE_NORMAL;
|
||
pDec->RunMode = PLAY_MODE_NORMAL; // PlayMode after BOOT is Normal Mode;
|
||
pDec->CPgd.ACGchip = NO_ACG;
|
||
|
||
pDec->ADec.pDack = &(pDec->DAck);
|
||
|
||
|
||
if( pDec->VPro.SubpicMute )
|
||
pDec->VPro.VproCOMMAND_REG = 0xA0; // see specifications (date 96.09.26 spec)
|
||
else
|
||
pDec->VPro.VproCOMMAND_REG = 0x20; // see specifications (date 96.09.26 spec)
|
||
|
||
pHwDevExt->DecoderInfo = pDec; //set back-pointer to this info in dev ext
|
||
return (PVOID ) pDec;
|
||
}
|
||
|
||
void decVsyncOn( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
PCIF_VSYNC_ON( pHwDevExt );
|
||
}
|
||
|
||
void decClosedCaptionOn( PHW_DEVICE_EXTENSION pHwDevExt ) //turn on/off closed caption
|
||
{
|
||
USCC_on( pHwDevExt );
|
||
}
|
||
void decClosedCaptionOff( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
USCC_discont( pHwDevExt );
|
||
}
|
||
|
||
|
||
ULONG decGetVideoSTCA( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
return VIDEO_GET_STCA( pHwDevExt );
|
||
}
|
||
|
||
|
||
//DMA routines
|
||
void decSetDma0Size( PHW_DEVICE_EXTENSION pHwDevExt, ULONG dmaSize )
|
||
{
|
||
PCIF_SET_DMA0_SIZE( pHwDevExt, dmaSize );
|
||
}
|
||
void decSetDma1Size( PHW_DEVICE_EXTENSION pHwDevExt, ULONG dmaSize )
|
||
{
|
||
PCIF_SET_DMA1_SIZE( pHwDevExt, dmaSize );
|
||
}
|
||
void decSetDma0Addr( PHW_DEVICE_EXTENSION pHwDevExt, ULONG dmaAddr )
|
||
{
|
||
PCIF_SET_DMA0_ADDR( pHwDevExt, dmaAddr );
|
||
}
|
||
void decSetDma1Addr( PHW_DEVICE_EXTENSION pHwDevExt, ULONG dmaAddr )
|
||
{
|
||
PCIF_SET_DMA1_ADDR( pHwDevExt, dmaAddr );
|
||
}
|
||
void decSetDma0Start( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
PCIF_DMA0_START( pHwDevExt );
|
||
}
|
||
void decSetDma1Start( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
PCIF_DMA1_START( pHwDevExt );
|
||
}
|
||
|
||
// actual start video decoding at various speeds
|
||
void decDecodeStartNormal( PHW_DEVICE_EXTENSION pHwDevExt, DWORD dwSTC )
|
||
{
|
||
AUDIO_ZR38521_MUTE_ON( pHwDevExt );
|
||
|
||
VIDEO_PRSO_PS1( pHwDevExt );
|
||
VIDEO_PLAY_NORMAL( pHwDevExt );
|
||
decSetVideoPlayMode( pHwDevExt, PLAY_MODE_NORMAL);
|
||
decSetVideoRunMode( pHwDevExt, PLAY_MODE_NORMAL);
|
||
VIDEO_SET_STCS( pHwDevExt,dwSTC );
|
||
AUDIO_ZR38521_VDSCR_ON( pHwDevExt,dwSTC );
|
||
|
||
if( decGetSubpicMute(pHwDevExt ) == TRUE )
|
||
SUBP_MUTE_ON( pHwDevExt );
|
||
else
|
||
SUBP_MUTE_OFF( pHwDevExt );
|
||
|
||
if( pHwDevExt->DataDiscontFlagCount & VIDEO_DISCONT_FLAG ) {
|
||
// when decode new data
|
||
SUBP_SET_STC( pHwDevExt, dwSTC );
|
||
}
|
||
else {
|
||
// when recover underflow
|
||
// Don't set stc, because sub stc is reset.
|
||
}
|
||
SUBP_STC_ON( pHwDevExt );
|
||
|
||
decHighlight( pHwDevExt, &(pHwDevExt->hli) );
|
||
|
||
VIDEO_UFLOW_INT_ON( pHwDevExt );
|
||
VIDEO_BUG_PRE_SEARCH_04( pHwDevExt );
|
||
VIDEO_DECODE_START( pHwDevExt );
|
||
AUDIO_ZR38521_PLAY( pHwDevExt );
|
||
VPRO_VIDEO_MUTE_OFF( pHwDevExt );
|
||
CGuard_CPGD_VIDEO_MUTE_OFF( pHwDevExt );
|
||
|
||
// VIDEO_SEEMLESS_ON( pHwDevExt );
|
||
}
|
||
void decDecodeStartFast( PHW_DEVICE_EXTENSION pHwDevExt, DWORD dwSTC )
|
||
{
|
||
|
||
VIDEO_PRSO_NON( pHwDevExt );
|
||
VIDEO_PLAY_NORMAL( pHwDevExt );
|
||
VIDEO_UFLOW_INT_OFF( pHwDevExt );
|
||
AUDIO_ZR38521_MUTE_ON( pHwDevExt );
|
||
VIDEO_BUG_PRE_SEARCH_04( pHwDevExt );
|
||
VIDEO_DECODE_START( pHwDevExt );
|
||
VIDEO_SYSTEM_STOP( pHwDevExt );
|
||
VIDEO_PLAY_FAST( pHwDevExt, FAST_ONLYI );
|
||
VIDEO_SYSTEM_START( pHwDevExt );
|
||
|
||
AUDIO_ZR38521_PLAY( pHwDevExt );
|
||
dwSTC = decGetVideoSTCA(pHwDevExt );
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: dwSTC = %lx\r\n", dwSTC) );
|
||
}
|
||
|
||
void decDecodeStartSlow( PHW_DEVICE_EXTENSION pHwDevExt, DWORD dwSTC )
|
||
{
|
||
VIDEO_PRSO_PS1( pHwDevExt );
|
||
SUBP_SET_AUDIO_NON( pHwDevExt );
|
||
VIDEO_PLAY_SLOW( pHwDevExt, (UCHAR)(pHwDevExt->Rate/10000) );
|
||
|
||
VIDEO_SET_STCS( pHwDevExt, dwSTC );
|
||
AUDIO_ZR38521_STOP( pHwDevExt );
|
||
AUDIO_ZR38521_MUTE_ON( pHwDevExt );
|
||
if( decGetSubpicMute(pHwDevExt ) == TRUE )
|
||
SUBP_MUTE_ON( pHwDevExt );
|
||
else
|
||
SUBP_MUTE_OFF( pHwDevExt );
|
||
|
||
if( pHwDevExt->DataDiscontFlagCount & VIDEO_DISCONT_FLAG ) {
|
||
// when decode new data
|
||
SUBP_SET_STC( pHwDevExt, dwSTC );
|
||
}
|
||
else {
|
||
// when recover underflow
|
||
// Don't set stc, because sub stc is reset.
|
||
}
|
||
SUBP_STC_ON( pHwDevExt );
|
||
VIDEO_UFLOW_INT_ON( pHwDevExt );
|
||
VIDEO_BUG_PRE_SEARCH_04( pHwDevExt );
|
||
VIDEO_DECODE_START( pHwDevExt );
|
||
VPRO_VIDEO_MUTE_OFF( pHwDevExt );
|
||
CGuard_CPGD_VIDEO_MUTE_OFF( pHwDevExt );
|
||
|
||
}
|
||
|
||
|
||
// Set CGMS for Digital Audio Copy Guard & NTSC Analog Copy Guard
|
||
void decDvdTitleCopyKey( PHW_DEVICE_EXTENSION pHwDevExt, PKS_DVDCOPY_TITLEKEY pTitleKey )
|
||
{
|
||
ULONG cgms;
|
||
BOOLEAN bStatus = Cpp_TitleKey( pHwDevExt, pTitleKey );
|
||
|
||
ASSERTMSG( "\r\n...CPro Status Error!!( TitleKey )", bStatus );
|
||
|
||
cgms = (pTitleKey->KeyFlags & 0x30) >> 4;
|
||
|
||
// for Digital Audio Copy Guard
|
||
((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioCgms =
|
||
( 0<=cgms && cgms<=3 ) ? cgms : 3;
|
||
|
||
|
||
AUDIO_ZR38521_REPEAT_16( pHwDevExt );
|
||
AUDIO_TC9425_INIT_DIGITAL( pHwDevExt );
|
||
AUDIO_TC9425_INIT_ANALOG( pHwDevExt );
|
||
|
||
// for NTSC Analog Copy Guard
|
||
CGuard_CPGD_SET_CGMS( pHwDevExt, cgms );
|
||
|
||
}
|
||
|
||
BOOLEAN decCpp_reset( PHW_DEVICE_EXTENSION pHwDevExt, CPPMODE mode )
|
||
{
|
||
return Cpp_reset( pHwDevExt, mode );
|
||
}
|
||
|
||
BOOLEAN decCpp_decoder_challenge( PHW_DEVICE_EXTENSION pHwDevExt, PKS_DVDCOPY_CHLGKEY r1 )
|
||
{
|
||
return Cpp_decoder_challenge( pHwDevExt, r1 ) ;
|
||
}
|
||
|
||
BOOLEAN decCpp_drive_bus( PHW_DEVICE_EXTENSION pHwDevExt, PKS_DVDCOPY_BUSKEY fsr1 )
|
||
{
|
||
return Cpp_drive_bus( pHwDevExt, fsr1 );
|
||
}
|
||
|
||
BOOLEAN decCpp_drive_challenge( PHW_DEVICE_EXTENSION pHwDevExt, PKS_DVDCOPY_CHLGKEY r2 )
|
||
{
|
||
return Cpp_drive_challenge( pHwDevExt, r2 );
|
||
}
|
||
|
||
BOOLEAN decCpp_decoder_bus( PHW_DEVICE_EXTENSION pHwDevExt, PKS_DVDCOPY_BUSKEY fsr2 )
|
||
{
|
||
return Cpp_decoder_bus( pHwDevExt, fsr2 );
|
||
}
|
||
|
||
BOOLEAN decCpp_DiscKeyStart(PHW_DEVICE_EXTENSION pHwDevExt)
|
||
{
|
||
return Cpp_DiscKeyStart( pHwDevExt);
|
||
}
|
||
|
||
BOOLEAN decCpp_DiscKeyEnd(PHW_DEVICE_EXTENSION pHwDevExt)
|
||
{
|
||
return Cpp_DiscKeyEnd( pHwDevExt);
|
||
}
|
||
|
||
BOOLEAN decCpp_TitleKey( PHW_DEVICE_EXTENSION pHwDevExt, PKS_DVDCOPY_TITLEKEY tk )
|
||
{
|
||
return Cpp_TitleKey( pHwDevExt, tk );
|
||
}
|
||
|
||
|
||
|
||
|
||
// access/control composite picture
|
||
BOOLEAN decGetSubpicMute( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
return ((PMasterDecoder)pHwDevExt->DecoderInfo)->VPro.SubpicMute != 0;
|
||
}
|
||
|
||
void decSetSubpicMute( PHW_DEVICE_EXTENSION pHwDevExt, BOOLEAN flag )
|
||
{
|
||
((PMasterDecoder)pHwDevExt->DecoderInfo)->VPro.SubpicMute = flag;
|
||
if ( flag )
|
||
SUBP_MUTE_ON( pHwDevExt );
|
||
else
|
||
SUBP_MUTE_OFF( pHwDevExt );
|
||
}
|
||
|
||
|
||
// initialize the mpeg hw
|
||
void decInitMPEG( PHW_DEVICE_EXTENSION pHwDevExt, DWORD dwSTC )
|
||
{
|
||
DWORD st, et;
|
||
UCHAR mvar;
|
||
|
||
//DebugPrint(( DebugLevelTrace, "DVDTS:InitFirstTime\r\n" ));
|
||
//DebugPrint(( DebugLevelTrace, "DVDTS: STC 0x%x( 0x%s(100ns) )\r\n", dwSTC, DebugLLConvtoStr( ConvertPTStoStrm(dwSTC), 16 ) ));
|
||
// for debug
|
||
mvar = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + TC812_IRM );
|
||
mvar &= 0xEF;
|
||
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + TC812_IRM, mvar );
|
||
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + TC812_ERM, 0 );
|
||
//
|
||
st = GetCurrentTime_ms();
|
||
|
||
// TC81201F bug recovery
|
||
VIDEO_PLAY_STILL(pHwDevExt);
|
||
BadWait( 200 );
|
||
|
||
// normal process
|
||
VIDEO_SYSTEM_STOP(pHwDevExt);
|
||
VIDEO_DECODE_STOP(pHwDevExt);
|
||
AUDIO_ZR38521_STOP(pHwDevExt);
|
||
SUBP_STC_OFF(pHwDevExt);
|
||
|
||
// TC81201F bug recovery
|
||
VIDEO_BUG_PRE_SEARCH_01(pHwDevExt);
|
||
|
||
// normal process
|
||
VIDEO_STD_CLEAR(pHwDevExt);
|
||
VIDEO_USER_CLEAR(pHwDevExt);
|
||
VIDEO_UDAT_CLEAR(pHwDevExt);
|
||
AUDIO_ZR38521_STOPF(pHwDevExt);
|
||
if( pHwDevExt->DataDiscontFlagCount & VIDEO_DISCONT_FLAG ) {
|
||
// when decode new data
|
||
SUBP_RESET_INIT(pHwDevExt);
|
||
SUBP_BUFF_CLEAR(pHwDevExt);
|
||
}
|
||
else {
|
||
// when recover underflow
|
||
// Don't reset and clear buffer.
|
||
}
|
||
VIDEO_UFLOW_INT_OFF(pHwDevExt);
|
||
VIDEO_ALL_IFLAG_CLEAR(pHwDevExt);
|
||
PCIF_ALL_IFLAG_CLEAR(pHwDevExt);
|
||
PCIF_PACK_START_ON(pHwDevExt);
|
||
|
||
VIDEO_SYSTEM_START(pHwDevExt);
|
||
|
||
// TC81201F bug recovery
|
||
// Accoding to TOSHIBA MM lab. Hisatomi-san,
|
||
// BLACK DATA or SKIP DATA should be set from host bus.
|
||
// However the VxD is not implemented and work good,
|
||
// so the minidriver is not implemented too.
|
||
// If you need, insert code here.
|
||
|
||
// TC81201F bug recovery
|
||
VIDEO_PVSIN_OFF( pHwDevExt );
|
||
VIDEO_BUG_PRE_SEARCH_02( pHwDevExt );
|
||
|
||
// TC81201F bug recovery
|
||
BadWait( 200 );
|
||
// VIDEO_BUG_PRE_SEARCH_03( pHwDevExt );
|
||
// /* error check */ VIDEO_DECODE_STOP( pHwDevExt );
|
||
|
||
// TC81201F bug recovery
|
||
VIDEO_PVSIN_ON( pHwDevExt );
|
||
VIDEO_BUG_PRE_SEARCH_05( pHwDevExt );
|
||
|
||
// VIDEO_DECODE_INT_ON( pHwDevExt ); // Not Use ?
|
||
|
||
VIDEO_SET_STCS( pHwDevExt,dwSTC ); // ? ? ? ?
|
||
AUDIO_ZR38521_VDSCR_ON( pHwDevExt, dwSTC );
|
||
|
||
if( pHwDevExt->DataDiscontFlagCount & VIDEO_DISCONT_FLAG ) {
|
||
// when decode new data
|
||
SUBP_SET_STC( pHwDevExt, /* dwSTC */ 0 );
|
||
SUBP_BUFF_CLEAR( pHwDevExt );
|
||
}
|
||
else {
|
||
// when recover underflow
|
||
// Don't set stc, because sub stc is reset.
|
||
}
|
||
|
||
SUBP_MUTE_ON( pHwDevExt );
|
||
|
||
pHwDevExt->fCauseOfStop = 0;
|
||
|
||
et = GetCurrentTime_ms();
|
||
DebugPrint( (DebugLevelTrace, "DVDTS:init first time %dms\r\n", et - st ) );
|
||
}
|
||
|
||
|
||
|
||
BOOLEAN decSetStreamMode( PHW_DEVICE_EXTENSION pHwDevExt, PHW_STREAM_REQUEST_BLOCK pSrb ) // set stream modes on HW
|
||
{
|
||
// initialize decoder
|
||
NTSTATUS Stat = PCIF_RESET(pHwDevExt);
|
||
|
||
if( Stat != STATUS_SUCCESS ) {
|
||
DebugPrint( (DebugLevelTrace, "DVDTS:illegal config info") );
|
||
pSrb->Status = STATUS_IO_DEVICE_ERROR;
|
||
return FALSE;
|
||
}
|
||
VIDEO_RESET(pHwDevExt);
|
||
VPRO_RESET_FUNC(pHwDevExt);
|
||
SUBP_RESET_FUNC(pHwDevExt);
|
||
|
||
CGuard_CPGD_RESET_FUNC(pHwDevExt);
|
||
|
||
|
||
VIDEO_ALL_INT_OFF(pHwDevExt);
|
||
PCIF_VSYNC_ON(pHwDevExt);
|
||
VIDEO_MODE_DVD(pHwDevExt );
|
||
PCIF_PACK_START_ON(pHwDevExt);
|
||
return TRUE;
|
||
}
|
||
|
||
void decSetDisplayMode( PHW_DEVICE_EXTENSION pHwDevExt ) // set display mode on HW
|
||
{
|
||
|
||
BOOLEAN bStatus;
|
||
|
||
VIDEO_OUT_NTSC(pHwDevExt);
|
||
VPRO_INIT_NTSC(pHwDevExt);
|
||
CGuard_CPGD_INIT_NTSC(pHwDevExt);
|
||
PCIF_ASPECT_0403(pHwDevExt);
|
||
VPRO_VIDEO_MUTE_OFF(pHwDevExt);
|
||
CGuard_CPGD_VIDEO_MUTE_OFF(pHwDevExt);
|
||
|
||
// Set Digital Out
|
||
((PMasterDecoder)pHwDevExt->DecoderInfo)->VideoPort = 0; // Disable
|
||
PCIF_SET_DIGITAL_OUT( pHwDevExt, ((PMasterDecoder)pHwDevExt->DecoderInfo)->VideoPort );
|
||
|
||
|
||
bStatus = Cpp_reset( pHwDevExt, NO_GUARD );
|
||
|
||
ASSERTMSG( "\r\n...CPro Status Error!!( reset )", bStatus );
|
||
|
||
}
|
||
|
||
ULONG decGetAudioMode( PHW_DEVICE_EXTENSION pHwDevExt ) // get audio mode from HW
|
||
{
|
||
return ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode;
|
||
}
|
||
|
||
void decSetAudioFreq( PHW_DEVICE_EXTENSION pHwDevExt, ULONG freq ) // set audio freq
|
||
{
|
||
((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioFreq = freq;
|
||
}
|
||
|
||
void decSetAudioMode( PHW_DEVICE_EXTENSION pHwDevExt ) // set audio mode on HW
|
||
{
|
||
|
||
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode == AUDIO_TYPE_AC3 ) {
|
||
decSetAudioAC3(pHwDevExt);
|
||
}
|
||
else if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode == AUDIO_TYPE_PCM ) {
|
||
decSetAudioPCM(pHwDevExt);
|
||
}
|
||
else
|
||
TRAP;
|
||
|
||
AUDIO_ZR38521_REPEAT_16(pHwDevExt);
|
||
AUDIO_TC9425_INIT_DIGITAL(pHwDevExt);
|
||
AUDIO_TC9425_INIT_ANALOG(pHwDevExt);
|
||
AUDIO_ZR38521_MUTE_OFF(pHwDevExt);
|
||
|
||
// AudioType Analog
|
||
PCIF_AMUTE2_OFF(pHwDevExt);
|
||
PCIF_AMUTE_OFF(pHwDevExt);
|
||
}
|
||
|
||
void decSetAudioPCM( PHW_DEVICE_EXTENSION pHwDevExt ) // set audio mode PCM
|
||
{
|
||
((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode = AUDIO_TYPE_PCM;
|
||
|
||
VIDEO_PRSO_PS1( pHwDevExt );
|
||
AUDIO_ZR38521_BOOT_PCM( pHwDevExt );
|
||
|
||
AUDIO_ZR38521_CFG( pHwDevExt );
|
||
AUDIO_ZR38521_PCMX( pHwDevExt );
|
||
AUDIO_TC6800_INIT_PCM( pHwDevExt );
|
||
SUBP_SELECT_AUDIO_SSID( pHwDevExt );
|
||
|
||
}
|
||
|
||
void decSetAudioAC3( PHW_DEVICE_EXTENSION pHwDevExt ) // set audio mode AC3
|
||
{
|
||
((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode = AUDIO_TYPE_AC3;
|
||
|
||
VIDEO_PRSO_PS1( pHwDevExt );
|
||
AUDIO_ZR38521_BOOT_AC3( pHwDevExt );
|
||
|
||
AUDIO_ZR38521_CFG( pHwDevExt );
|
||
AUDIO_ZR38521_AC3( pHwDevExt );
|
||
AUDIO_ZR38521_KCOEF( pHwDevExt );
|
||
AUDIO_TC6800_INIT_AC3( pHwDevExt );
|
||
SUBP_SELECT_AUDIO_SSID( pHwDevExt );
|
||
}
|
||
|
||
|
||
// video play speed/mode
|
||
void decSetVideoPlayMode( PHW_DEVICE_EXTENSION pHwDevExt, ULONG mode ) // set video playspeed/mode
|
||
{
|
||
((PMasterDecoder)pHwDevExt->DecoderInfo)->PlayMode = mode;
|
||
}
|
||
|
||
ULONG decGetVideoPlayMode( PHW_DEVICE_EXTENSION pHwDevExt ) // get video pla speed/mode
|
||
{
|
||
return ((PMasterDecoder)pHwDevExt->DecoderInfo)->PlayMode;
|
||
}
|
||
|
||
void decSetVideoRunMode( PHW_DEVICE_EXTENSION pHwDevExt, ULONG mode )
|
||
{
|
||
((PMasterDecoder)pHwDevExt->DecoderInfo)->RunMode = mode;
|
||
}
|
||
|
||
ULONG decGetVideoRunMode( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
return ((PMasterDecoder)pHwDevExt->DecoderInfo)->RunMode;
|
||
}
|
||
|
||
UCHAR decGetVideoPort( PHW_DEVICE_EXTENSION pHwDevExt ) // get video port
|
||
{
|
||
return ((PMasterDecoder)pHwDevExt->DecoderInfo)->VideoPort;
|
||
|
||
}
|
||
|
||
void decSetVideoPort( PHW_DEVICE_EXTENSION pHwDevExt, UCHAR port ) // set video port
|
||
{
|
||
((PMasterDecoder)pHwDevExt->DecoderInfo)->VideoPort = port;
|
||
PCIF_SET_DIGITAL_OUT( pHwDevExt, port );
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
void decSetCopyGuard( PHW_DEVICE_EXTENSION pHwDevExt ) // set copy protection on HW
|
||
{
|
||
|
||
BOOL ACGstatus;
|
||
|
||
ACGstatus = CGuard_CPGD_SET_AGC_CHIP( pHwDevExt, pHwDevExt->RevID );
|
||
|
||
ASSERTMSG( "\r\n...Analog Copy Guard Error!!", ACGstatus );
|
||
|
||
// NTSC Analog Copy Guard Default Setting for Windows98 Beta 3
|
||
// Aspect Ratio 4:3
|
||
// Letter Box OFF
|
||
// CGMS 3 ( No Copying is permitted )
|
||
// APS 2 ( AGC pulse ON, Burst Inv ON (2line) )
|
||
CGuard_CPGD_SET_CGMSnCPGD( pHwDevExt, 0, 0, 3, 2 );
|
||
|
||
|
||
USCC_on( pHwDevExt );
|
||
|
||
|
||
}
|
||
|
||
|
||
// get MPEG decoder interrupt status
|
||
UCHAR decGetMPegIntStatus( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
UCHAR val;
|
||
UCHAR val2;
|
||
|
||
val = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + TC812_IRM );
|
||
val2 = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + TC812_IRF );
|
||
val ^= val2;
|
||
val2 &= val;
|
||
return val2;
|
||
}
|
||
|
||
UCHAR decGetPciIntStatus( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
UCHAR res = 0;
|
||
|
||
return res;
|
||
}
|
||
|
||
void decHwIntVideo( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
UCHAR val2;
|
||
|
||
// DebugPrint( (DebugLevelTrace, "DVDTS:HwIntVideo\r\n") );
|
||
|
||
|
||
// get MPEG decoder interrupt status
|
||
val2 = decGetMPegIntStatus( pHwDevExt );
|
||
|
||
|
||
if( val2 & 0x01 ) {
|
||
// DebugPrint( (DebugLevelTrace, "DVDTS: UDSC\r\n") );
|
||
USCC_get( pHwDevExt );
|
||
}
|
||
if( val2 & 0x02 )
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: Scr\r\n") );
|
||
if( val2 & 0x04 )
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: I-PIC\r\n") );
|
||
if( val2 & 0x08 )
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: User\r\n") );
|
||
if( val2 & 0x10 ) {
|
||
UCHAR val3;
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: Error\r\n") );
|
||
val3 = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + TC812_ERF );
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: Error %x\r\n", val3 ) );
|
||
}
|
||
if( val2 & 0x40 ) {
|
||
int i;
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: Underflow\r\n") );
|
||
|
||
for( i = 0; i < 0xffff ; i++ )
|
||
val2 = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + TC812_STT1 );
|
||
|
||
val2 = READ_PORT_UCHAR( pHwDevExt->ioBaseLocal + TC812_UOF );
|
||
pHwDevExt->dwSTCtemp = VIDEO_GET_STCA( pHwDevExt );
|
||
|
||
// Check Audio Underflow
|
||
StreamClassScheduleTimer(
|
||
pHwDevExt->pstroAud,
|
||
pHwDevExt,
|
||
0,
|
||
(PHW_TIMER_ROUTINE)CheckAudioUnderflow,
|
||
pHwDevExt
|
||
);
|
||
|
||
StreamClassScheduleTimer(
|
||
pHwDevExt->pstroAud,
|
||
pHwDevExt,
|
||
10000,
|
||
(PHW_TIMER_ROUTINE)CheckAudioUnderflow,
|
||
pHwDevExt
|
||
);
|
||
}
|
||
}
|
||
|
||
void decHwIntVSync( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
static v_count = 0;
|
||
static v_count2 = 0;
|
||
static v_count3 = 0;
|
||
// ULONG TrickMode;
|
||
|
||
WRITE_PORT_UCHAR( pHwDevExt->ioBaseLocal + IFLG_INT, 0x10 );
|
||
|
||
CGuard_CPGD_UPDATE_AGC(pHwDevExt);
|
||
|
||
USCC_put( pHwDevExt );
|
||
|
||
if( ++v_count < 3 )
|
||
return;
|
||
|
||
v_count = 0;
|
||
|
||
// 20 / 1s
|
||
|
||
// notes: You have to call VIDEO_BUG_SLIDE_01 to recover MPEG2 chip bug
|
||
// when trick mode isn't FREEZE mode.
|
||
// But don't use VIDEO_GET_TRICK_MODE to get current trick mode.
|
||
// Because MPEG2 chip returns wrong value sometimes.
|
||
|
||
// TrickMode = pHwDevExt->VDec.VIDEO_GET_TRICK_MODE();
|
||
// if( TrickMode != 0x02 ) {
|
||
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->PlayMode != PLAY_MODE_FREEZE /*&& pHwDevExt->DecodeStart == TRUE*/ ) {
|
||
VIDEO_BUG_SLIDE_01( pHwDevExt );
|
||
}
|
||
|
||
if( ++v_count2 < 4 )
|
||
return;
|
||
|
||
v_count2 = 0;
|
||
|
||
// 5 / 1s ???
|
||
ClockEvents( pHwDevExt );
|
||
|
||
// debug
|
||
|
||
if( ++v_count3 < 50 )
|
||
return;
|
||
|
||
v_count3 = 0;
|
||
|
||
// 1 / 60s
|
||
// DebugPrint((
|
||
// DebugLevelTrace,
|
||
// "DVDTS: VSync 10s (0x%s(100ns))\r\n",
|
||
// DebugLLConvtoStr( ConvertPTStoStrm( VIDEO_GET_STCA(pHwDevExt) ), 16 )
|
||
// ));
|
||
}
|
||
|
||
|
||
|
||
void decStopData( PHW_DEVICE_EXTENSION pHwDevExt, BOOL bKeep )
|
||
{
|
||
DebugPrint(( DebugLevelTrace, "DVDTS:decStopData()\r\n" ));
|
||
|
||
AUDIO_ZR38521_STOPF( pHwDevExt );
|
||
AUDIO_ZR38521_MUTE_ON( pHwDevExt );
|
||
|
||
if( !bKeep ) {
|
||
VPRO_VIDEO_MUTE_ON( pHwDevExt );
|
||
CGuard_CPGD_VIDEO_MUTE_ON( pHwDevExt );
|
||
}
|
||
|
||
VIDEO_DECODE_STOP( pHwDevExt );
|
||
VIDEO_SYSTEM_STOP( pHwDevExt );
|
||
SUBP_STC_OFF( pHwDevExt );
|
||
|
||
// pHwDevExt->DAck.PCIF_DMA_ABORT( pHwDevExt );
|
||
|
||
VIDEO_STD_CLEAR( pHwDevExt );
|
||
SUBP_BUFF_CLEAR( pHwDevExt );
|
||
VIDEO_SYSTEM_STOP( pHwDevExt );
|
||
VIDEO_DECODE_INT_OFF( pHwDevExt );
|
||
|
||
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode == AUDIO_TYPE_AC3 )
|
||
AUDIO_TC6800_INIT_AC3( pHwDevExt );
|
||
else if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode == AUDIO_TYPE_PCM )
|
||
AUDIO_TC6800_INIT_PCM( pHwDevExt );
|
||
else
|
||
TRAP;
|
||
}
|
||
|
||
void decHighlight( PHW_DEVICE_EXTENSION pHwDevExt, PKSPROPERTY_SPHLI phli )
|
||
{
|
||
//h DebugPrint(( DebugLevelTrace, "DVDTS:decHighlight\r\n" ));
|
||
|
||
UCHAR ln_ctli[4];
|
||
UCHAR px_ctlis[6];
|
||
UCHAR px_ctlie[6];
|
||
|
||
if( phli->StartX == phli->StopX && phli->StartY == phli->StopY ) {
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: Highlight Off\r\n" ));
|
||
SUBP_HLITE_OFF( pHwDevExt );
|
||
}
|
||
else {
|
||
SUBP_HLITE_ON( pHwDevExt );
|
||
ln_ctli[3] = (UCHAR)(( phli->StartY >> 8 ) & 0x03);
|
||
ln_ctli[2] = (UCHAR)(phli->StartY & 0xff);
|
||
ln_ctli[1] = (UCHAR)(( phli->StopY >> 8 ) & 0x03 | 0x20);
|
||
ln_ctli[0] = (UCHAR)(phli->StopY & 0xff);
|
||
|
||
px_ctlis[5] = (UCHAR)(( phli->StartX >> 8 ) & 0x03);
|
||
px_ctlis[4] = (UCHAR)(phli->StartX & 0xff);
|
||
px_ctlis[3] = (UCHAR)(phli->ColCon.emph2col << 4 | phli->ColCon.emph1col);
|
||
px_ctlis[2] = (UCHAR)(phli->ColCon.patcol << 4 | phli->ColCon.backcol);
|
||
px_ctlis[1] = (UCHAR)(phli->ColCon.emph2con << 4 | phli->ColCon.emph1con);
|
||
px_ctlis[0] = (UCHAR)(phli->ColCon.patcon << 4 | phli->ColCon.backcon);
|
||
|
||
px_ctlie[5] = (UCHAR)(( phli->StopX >> 8 ) & 0x03 | 0x08);
|
||
px_ctlie[4] = (UCHAR)(phli->StopX & 0xff);
|
||
px_ctlie[3] = 0;
|
||
px_ctlie[2] = 0;
|
||
px_ctlie[1] = 0;
|
||
px_ctlie[0] = 0;
|
||
|
||
//h DebugPrint( (DebugLevelTrace, "DVDTS: %d, %d - %d, %d : %02x%02x%02x%02x\r\n",
|
||
//h phli->StartX, phli->StartY, phli->StopX, phli->StopY,
|
||
//h px_ctlis[3], px_ctlis[2], px_ctlis[1], px_ctlis[0]
|
||
//h ) );
|
||
|
||
SUBP_SET_PXCTLIE( pHwDevExt, px_ctlie );
|
||
SUBP_SET_PXCTLIS( pHwDevExt, px_ctlis );
|
||
SUBP_SET_LNCTLI( pHwDevExt, ln_ctli );
|
||
}
|
||
}
|
||
|
||
void decDisableInt( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
VIDEO_ALL_INT_OFF( pHwDevExt );
|
||
PCIF_VSYNC_OFF( pHwDevExt );
|
||
}
|
||
|
||
void decGenericNormal( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
|
||
DWORD st, et;
|
||
ULONG TrickMode;
|
||
ULONG dwSTC;
|
||
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: decGenericNormal\r\n") );
|
||
|
||
if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode == AUDIO_TYPE_AC3 )
|
||
AUDIO_TC6800_INIT_AC3( pHwDevExt );
|
||
else if( ((PMasterDecoder)pHwDevExt->DecoderInfo)->ADec.AudioMode == AUDIO_TYPE_PCM )
|
||
AUDIO_TC6800_INIT_PCM( pHwDevExt );
|
||
else
|
||
TRAP;
|
||
|
||
AUDIO_ZR38521_STOPF( pHwDevExt );
|
||
VIDEO_PRSO_PS1( pHwDevExt );
|
||
VIDEO_PLAY_NORMAL( pHwDevExt );
|
||
|
||
// Bad loop !!
|
||
|
||
st = GetCurrentTime_ms();
|
||
for( ; ; ) {
|
||
KeStallExecutionProcessor( 1 );
|
||
et = GetCurrentTime_ms();
|
||
|
||
TrickMode = VIDEO_GET_TRICK_MODE( pHwDevExt );
|
||
if( TrickMode == 0x07 )
|
||
break;
|
||
|
||
if( st + 2000 < et ) {
|
||
TRAP;
|
||
break;
|
||
}
|
||
}
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: wait %dms\r\n", et - st ) );
|
||
|
||
dwSTC = VIDEO_GET_STCA( pHwDevExt );
|
||
AUDIO_ZR38521_VDSCR_ON( pHwDevExt, dwSTC );
|
||
AUDIO_ZR38521_PLAY( pHwDevExt );
|
||
VIDEO_UFLOW_INT_ON( pHwDevExt );
|
||
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: STC 0x%x( %d )\r\n", dwSTC, dwSTC ));
|
||
}
|
||
|
||
void decGenericFreeze( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: decGenericFreeze\r\n" ));
|
||
VIDEO_PLAY_FREEZE( pHwDevExt );
|
||
AUDIO_ZR38521_MUTE_ON( pHwDevExt );
|
||
AUDIO_ZR38521_STOP( pHwDevExt );
|
||
}
|
||
|
||
void decGenericSlow( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: decGenericSlow\r\n") );
|
||
VIDEO_PRSO_PS1( pHwDevExt );
|
||
SUBP_SET_AUDIO_NON( pHwDevExt );
|
||
VIDEO_PLAY_SLOW( pHwDevExt, (UCHAR)(pHwDevExt->Rate/10000) );
|
||
AUDIO_ZR38521_STOP( pHwDevExt );
|
||
AUDIO_ZR38521_MUTE_ON( pHwDevExt );
|
||
VIDEO_UFLOW_INT_ON( pHwDevExt );
|
||
}
|
||
|
||
void decStopForFast( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: decGenericFast\r\n" ));
|
||
VIDEO_UFLOW_INT_OFF( pHwDevExt );
|
||
VIDEO_SET_STCA( pHwDevExt, (ULONG)(pHwDevExt->StartTime / 1000 * 9) );
|
||
VIDEO_PRSO_NON( pHwDevExt );
|
||
VIDEO_PLAY_FAST( pHwDevExt, FAST_ONLYI );
|
||
AUDIO_ZR38521_MUTE_ON( pHwDevExt );
|
||
AUDIO_ZR38521_STOP( pHwDevExt );
|
||
SUBP_MUTE_ON( pHwDevExt );
|
||
SUBP_STC_OFF( pHwDevExt );
|
||
VIDEO_DECODE_STOP( pHwDevExt );
|
||
}
|
||
|
||
void decResumeForFast( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
VIDEO_STD_CLEAR( pHwDevExt );
|
||
AUDIO_ZR38521_STOPF( pHwDevExt );
|
||
SUBP_BUFF_CLEAR( pHwDevExt );
|
||
VIDEO_DECODE_START( pHwDevExt );
|
||
}
|
||
|
||
void decFastNormal( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: decFastNormal\r\n") );
|
||
VIDEO_PRSO_PS1( pHwDevExt );
|
||
pHwDevExt->dwSTCtemp = VIDEO_GET_STCA( pHwDevExt );
|
||
}
|
||
|
||
void decFastSlow( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
DebugPrint( (DebugLevelTrace, "DVDTS: decFastSlow\r\n") );
|
||
VIDEO_PRSO_PS1( pHwDevExt );
|
||
SUBP_SET_AUDIO_NON( pHwDevExt );
|
||
pHwDevExt->dwSTCtemp = VIDEO_GET_STCA( pHwDevExt );
|
||
}
|
||
|
||
void decFastFreeze( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: decFastFreeze\r\n" ));
|
||
|
||
pHwDevExt->dwSTCinPause = VIDEO_GET_STCA( pHwDevExt );
|
||
VIDEO_PLAY_FREEZE( pHwDevExt );
|
||
}
|
||
|
||
void decFreezeFast( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: decFreezeFast\r\n" ));
|
||
VIDEO_SET_STCA( pHwDevExt, pHwDevExt->dwSTCinPause );
|
||
VIDEO_PLAY_FAST( pHwDevExt, FAST_ONLYI );
|
||
}
|
||
|
||
|
||
|
||
void decInitAudioAfterNewFormat( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
AUDIO_ZR38521_REPEAT_16( pHwDevExt );
|
||
AUDIO_TC9425_INIT_DIGITAL( pHwDevExt );
|
||
AUDIO_TC9425_INIT_ANALOG( pHwDevExt );
|
||
}
|
||
|
||
|
||
void decGetLPCMInfo( void *pBuf, PMYAUDIOFORMAT pfmt )
|
||
{
|
||
PUCHAR pDat = (PUCHAR)pBuf;
|
||
UCHAR headlen;
|
||
UCHAR val;
|
||
|
||
pDat += 14;
|
||
|
||
ASSERT( *( pDat + 3 ) == 0xBD );
|
||
|
||
headlen = *( pDat + 8 );
|
||
|
||
ASSERT( ( *( pDat + 9 + headlen ) & 0xF8 ) == 0xA0 );
|
||
|
||
val = (UCHAR)(( *( pDat + 9 + headlen + 5 ) & 0xC0 ) >> 6);
|
||
|
||
if( val == 0x00 ) {
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: 16bits\r\n" ));
|
||
pfmt->dwQuant = AUDIO_QUANT_16;
|
||
}
|
||
else if( val == 0x01 ) {
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: 20bits\r\n" ));
|
||
pfmt->dwQuant = AUDIO_QUANT_20;
|
||
}
|
||
else if( val == 0x10 ) {
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: 24bits\r\n" ));
|
||
pfmt->dwQuant = AUDIO_QUANT_24;
|
||
}
|
||
else
|
||
TRAP;
|
||
|
||
val = (UCHAR)(( *( pDat + 9 + headlen + 5 ) & 0x30 ) >> 4);
|
||
|
||
if( val == 0x00 ) {
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: 48kHz\r\n" ));
|
||
pfmt->dwFreq = AUDIO_FS_48;
|
||
}
|
||
else if( val == 0x01 ) {
|
||
DebugPrint(( DebugLevelTrace, "DVDTS: 96kHz\r\n" ));
|
||
pfmt->dwFreq = AUDIO_FS_96;
|
||
}
|
||
else
|
||
TRAP;
|
||
|
||
return;
|
||
}
|
||
|
||
// misc HW routines used by dvdcmd.c
|
||
void decSUBP_STC_ON( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
SUBP_STC_ON( pHwDevExt );
|
||
}
|
||
|
||
void decSUBP_STC_OFF( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
SUBP_STC_OFF( pHwDevExt );
|
||
}
|
||
|
||
void decVPRO_SUBP_PALETTE( PHW_DEVICE_EXTENSION pHwDevExt ,PUCHAR pPalData )
|
||
{
|
||
VPRO_SUBP_PALETTE( pHwDevExt , pPalData );
|
||
}
|
||
|
||
void decSUBP_SET_AUDIO_CH( PHW_DEVICE_EXTENSION pHwDevExt , ULONG ch )
|
||
{
|
||
SUBP_SET_AUDIO_CH( pHwDevExt , ch );
|
||
}
|
||
|
||
ULONG decSUBP_GET_AUDIO_CH( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
return SUBP_GET_AUDIO_CH( pHwDevExt );
|
||
}
|
||
|
||
void decSUBP_SET_SUBP_CH( PHW_DEVICE_EXTENSION pHwDevExt , ULONG ch )
|
||
{
|
||
SUBP_SET_SUBP_CH( pHwDevExt , ch );
|
||
}
|
||
|
||
ULONG decSUBP_GET_SUBP_CH( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
return SUBP_GET_SUBP_CH( pHwDevExt );
|
||
}
|
||
|
||
|
||
void decSUBP_SET_STC( PHW_DEVICE_EXTENSION pHwDevExt , ULONG stc )
|
||
{
|
||
SUBP_SET_STC( pHwDevExt , stc );
|
||
}
|
||
|
||
void decCGuard_CPGD_SET_ASPECT( PHW_DEVICE_EXTENSION pHwDevExt, ULONG aspect )
|
||
{
|
||
CGuard_CPGD_SET_ASPECT( pHwDevExt, aspect );
|
||
}
|
||
|
||
void decCGuard_CPGD_SUBP_PALETTE( PHW_DEVICE_EXTENSION pHwDevExt, PUCHAR pPalData )
|
||
{
|
||
CGuard_CPGD_SUBP_PALETTE( pHwDevExt, pPalData );
|
||
}
|
||
|
||
|
||
NTSTATUS decAUDIO_ZR38521_STAT( PHW_DEVICE_EXTENSION pHwDevExt, PULONG pDiff )
|
||
{
|
||
return AUDIO_ZR38521_STAT( pHwDevExt, pDiff );
|
||
}
|
||
|
||
NTSTATUS decAUDIO_ZR38521_MUTE_OFF(PHW_DEVICE_EXTENSION pHwDevExt)
|
||
{
|
||
return AUDIO_ZR38521_MUTE_OFF( pHwDevExt);
|
||
}
|
||
|
||
NTSTATUS decAUDIO_ZR38521_BFST( PHW_DEVICE_EXTENSION pHwDevExt, PULONG pErrCode )
|
||
{
|
||
return AUDIO_ZR38521_BFST( pHwDevExt, pErrCode );
|
||
}
|
||
|
||
NTSTATUS decAUDIO_ZR38521_STOP(PHW_DEVICE_EXTENSION pHwDevExt)
|
||
{
|
||
return AUDIO_ZR38521_STOP( pHwDevExt);
|
||
}
|
||
|
||
NTSTATUS decAUDIO_ZR38521_VDSCR_ON( PHW_DEVICE_EXTENSION pHwDevExt, ULONG stc )
|
||
{
|
||
return AUDIO_ZR38521_VDSCR_ON( pHwDevExt, stc );
|
||
}
|
||
|
||
void decVIDEO_SET_STCA( PHW_DEVICE_EXTENSION pHwDevExt, ULONG stca )
|
||
{
|
||
VIDEO_SET_STCA( pHwDevExt, stca );
|
||
}
|
||
|
||
ULONG decVIDEO_GET_STD_CODE( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
return VIDEO_GET_STD_CODE( pHwDevExt );
|
||
}
|
||
|
||
BOOL decVIDEO_GET_DECODE_STATE( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
return VIDEO_GET_DECODE_STATE( pHwDevExt );
|
||
}
|
||
|
||
NTSTATUS decVIDEO_DECODE_STOP( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
return VIDEO_DECODE_STOP( pHwDevExt );
|
||
}
|
||
|
||
void decVIDEO_UFLOW_INT_OFF( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
VIDEO_UFLOW_INT_OFF( pHwDevExt );
|
||
}
|
||
|
||
void decVIDEO_PRSO_PS1( PHW_DEVICE_EXTENSION pHwDevExt )
|
||
{
|
||
VIDEO_PRSO_PS1( pHwDevExt );
|
||
}
|
||
|
||
|
||
|