📄 chips.c
字号:
//#define W99AV_DM_PROLOGIC_OCTRL 0x00de4 //default : 0x1b0
//Kevin1.24, add protection
if (! (__bSupportFeature & SUPPORT_FEATURE_PROLOGIC))
__SetupInfo.bAudioPrologic = SETUP_AUDIO_PROLOGIC_OFF;
switch (__SetupInfo.bAudioPrologic)
{
case SETUP_AUDIO_PROLOGIC_PROLOGIC:
_dwCHIPSTemp= 0<<3;
_bCHIPSTmp = 1;
break;
case SETUP_AUDIO_PROLOGIC_VIRTUAL:
_dwCHIPSTemp= 1<<3;
_bCHIPSTmp = 0;
break;
case SETUP_AUDIO_PROLOGIC_MUSIC:
_dwCHIPSTemp= 2<<3;
_bCHIPSTmp = 0;
break;
case SETUP_AUDIO_PROLOGIC_MOVIE:
_dwCHIPSTemp= 3<<3;
_bCHIPSTmp = 1;
break;
case SETUP_AUDIO_PROLOGIC_MATRIX:
_dwCHIPSTemp= 4<<3;
_bCHIPSTmp = 0;
break;
case SETUP_AUDIO_PROLOGIC_OFF:
default:
W99AV_WriteDM(W99AV_DM_PROLOGIC_ENABLE, 0);
return;
}
switch (__SetupInfo.bAudioAnalogOut)
{
case SETUP_AUDIO_ANALOG_OUT_2CH: //Kevin1.10-2, disable Prologic for 2CH output
W99AV_WriteDM(W99AV_DM_PROLOGIC_ENABLE, 0);
return;
case SETUP_AUDIO_ANALOG_OUT_51CH:
if (__SetupInfo.bAudioCenter==SETUP_AUDIO_CENTER_ON && __SetupInfo.bAudioRear==SETUP_AUDIO_REAR_ON)
_dwCHIPSTemp |= 7;
else if (__SetupInfo.bAudioCenter==SETUP_AUDIO_CENTER_ON && __SetupInfo.bAudioRear==SETUP_AUDIO_REAR_OFF)
_dwCHIPSTemp |= 3;
else if (__SetupInfo.bAudioCenter==SETUP_AUDIO_CENTER_OFF && __SetupInfo.bAudioRear==SETUP_AUDIO_REAR_ON)
_dwCHIPSTemp |= 6;
else
{
W99AV_WriteDM(W99AV_DM_PROLOGIC_ENABLE, 0);
return;
}
}
W99AV_ReadInfo(W99AV_INFO_AUDIOFREQ, &__dwTemp);
if (__dwTemp<AUDIO_FREQ_44K)
_dwCHIPSTemp |= (2<<6); //32K
else if (__dwTemp<AUDIO_FREQ_48K)
_dwCHIPSTemp |= (1<<6); //44K
//else
//_dwCHIPSTemp |= (0<<6); //48K
//Kevin2.37, conflicts w/ AC3
//W99AV_WriteDM(W99AV_DM_PROL_SUR_DELAY, (DWORD)_bCHIPSTmp);
W99AV_WriteDM(W99AV_DM_PROL_SUR_DELAY, 0);
W99AV_WriteDM(W99AV_DM_PROLOGIC_OCTRL, 0x1b0);
W99AV_WriteDM(W99AV_DM_PROLOGIC_OCFG, _dwCHIPSTemp);
W99AV_WriteDM(W99AV_DM_PROLOGIC_ENABLE, 1);
//Kevin1.24, let Prologic & Surround mutual exclusive
if (__bSurround)
{
__bSurround=0;
OSD_Output(MSG_SURROUND, __bSurround, 0x0);
}
}
// *********************************************************************
// Description : set HDCD DM
// Arguments : None
// Return : None
// *********************************************************************
//Kevin2.37, support HDCD
void CHIPS_ControlHDCD(void)
{
if ( __bCDDA_DTS==CDDA_PURE || __bCDDA_DTS==CDDA_HDCD || __bCDDA_DTS==CDDA_CDG)
{
W99AV_WriteDM(W99AV_DM_HDCD_OCTRL, 0x613c);
if ( (__bCDDA_DTS==CDDA_HDCD) && (__bSupportFeature&SUPPORT_FEATURE_HDCD) )
W99AV_WriteDM(W99AV_DM_HDCD_ENABLE, 1);
else
W99AV_WriteDM(W99AV_DM_HDCD_ENABLE, 0); //CDDA needs to write 0
}
//HDCD + Prologic => performance issue
if (__SetupInfo.bAudioPrologic != SETUP_AUDIO_PROLOGIC_OFF)
W99AV_WriteDM(W99AV_DM_HDCD_ENABLE, 0);
}
// *********************************************************************
// Function : CHIPS_Surround
// Description : It will do surround according to the parameter
// Arguments : bKey: 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 : Will turn off key control
// Side Effect : Only MP3 doesn't support surround
// *********************************************************************
BYTE CHIPS_Surround(BYTE bSurd)
{
//Kevin2.81, Filter if the desired function is supported or not in one place
if (!_CHIPS_FilterFunSupport(CHIPS_SURROUND))
return FALSE;
//Kevin0.84a, surround & key can coexist
/*
if (__cKeyShift)
{
__cKeyShift=0;
OSD_OUTPUT_MACRO(MSG_KEY, __cKeyShift, 0);
}
*/
//Kevin1.24, let Prologic & Surround mutual exclusive
W99AV_WriteDM(W99AV_DM_PROLOGIC_ENABLE, 0);
//Kevin0.86, add to fix the "KEY_SURROUND but mute is not canceled" bug
// surround will open volume
if (__btMute)
{
__btMute= FALSE;
OSD_OUTPUT_MACRO(MSG_MUTE, __btMute, 0 );
}
switch(bSurd)
{
case CHIPS_UP :
if (__bSurround <CHIPS_SURROUND_TYPE)
__bSurround ++ ;
break ;
case CHIPS_DOWN :
if (__bSurround > CHIPS_SURROUND_NONE)
__bSurround -- ;
break ;
case CHIPS_NORMAL :
__bSurround = CHIPS_SURROUND_NONE ;
break ;
case CHIPS_TOGGLE :
__bSurround ++ ;
#ifdef KARAOKE // TCC022 for karaoke use
__bSurround %= 9 ;
#else
__bSurround %= (CHIPS_SURROUND_TYPE+1) ;
#endif
break ;
case CHIPS_LEVEL :
return __bSurround ;
case CHIPS_SUPPORT :
return TRUE ;
default :
break ;
}
#ifdef KARAOKE // WWH_HC2500
KARAOKE_KeyShift(NORMALKEY_OFFSET);
KARAOKE_SurroundControl(__bSurround);
#endif //#else
CHIPS_OpenAudio ( TRUE );
//#endif
OSD_OUTPUT_MACRO(MSG_KEY, (WORD)(__cKeyShift+ NORMALKEY_OFFSET), 0);
OSD_OUTPUT_MACRO(MSG_MUTE, __btMute, 0x0); // ***LLY.042
OSD_OUTPUT_MACRO(MSG_SURROUND, __bSurround, 0x3);
return TRUE ;
}
// *********************************************************************
// Function : CHIPS_Echo
// Description : It will do echo according to the parameter
// w9922qf doesn't support echo
// Arguments : bEcho: 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_Echo(BYTE bEcho)
{
//Kevin2.81, Filter if the desired function is supported or not in one place
if (!_CHIPS_FilterFunSupport(CHIPS_ECHO))
return FALSE;
#ifdef KARAOKE
switch(bEcho)
{
case CHIPS_UP :
if (++__bEchoLevel > ECHO_LEVEL) __bEchoLevel = ECHO_LEVEL; // WWH_HC2500
break ;
case CHIPS_DOWN :
if (__bEchoLevel > 0) __bEchoLevel--; // WWH_HC2500
break ;
case CHIPS_NORMAL :
__bEchoLevel = CHIPS_DEFAULT_ECHO ; // WWH_HC2500
break ;
case CHIPS_TOGGLE :
break ;
case CHIPS_LEVEL :
return __bEchoLevel ;
case CHIPS_SUPPORT :
return TRUE;
default :
break ;
}
KARAOKE_EchoLevel(__bEchoLevel);
OSD_OUTPUT_MACRO(MSG_ECHO, __bEchoLevel, 0x3);
return TRUE;
#else
switch(bEcho)
{
case CHIPS_UP :
if (++__bEchoLevel > ECHO_LEVEL) __bEchoLevel = ECHO_LEVEL;
break ;
case CHIPS_DOWN :
if (__bEchoLevel > 0) __bEchoLevel--;
break ;
case CHIPS_NORMAL :
__bEchoLevel = CHIPS_DEFAULT_ECHO ;
break ;
case CHIPS_TOGGLE :
break ;
case CHIPS_LEVEL :
return __bEchoLevel ;
case CHIPS_SUPPORT :
return TRUE;
default :
break ;
}
//Kevin1.05, modify
//W99AV_WriteDM(W99AV_DM_ECHO_CR0, (((WORD)0x5B*__bEchoLevel/ECHO_LEVEL)<<4) | 0x4 ); //scaling factor = 4/16
if (!__bEchoLevel)
W99AV_WriteDM(W99AV_DM_ECHO_CR0, 0x808); //disable echo
else
W99AV_WriteDM(W99AV_DM_ECHO_CR0, (((WORD)0x5B*__bEchoLevel/ECHO_LEVEL)<<4) | 0x8 ); //scaling factor = 8/16
OSD_OUTPUT_MACRO(MSG_ECHO, __bEchoLevel, 0x3);
return TRUE;
#endif
}
// *********************************************************************
// Function : CHIPS_DownMixMode
// Description : set AC3 downmix mode at run time
// Arguments : bMode:
// DOWNMIX_LORO : LoRo
// DOWNMIX_LTRT : LtRt
// Return : None
// Side Effect : None
// *********************************************************************
//Kevin1.07, create
void CHIPS_DownMixMode(BYTE bMode)
{
switch(bMode)
{
case AC3_DOWNMIX_LORO :
W99AV_WriteDM(W99AV_DM_DOWNMIX_MODE, 0); //LoRo
break ;
case AC3_DOWNMIX_LTRT :
default :
W99AV_WriteDM(W99AV_DM_DOWNMIX_MODE, 1); //LoRo
break ;
}
}
// *********************************************************************
// Function : CHIPS_VoiceCancel
// Description : It will cancel the human voice
// : w9922qf doesn't support voice cancel
// Arguments : CHIPS_TOGGLE, toggle the voice cancel on/off
// Return : TRUE : Supported/Succeeded
// : FALSE : Not supported
// Change :
// Side Effect :
// *********************************************************************
BYTE CHIPS_VoiceCancel(BYTE bCancel)
{
//WWC_HC2500
#ifdef KARAOKE // WWH_HC2500
switch(bCancel)
{
case CHIPS_TOGGLE :
__btVoiceCancel = !__btVoiceCancel;
break ;
case CHIPS_SUPPORT :
return TRUE ;
default :
return FALSE;
}
KARAOKE_VoiceCancel(__btVoiceCancel);
OSD_OUTPUT_MACRO ( MSG_VOICECANCEL, __btVoiceCancel, 0x3 ); // clear Digest
return TRUE;
#else
// Not supported by W9922QF
//OSD_OUTPUT_MACRO ( MSG_VOICECANCEL, __btVoiceCancel, 0x3 ); // clear Digest
#endif
return FALSE ;
}
// *********************************************************************
// Function : CHIPS_Change3DLevel
// Description : Set the parameters for different 3D effect
// w9922qf doesn't support 3d
// Arguments : bChangeLevel :
// CHIPS_TOGGLE, toggle between 3D level
// Return : TRUE, 3D function is supported and carried out
// Change :
// Side Effect :
// *********************************************************************
BYTE CHIPS_Change3DLevel(BYTE bChangeLevel)
{
#ifdef KARAOKE // WWH_HC2500
//static _b3DLevel=0;
switch (bChangeLevel)
{
case CHIPS_TOGGLE :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -