📄 chips.c
字号:
// CHIPS_LCRLS : Audio is LCRLs
// CHIPS_LRLSRS : Audio is LRLsRs
// CHIPS_LCRLSRS : Audio is LCRLsRs
// Return : TRUE : Succeeded
// : FALSE : Out of range
// Change :
// Side Effect :
// *********************************************************************
#if 0 // TCC274, _bChannelMode should reference setupinfo.
BYTE CHIPS_ChannelSwitch(BYTE bCh)
{
if (bCh > CHIPS_LCRLSRS)
return FALSE ;
_bChannelMode = bCh ;
CHIPS_OpenAudio(TRUE);
//OSD_OUTPUT_MACRO(MSG_CHANNEL, bCh, 3 );
return TRUE;
}
#endif
// *********************************************************************
// Function : CHIPS_LFEEnable
// Description : It will turn LFE on/off
// Arguments : bParam: The type of channel
// TRUE : Turn LFE on
// FALSE : Turn LFE off
// Return : None
// Change :
// Side Effect :
// *********************************************************************
#if 0 // TCC274, _bLFE should reference setupinfo.
void CHIPS_LFEEnable(BYTE bParam)
{
if (bParam)
_bLFE = 1 ;
else
_bLFE = 0 ;
CHIPS_OpenAudio(TRUE);
//OSD_OUTPUT_MACRO(MSG_LFE, _bLFE, 3 );
}
#endif
// *********************************************************************
// Function : CHIPS_AC3KokMode
// Description : It will do ac3 karaoke control according to the parameter
// Modes:
// VOCAL_NOVOCAL
// VOCAL_LEFT
// VOCAL_RIGHT
// VOCAL_STEREO
// Arguments : bFunction: The type of command
// CHIPS_UP : control up 1 level
// CHIPS_DOWN : control down 1 level
// CHIPS_NORMAL : set to default level
// CHIPS_TOGGLE : toggle between levels in range
// CHIPS_LEVEL : return current level
// CHIPS_SUPPORT : return if this function supported
// Return : TRUE : Supported/Succeeded
// : FALSE : Not supported
// Change :
// Side Effect :
// *********************************************************************
BYTE CHIPS_AC3KokMode(BYTE bMode)
{
// TCC050a, only AC3 support vocal.
if (_bAudType != AUDIO_AC3)
return FALSE ;
switch(bMode)
{
case CHIPS_UP :
if (__bVocal < VOCAL_ON)
__bVocal ++ ;
break ;
case CHIPS_DOWN :
if (__bVocal > VOCAL_OFF)
__bVocal -- ;
break ;
case CHIPS_NORMAL :
__bVocal = 0 ;
break ;
case CHIPS_TOGGLE :
// TCC104, if defined ENABLE_AUTOVOCAL, only has 2 modes (On/Off)
#ifdef ENABLE_AUTOVOCAL
if (__bVocal == VOCAL_OFF)
__bVocal = VOCAL_ON ;
else
__bVocal = VOCAL_OFF ;
#else
__bVocal ++ ;
__bVocal %= 4 ;
#endif
break ;
case CHIPS_LEVEL :
return __bVocal ;
case CHIPS_SUPPORT :
return TRUE ;
default :
break ;
}
CHIPS_OpenAudio(TRUE);
#ifdef SUPPORT_PRINTF
switch (__bVocal)
{
case VOCAL_OFF :
printf ("AC3 No Vocal\n") ;
break ;
case VOCAL_LL :
printf ("AC3 Left Vocal\n") ;
break ;
case VOCAL_RR :
printf ("AC3 Right Vocal\n") ;
break ;
case VOCAL_ON :
default :
printf ("AC3 Stereo Vocal\n") ;
break ;
}
#endif
// Current no suitable OSD to show
OSD_OUTPUT_MACRO(MSG_VOCAL, __bVocal, 3 );
return TRUE;
}
// *********************************************************************
// Function : CHIPS_DualMode
// Description : It will do ac3 dual mode control according to the parameter
// Modes:
// DUAL_STEREO
// DUAL_LEFTMONO
// DUAL_RIGHTMONO
// DUAL_MIXEDMONO
// Arguments : bFunction: The type of command
// CHIPS_UP : control up 1 level
// CHIPS_DOWN : control down 1 level
// CHIPS_NORMAL : set to default level
// CHIPS_TOGGLE : toggle between levels in range
// CHIPS_LEVEL : return current level
// CHIPS_SUPPORT : return if this function supported
// Return : TRUE : Supported/Succeeded
// : FALSE : Not supported
// Change :
// Side Effect :
// *********************************************************************
#if 0 // TCC274, _bDualMode should reference __bModeChannel.
BYTE CHIPS_DualMode(BYTE bMode)
{
switch(bMode)
{
case CHIPS_UP :
if (_bDualMode < DUAL_MIXEDMONO)
_bDualMode ++ ;
break ;
case CHIPS_DOWN :
if (_bDualMode > DUAL_STEREO)
_bDualMode -- ;
break ;
case CHIPS_NORMAL :
_bDualMode = 0 ;
break ;
case CHIPS_TOGGLE :
_bDualMode ++ ;
_bDualMode %= 4 ;
break ;
case CHIPS_LEVEL :
return _bDualMode ;
case CHIPS_SUPPORT :
return TRUE ;
default :
break ;
}
CHIPS_OpenAudio(TRUE);
//OSD_OUTPUT_MACRO(MSG_DUAL, _bDualMode, 3 );
return TRUE;
}
#endif
// *********************************************************************
// Function : _SetAudio
// Description : It will set audio variable _bAudType according to __bAudioType
// Arguments : bType: The type of command (Reference HAL_SetAudioType)
// Return : None
// Change :
// Side Effect :
// *********************************************************************
void _SetAudio (BYTE bAudio)
{
switch (bAudio)
{
// TCC025, use same definition as HAL
case HAL_AUDIO_PCM:
case HAL_AUDIO_LPCM:
_bAudType = AUDIO_PCM ;
// TCC043, must force spdif off for pcm data so that it also send through SPDIF
if (__SetupInfo.bAudioDigitalOut == SETUP_AUDIO_DIGITAL_OUT_OFF)
_bSpDifMode = 2 ; //off
else
_bSpDifMode = 0 ; //pcm
break;
case HAL_AUDIO_MP2: //Alex1.10, System will support MP2 format audio
case HAL_AUDIO_MPG:
case HAL_AUDIO_MP3:
// TCC043, must force spdif off for pcm data so that it also send through SPDIF
_bAudType = AUDIO_MPG ;
if (__SetupInfo.bAudioDigitalOut == SETUP_AUDIO_DIGITAL_OUT_OFF)
_bSpDifMode = 2 ; //off
else
_bSpDifMode = 0 ; //pcm
break;
#ifdef SUPPORT_WMA
case HAL_AUDIO_WMA: //Kevin1.08
// TCC043, must force spdif off for pcm data so that it also send through SPDIF
_bAudType = AUDIO_WMA;
if (__SetupInfo.bAudioDigitalOut == SETUP_AUDIO_DIGITAL_OUT_OFF)
_bSpDifMode = 2 ; //off
else
_bSpDifMode = 0 ; //pcm
break;
#endif //#ifdef SUPPORT_WMA
case HAL_AUDIO_AC3:
_bAudType = AUDIO_AC3 ;
// TCC274, set spdif mode according to setupinfo.
if (__SetupInfo.bAudioDigitalOut == SETUP_AUDIO_DIGITAL_OUT_SPDIF_PCM)
_bSpDifMode = 0 ; //pcm
else if (__SetupInfo.bAudioDigitalOut == SETUP_AUDIO_DIGITAL_OUT_SPDIF_RAW)
_bSpDifMode = 1 ; //raw
else
_bSpDifMode = 2 ; //off
break;
case HAL_AUDIO_DTS:
//Kevin2.33, not support
//case HAL_AUDIO_IEC958 :
//case HAL_AUDIO_SDDS :
_bAudType = AUDIO_DTS ; // ** TCH0.412; DTS should be 11b, Don't know SDDS.
// _bForceSpdifOn = 1 ;
if (__SetupInfo.bAudioDigitalOut == SETUP_AUDIO_DIGITAL_OUT_SPDIF_PCM)
{
//Kevin1.05-3, modify
//_bSpDifMode = 0 ; //pcm
if (__bSupportFeature & SUPPORT_FEATURE_DTS)
_bSpDifMode = 0 ; //pcm
else
{
//Kevin1.10, still show SPDIF pcm in SETUP Digital Output menu
//__SetupInfo.bAudioDigitalOut = SETUP_AUDIO_DIGITAL_OUT_SPDIF_RAW;
_bSpDifMode = 1 ; //raw
}
}
else if (__SetupInfo.bAudioDigitalOut == SETUP_AUDIO_DIGITAL_OUT_SPDIF_RAW)
_bSpDifMode = 1 ; //raw
else
_bSpDifMode = 2 ; //off
break;
default:
break;
}
}
// *********************************************************************
// Function : _SetDualMode
// Description : It will set variable _bDualMode according to __bModeChannel
// Arguments : None
// Return : None
// Change :
// Side Effect :
// *********************************************************************
#pragma NOAREGS //Kevin1.23, may be called by ISR
void _SetDualMode (void)
{
#ifndef KARAOKE //WWC_HC2500
// TCC275, check if MP3 is mono, must not set it to RR or no audio output. Force set it to LR (same as LL)
if (__bAttrPlay == ATTR_MP3 || __bAttrPlay == ATTR_MP2) //Alex1.10, support MP2 format audio
{
W99AV_ReadDM (W99AV_DM_CHNO, &__dwTemp) ; // Chuan2.80, use mnemonic
if (__dwTemp == 1) // Mono
{
_bDualMode = DUAL_STEREO ;
return ;
}
}
// TCC022, Dual mode is LR/LL/RR/Mixed
if (__bModeChannel == AUDIO_LR || __bModeChannel == AUDIO_RL)
_bDualMode = DUAL_STEREO ;
else if (__bModeChannel == AUDIO_LL)
_bDualMode = DUAL_LEFTMONO ;
else if (__bModeChannel == AUDIO_RR)
_bDualMode = DUAL_RIGHTMONO ;
#endif
}
// *********************************************************************
// Function : _SetAudType
// Description : It will set audio type to register according to the parameter
// This function is mainly called by HAL_SetAudioType function
// Arguments : bType: The type of command (Reference HAL_SetAudioType)
// Return : None
// Change :
// Side Effect :
// *********************************************************************
void _SetAudType (BYTE bType)
{
//WORD wTemp ;
BYTE bOldAudType, bOldSpdifMode ;
// TCC171, Backup old audio type and spdif mode. Only these 2 value change need reset dsp.
bOldAudType = _bAudType ;
bOldSpdifMode = _bSpDifMode ;
//Kevin2.31, move from below here. Run-time unzip DSP ucode will destroy audio config regs/DMs
_ChangeDSPCode (bType) ;
// TCC031, reference setup module for current setting
CHIPS_Initial (CHIPS_INIT_CHANNELMODE) ;
// TCC274, move to a function
_SetAudio (bType) ;
// TCC171, only these 2 types change need reset dsp.
// Brian.276p, JPEG mode (HAL_AUDIO_NONE) doesn't need reset
//Kevin1.07, fix "Setup->Audio->Digital out->SPDIF PCM/RAW->exit setup, audio will be unsmooth"
//if ((bOldAudType != _bAudType || bOldSpdifMode != _bSpDifMode) && bType != HAL_AUDIO_NONE)
if (bOldAudType != _bAudType && bType != HAL_AUDIO_NONE)
// TCC046, need to reset dsp before set register & dm
HAL_Reset (HAL_RESET_AUDIO) ;
#ifdef KARAOKE //WWC_HC2500
_wCHIPSTmp = 0;
#else
if (__cKeyShift < 0) // from -1 to -8
_wCHIPSTmp = 0xF + __cKeyShift + 1 ;
else // from 0 to 7
_wCHIPSTmp = __cKeyShift ;
_wCHIPSTmp<<= 10;
#endif
_dwACR3 &= 0xFFFFC1FF ; // from bit 10~13
_dwACR3 |= _wCHIPSTmp ;
//Kevin0.84a, support key shift only for VCD/DVD Karaoke
//if (__cKeyShift != 0 && (_bAudType!=AUDIO_PCM)) // LPCM should disable key control
if (__cKeyShift != 0 && (_bAudType==AUDIO_AC3 || _bAudType==AUDIO_MPG) ) // LPCM should disable key control
_dwACR3 |= 0x0200 ; // Enable Karaoke key shift
W99AV_WriteRegDW (AUDIOCFG2R, LOWORD(_dwACR3), HIWORD(_dwACR3));
_dwACR2 = (DWORD)(_bChannelMode&0x07) | ((DWORD)(_bLFE&0x01))<<3 | (DWORD)((__bVocal&0x03))<<4 |
(DWORD)((_bDualMode&0x03))<<6 | (DWORD)(2<<8) |
(DWORD)((_bAudType&0x07))<<10 | (DWORD)(_bSpDifMode&0x01)<<13 | (DWORD)( !(_bSpDifMode>>1) & 0x01 )<<14;
W99AV_WriteRegDW (AUDIOCFG1R, LOWORD(_dwACR2), HIWORD(_dwACR2));
//Kevin1.24a, add
//Kevin1.10, Control Analog Output on/off
CHIPS_ControlAnalogOutput();
//Kevin1.24a, uncomment to fix SPD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -