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

📄 chips.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
//                      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 + -