www.pudn.com > dv981-hd.rar > AUD_CTRL.H


/**********************************************************************/ 
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/ 
/***************                                       ****************/ 
/***************  $Modtime:: 03/10/01 6:05p    $       ****************/ 
/***************  $Revision: 5.0 $       ****************/ 
/***************                                       ****************/ 
/***************   Description : Audio Control         ****************/ 
/***************                 Interface Header File ****************/ 
/***************                                       ****************/ 
/***************       Company : MediaTek Inc.         ****************/ 
/***************    Programmer :                       ****************/ 
/**********************************************************************/ 
 
#ifndef _AUD_CTRL_H_ 
#define _AUD_CTRL_H_ 
 
#include ".\dsp\adsp.h" 
 
// ********************************************************************* 
// Default values 
// ********************************************************************* 
#define AUD_DEFAULT_VOL                 20 
#define AUD_VSURR_GAIN_DEFAULT          12 
#define AUD_VSURR_WGAIN_DEFAULT         12 
#define AUD_VSURR_DELAY_DEFAULT          5 
#define AUD_BASS_BOOST_GAIN_DEFAULT     20 
#define AUD_BASS_PIPE_DELAY_DEFAULT      5 
#define AUD_TREBLE_BOOST_GAIN_DEFAULT   20 
#define AUD_REVERB_GAIN_DEFAULT         16 
 
#define SPDIF_CHANGE_SWITCH_CNT         50 // 1.0 seconds 
#define SPDIF_CHANGE_UNMUTE_CNT         25 // 0.5 seconds 
 
#define PCM_FREQ_CHANGE_SWITCH_CNT      50 // 1.0 seconds 
#define PCM_FREQ_CHANGE_UNMUTE_CNT      25 // 0.5 seconds 
 
#define AST_NORMAL_CHANGE_CNT           25 // 0.5 seconds 
#define AST_NORMAL_CHANGE_UNMUTE_CNT    50 // 1 seconds 
#define AST_PCM_CHANGE_UNMUTE_CNT       25 // 0.5   seconds 
 
#ifdef MIC_AUTOMUTE 
  #define MIC_AUTOMUTE_CNT              25    // continuous low level counts 
  #define MIC_AUTOMUTE_ON_CNT           0xff 
#endif 
 
// ********************************************************************* 
// Control Mode 
// ********************************************************************* 
#define DM_STEREO           0 
#define DM_L_MONO           1 
#define DM_R_MONO           2 
#define DM_M_MONO           3 
 
#define ADSP_OFF            0 
#define ADSP_ON             1 
 
#define KARA_MODE_DISABLE   0 
#define KARA_MODE_ENABLE    1 
 
#define MIC_EQ_DISABLE      0 
#define MIC_EQ_ENABLE       1 
 
#define PROLOGIC_DISABLE    0 
#define PROLOGIC_ENABLE     1 
#define PROLOGIC_AUTO       2 
 
/* for SPDIF config, in setup menu option sequence */ 
#define SPDIF_OFF           0x00 
#define SPDIF_RAW           0x10 
#define SPDIF_PCM           0x20 
#define SPDIF_MANUAL        0x40 
 
#define SPDIF_PCM_LR        SPDIF_IEC_LR 
#define SPDIF_PCM_LS_RS     SPDIF_IEC_LS_RS 
#define SPDIF_PCM_C_LFE     SPDIF_IEC_C_LFE 
#define SPDIF_PCM_CH78      SPDIF_IEC_CH78 
 
/* for vAdspSpdifManualSet() */ 
#define SPDIF_CDDA          0 
#define SPDIF_AC3           1 
#define SPDIF_DTS           2 
#define SPDIF_MPEG          3 
#define SPDIF_TYPE_MAX      4 
 
/* for temp use */ 
#define KOK_DISABLE       0 
#define KOK_LRMIX         1 
#define KOK_VMUTE         2 
 
#define AUDIO_KEY_RESUME   0 
#define AUDIO_KEY_PLUS     1 
#define AUDIO_KEY_MINUS    2 
 
#define VOCAL_NO_ASSIST       0 
/* for voice cancel */ 
#define VOCAL_VOICE_CANCEL    1 
/* for L/R switch */ 
#define VOCAL_LEFT            2 
#define VOCAL_RIGHT           3 
/* for stream switch */ 
#define VOCAL_AUDIO1          4 
#define VOCAL_AUDIO2          5 
/* for AC3 karaoke mode */ 
#define VOCAL_NONE            6 
#define VOCAL_V1              7 
#define VOCAL_V2              8 
#define VOCAL_BOTH            9 
#if defined(INTERNAL_KARA) 
#define VOCAL_MIC_ON                10 
#define VOCAL_MIC_OFF               11 
#endif 
 
#if defined(INTERNAL_KARA) 
#define VOL_MAIN_MODE              0 
#define VOL_MIC_ON_MODE               0 
#define VOL_TONE_MODE              1 
#define VOL_ECHO_MODE              3 
#define VOL_MIC_MODE               2 
#define VOL_SSN_MODE               4 
#define VOL_LM_MODE                4 
#define VOL_RM_MODE                5 
#define VOL_NON_MODE               6 
#endif 
 
#define fgIsAc3Vocal(bType)   ((bType >= VOCAL_NONE) && (bType <= VOCAL_BOTH)) 
 
#define VOACL_TYPE_MAX        10 
 
#define AUDIO_STEREO          0 
#define AUDIO_MONO_LEFT       11 
#define AUDIO_MONO_RIGHT      12 
#define AUDIO_MONO_MIXED      13 
 
#define AUD_MIC_VOL_1        0x01 
#define AUD_MIC_VOL_2        0x02 
#define AUD_MIC_VOL_BOTH     0x03 
 
#define AUD_CH_EQ_CTRL          1 
#define AUD_VSURR_CTRL          2 
#define AUD_BASS_BOOST_CTRL     3 
#define AUD_TREBLE_BOOST_CTRL   4 
#define AUD_BASS_PIPE_CTRL      5 
#define AUD_REVERB_CTRL         6 
 
/* for vAdspReverbMode() */ 
#define AUD_REVERB_MODE_OFF     0 
#define AUD_REVERB_MODE_MAX     7 
 
// for DSP processing mode 
#define AUD_BASS_TO_SUB         1 
#define AUD_SPECTRUM            2 
 
// for vAdspPostDRC() 
#define AUD_DRC_POST_OFF        0 
#define AUD_DRC_POST_ON         1 
#define AUD_DRC_POST_AUTO       2 
 
// for vSetPinkNoiseSp() 
#define AUD_PN_OFF              0 
#define AUD_PN_ON               1 
#define AUD_PN_NEXT             2 
 
#define PINK_NOISE_PERIOD       3 
 
#define PN_SPK_OFF              0 
#define PN_SPK_L                1 
#define PN_SPK_C                2 
#define PN_SPK_R                3 
#define PN_SPK_RS               4 
#define PN_SPK_LS               5 
#define PN_SPK_LFE              6 
 
#define PN_SPK_NS               6 
 
// for vAdspVsurrCtrl() 
#define AUD_VSURR_OFF           0 
#define AUD_VSURR_MTK           1 
#define AUD_VSURR_N22           2 
 
// ********************************************************************* 
// For equalizer preset 
// ********************************************************************* 
#define AUD_EQ_TYPE_NONE  0 
#define AUD_EQ_ROCK       1 
#define AUD_EQ_POP        2 
#define AUD_EQ_LIVE       3 
#define AUD_EQ_DANCE      4 
#define AUD_EQ_TECHNO     5 
#define AUD_EQ_CLASSIC    6 
#define AUD_EQ_SOFT       7 
#define AUD_EQ_TYPE_MAX   8 
 
 
// ********************************************************************* 
// For audio control. 
// ********************************************************************* 
typedef union 
{ 
  BYTE Byte; 
  struct 
  { 
    BYTE fgChEq:1; 
    BYTE bVsurrType:2; 
    BYTE fgBassBoost:1; 
    BYTE fgTrebleBoost:1; 
    BYTE fgBassPipe:1; 
    BYTE fgReverb:1; 
    BYTE bReserve:1; 
  } Bit; 
} unionSurrType; 
 
typedef struct 
{ 
  struct 
  { 
    BYTE bCurVol:6; 
    BYTE fgIsMute:1; 
    BYTE fgLower:1; 
  } sVol; 
 
  struct 
  { 
    BYTE bEcho:7; 
    BYTE fgMic:1; 
  } sEcho; 
 
  struct 
  { 
    /* BYTE 0 */ 
    BYTE bVocalMode:6; 
    BYTE fgMelody:1; 
    BYTE fgVoiceCancel:1; 
#ifdef VOCAL_ASSIST_MIC_CNT 
    /* BYTE 1 */ 
    BYTE fgMicActive:1; 
    BYTE bMicCnt:7; 
#endif 
  } sVocal; 
 
  struct 
  { 
    /* BYTE 0 */ 
    BYTE fgDownmixOn:1; 
    BYTE fgKaraMode:1; 
    BYTE fgVocalAssist:1; 
    BYTE fgSpdifOn:1; 
    BYTE bPinkNoiseSpk:4; 
    /* BYTE 1 */ 
    BYTE bSpkFormat:3; 
    BYTE fgDspStop:1; 
    BYTE bAudioInMode:2; 
    BYTE Reserve:2; 
  } sFlag; 
 
  unionSurrType uSurrType; 
 
  CHAR cCurKey; /* audio key */ 
  BYTE bKaraMixRatioLR; 
 
 
  struct 
  { 
    /* BYTE 0 */ 
    BYTE bCnt; 
    /* BYTE 1 */ 
    BYTE bState:2; 
    BYTE bFormat:2; 
    BYTE bNextMode:2; 
    BYTE Reserve:2; 
  } sIEC; 
 
#ifdef PCM_FREQ_CHANGE_MUTE 
  struct 
  { 
    /* BYTE 0 */ 
    BYTE bCnt; 
    /* BYTE 1 */ 
    BYTE bState:2; 
    BYTE bFreq:2; 
    BYTE Reserve:4; 
  } sPcmFreq; 
#endif 
 
#ifdef MIC_AUTOMUTE 
  BYTE bMicAutomuteCnt; 
#endif 
 
} strucAudioCtrl; 
 
/* reduce the internal state, try to keep share memory info */ 
#ifdef _AUD_CTRL_C_ 
xdata strucAudioCtrl _rAudioCtrl; 
#else 
extern xdata strucAudioCtrl _rAudioCtrl; 
#endif 
 
// ********************************************************************* 
// For IEC switching state 
// ********************************************************************* 
#define AUD_IEC_SW_IDLE       0 
#define AUD_IEC_SW_CHG        1 
#define AUD_IEC_SW_UNMUTE     2 
 
#define fgIsIecSwitching()    (_rAudioCtrl.sIEC.bState != AUD_IEC_SW_IDLE) 
#define fgIsIecSwitched()     (_rAudioCtrl.sIEC.bState == AUD_IEC_SW_UNMUTE) 
 
#define vSetIecSwitching()                            \ 
{                                                     \ 
  _rAudioCtrl.sIEC.bCnt = SPDIF_CHANGE_SWITCH_CNT;    \ 
  _rAudioCtrl.sIEC.bState = AUD_IEC_SW_CHG;           \ 
} 
 
#define vResetIecSwitching()                          \ 
{                                                     \ 
  _rAudioCtrl.sIEC.bCnt = 0;                          \ 
  _rAudioCtrl.sIEC.bState = AUD_IEC_SW_IDLE;          \ 
} 
 
// ********************************************************************* 
// For Audio in 
// ********************************************************************* 
#define fgIsLineInMode()          (_rAudioCtrl.sFlag.bAudioInMode == DSP_AIN_LINE) 
#define fgIsSpdifInMode()         (_rAudioCtrl.sFlag.bAudioInMode == DSP_AIN_SPDIF) 
 
 
// ********************************************************************* 
// For PCM Frequency Switching State 
// ********************************************************************* 
#define AUD_PCM_FREQ_IDLE     0 
#define AUD_PCM_FREQ_CHG      1 
#define AUD_PCM_FREQ_UNMUTE   2 
 
#define fgIsPcmFreqSwitching()    (_rAudioCtrl.sPcmFreq.bState != AUD_PCM_FREQ_IDLE) 
#define fgIsPcmFreqSwitched()     (_rAudioCtrl.sPcmFreq.bState == AUD_PCN_FREQ_UNMUTE) 
 
#define vSetPcmFreqSwitching()                            \ 
{                                                         \ 
  _rAudioCtrl.sPcmFreq.bCnt = PCM_FREQ_CHANGE_SWITCH_CNT; \ 
  _rAudioCtrl.sPcmFreq.bState = AUD_PCM_FREQ_CHG;         \ 
} 
 
#define vResetPcmFreqSwitching()                          \ 
{                                                         \ 
  _rAudioCtrl.sPcmFreq.bCnt = 0;                          \ 
  _rAudioCtrl.sPcmFreq.bState = AUD_PCM_FREQ_IDLE;        \ 
} 
 
// ********************************************************************* 
// Get current Adsp state 
// ********************************************************************* 
#define fgIsKaraMode()      (_rAudioCtrl.sFlag.fgKaraMode == TRUE) 
#define fgIsVocalAssistOn() (_rAudioCtrl.sFlag.fgVocalAssist == TRUE) 
#define fgIsVoiceCancel()   (_rAudioCtrl.sVocal.fgVoiceCancel == TRUE) 
#define fgIsMute()          (_rAudioCtrl.sVol.fgIsMute == TRUE) 
#define fgIsVsurrOn()       (_rAudioCtrl.uSurrType.Bit.bVsurrType != AUD_VSURR_OFF) 
#define fgIsReverbOn()      (_rAudioCtrl.uSurrType.Bit.fgReverb == TRUE) 
 
// ********************************************************************* 
// Get current Adsp mode 
// ********************************************************************* 
#define bAdspCurrVol()      (_rAudioCtrl.sVol.bCurVol) 
#define bAdspCurrSurr()     (_rAudioCtrl.uSurrType.Byte) 
#define bAdspCurrVocal()    (_rAudioCtrl.sVocal.bVocalMode) 
 
#ifdef MIC_AUTOMUTE 
#define fgIsMicAutomuteOn() (_rAudioCtrl.bMicAutomuteCnt == MIC_AUTOMUTE_ON_CNT) 
#endif 
 
// ********************************************************************* 
// For channel equalizer paramters 
// ********************************************************************* 
typedef struct { 
  union 
  { 
    BYTE Byte; 
    struct 
    { 
      BYTE Ch:4; 
      BYTE Band:4; 
    } Bit; 
  } Union; 
} strucDspChBand; 
 
// ********************************************************************* 
// For downmix mode config 
// ********************************************************************* 
typedef struct { 
  BYTE Front:2; /* small/large */ 
  BYTE Mode:2; 
  BYTE Sub:1; 
  BYTE Reserve:3; 
} strucDownmixConfig; 
 
/* for 2 channel downmix mode */ 
#define DOWNMIX_OFF         0x00 
#define DOWNMIX_LO_RO       0x01 
#define DOWNMIX_LT_RT       0x02 
 
// ********************************************************************* 
// For multi-channel speaker config 
// ********************************************************************* 
typedef struct { 
  BYTE Cntr:2; /* off/small/large */ 
  BYTE Rear:2; /* off/small/large */ 
  BYTE Fr:2; /* small/large */ 
  BYTE Sub:1; 
  BYTE Reserve:1; 
} strucSpkConfig; 
 
/* for speaker config */ 
#define SPK_OFF             0x00 
#define SPK_ON              0x01 /* for SUB/CB/CH7 */ 
#define SPK_SMALL           0x01 
#define SPK_LARGE           0x02 
 
/* for speaker config */ 
#define SPK_LR              0x01 
#define SPK_LS              0x02 
#define SPK_RS              0x04 
#define SPK_LS_RS           0x06 
#define SPK_CNTR            0x08 
#define SPK_SUB             0x10 
#define SPK_CB              0x20 
#define SPK_CH7             0x40 
 
#define UP_SAMP_1X          1 
#define UP_SAMP_2X          2 
#define UP_SAMP_4X          4 
#define UP_SAMP_8X          8 
 
#define MIC_STOP            0 
#define MIC_REC             1 
#define MIC_PLAY            2 
 
// ********************************************************************* 
// For vAdspKaraLR() 
// ********************************************************************* 
#define KARA_LEFT           0 
#define KARA_RIGHT          1 
#define KARA_STEREO         2 
 
// ********************************************************************* 
// For vAdspKaraAC3() 
// ********************************************************************* 
#define KARA_NONE           0 
#define KARA_V1             1 
#define KARA_V2             2 
#define KARA_BOTH           3 
 
// ********************************************************************* 
// Function prototypes 
// ********************************************************************* 
void vInitAdspShareInfo(void) large; 
void vAdspInit(BYTE bVolume) large; 
void vAdspReset(void) large; 
void vAdspAudioTypeChange(BYTE bAudioType, BYTE bDiscType, BYTE bInitState) large; 
void vAdspPbcChange(BYTE bPbcState) large; 
 
#if (!defined(SET_VSURR_IN_SPKCFG) && defined(PLAYER_SURROUND)) 
BOOL fgCheckIsVSurrValid(BYTE bAudioType, BYTE bDiscType, BYTE bInitState) large; 
#endif 
 
#if 0 
  void vAdspProcMode(BYTE bMode, BOOL fgOnoff) large; 
#endif 
 
#ifdef PLAYER_SURROUND 
  #ifndef NO_POST_DRC_ON_OFF 
  void vAdspPostDRC(BYTE bMode) large; 
  #endif 
#endif 
 
void vAdspVolume(BYTE bLevel) large; 
void vAdspMute(BOOL fgOnOff, BYTE bTime) large; 
void vAdspLR(BYTE bMode) large; 
void vAdspSpkDownmix(strucDownmixConfig rSpk) large; 
void vAdspAc3DualMono(BYTE bMode) large; 
void vAdspDynamicRange(BYTE bLevel) large; 
void vAdspSpdifMode(BYTE bMode) large; 
void vAdspSpdifManualSet(BYTE bType, BYTE bMode) large; 
 
#ifndef TWO_CHANNEL_ONLY 
  #ifdef SPDIF_PCM_CH_SELECT 
  void vAdspSpdifCh(BYTE bCh) large; 
  #endif 
  #ifdef SPDIF_PCM_FREQ_SELECT 
  void vAdspPcmFreq(BYTE bMode) large; 
  #endif 
 
  void vAdspSpkConfig(strucSpkConfig rSpk) large; 
 
#ifdef CHANNEL_AUDIO_DELAY 
  void vAdspChDelay(BYTE bChannel, WORD wDelay) large; 
#else 
  void vAdspChDelay(BYTE bChannel, BYTE bDelay) large; 
#endif 
 
  void vAdspChDelayTime(BYTE bChannel, BYTE bTime) large; 
  #ifdef PLAYER_TRIM 
  void vAdspChTrim(BYTE bChannel, BYTE bLevel) large; 
  #endif 
  void vAdspDialogGain(BYTE bLevel) large; 
 
#else 
	#ifdef BBK_MENU 
  #ifdef SPDIF_PCM_CH_SELECT 
  void vAdspSpdifCh(BYTE bCh) large; 
  #endif 
  #ifdef SPDIF_PCM_FREQ_SELECT 
  void vAdspPcmFreq(BYTE bMode) large; 
  #endif 
 
	#endif 
#endif 
 
#ifdef PLAYER_KARAOKE 
  void vAdspKaraMode(BYTE bMode) large; 
  void vAdspSetMicEq(BYTE bMode) large; 
  void vAdspVocalAssist(BYTE bMode) large; 
  #ifdef VOCAL_ASSIST_MIC_CNT 
  void vAdspKaraVC(BOOL fgOn) large; 
  #endif 
  void vAdspKaraLR(BYTE bMode) large; 
  #ifdef AC3_KARA_MODE 
    #ifdef AC3_KARA_MELODY 
  void vAdspKaraMelody(BOOL fgOn) large; 
    #endif 
  void vAdspKaraAC3(BYTE bMode) large; 
  #endif 
  void vAdspMicEq(BYTE bBand, BYTE bGain) large; 
  void vAdspMicVol(BYTE bChannel, BYTE bVol) large; 
  void vAdspMicThreshold(BYTE bLevel) large; 
  BOOL fgAdspIsMicOn(void) large; 
  #ifdef KARAOKE_SIMPLE_ECHO 
  void vAdspEchoLevel(BYTE bLevel) large; 
  #else /* original echo */ 
  void vAdspEchoDelay(BYTE bMode) large; 
  void vAdspEchoDepth(BYTE bMode) large; 
  void vAdspEchoVol(BYTE bMode) large; 
  #endif /* original echo */ 
  void vAdspMicMix(BYTE bCh, BYTE bMode) large; 
  #if 0 
  void vAdspEchoCtrl(BYTE bMode) large; 
  #endif 
  #ifdef KARAOKE_MIC_REC 
  void vAdspMicRec(BYTE bMode) large; 
  BYTE bAdspMicRecState(BYTE bMode) large; 
  #endif /* KARAOKE_MIC_REC */ 
#endif /* PLAYER_KARAOKE */ 
 
#if (defined(PLAYER_KARAOKE) || defined(USE_EXTERNAL_KARAOKE)) 
  char cAdspAudKeyCtrl(BYTE bMode) large; 
#endif 
 
#ifdef PLAYER_SURROUND 
  void vAdspSurr(BYTE bMode, BYTE bOption) large; 
  void vAdspChEqBand(strucDspChBand rChBand, BYTE bLevel, BYTE fgNotify) large; 
  void vAdspChEqLoadPreset(BYTE bType) large; 
  #ifdef PLAYER_ADV_EQ 
  char cAdspChEqPresetParm(BYTE bType, BYTE bBand) large; 
  #endif 
  void vAdspVsurrGain(BYTE bLevel) large; 
  void vAdspVsurrWGain(BYTE bLevel) large; 
  void vAdspVsurrDelay(BYTE bLevel) large; 
  void vAdspBassBoostGain(BYTE bLevel) large; 
  void vAdspTrebleBoostGain(BYTE bLevel) large; 
  void vAdspBassPipeDelay(BYTE bLevel) large; 
  void vAdspReverbMode(BYTE bMode) large; 
  #if 0 
  void vAdspReverbGain(BYTE bLevel) large; 
  #endif 
#elif (defined(SET_VSURR_IN_SPKCFG)) // not define PLAYER_SURROUND 
  void vAdspSurr(BYTE bMode, BYTE bOption) large; 
#endif 
 
#ifdef DOLBY_PROLOGIC 
  void vAdspPrologMode(BYTE bMode) large; 
  void vAdspPrologBal(BYTE bMode) large; 
  void vAdspPrologSurr(BYTE bMode) large; 
#endif 
 
#ifdef DOLBY_PROLOGIC2 
  #define AUD_PL2_SWITCH      0 
  #define AUD_PL2_MODE        1 
  #define AUD_PL2_PANORAMA    2 
  #define AUD_PL2_DIMENSION   3 
  #define AUD_PL2_C_WIDTH     4 
 
void vAdspPL2Config(BYTE bCtrl, BYTE bMode) large; 
#endif 
 
#if (defined(HDCD_CERTIFICATION) || defined(HDCD_EN)) 
void vAdspHdcdMode(BYTE bMode, BYTE bDither) large; 
void vAdspUpSamp(BYTE bLevel) large; 
void vAdspDitherLvl(BYTE bLevel) large; 
  #ifdef AUDIO_IN_EN 
void vAdspInputBLength(BYTE bLength) large; 
  #endif 
#endif 
 
#ifdef SETUP_ENABLE_TEST_TONE 
BYTE bSetPinkNoiseSp(BYTE bMode) large; 
#endif 
 
#ifdef AUDIO_IN_EN 
void vAdspAinSel(BYTE bCh) large; 
#endif 
 
void vAdspTimerJob(void) large; 
 
#ifdef BBK//TONE_IN_SETUP //BillDen 
void bToneChange(CHAR cToneValue) large; 
#endif 
#ifdef CHANNEL_AUDIO_DELAY 
void bAudioDelay(CHAR cAudelayValue) large; 
#endif 
 
#if defined(PLAYER_KARAOKE) && defined(KARAOKE_SCORING) 
void vAdspKScoreSw(BYTE bSw, BYTE bMaxScore, BYTE bMinScore) large; 
BYTE bAdspGetKScore(void) large; 
BOOL fgAdspKscoreSupport(void) large; 
  #ifdef KARAOKE_SCORE_TEST 
  void vAdspGetKSHitMiss(WORD *wHit0,WORD *wHit1,WORD *wMiss) large; 
  #endif 
void vAdspResetKScore(void) large; 
#endif 
 
#endif /* _AUD_CTRL_H_ */