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

📄 hdecoder.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
// Description  :   Read information corresponding to the specified item// Arguments    :   bInfo: the desired infomation type//                  pdwData: ptr to the read value// Return       :   TRUE or FALSE// Side Effect  :// *****************************************************************************BYTE    HAL_ReadInfo(BYTE bInfo, DWORD *pdwData){    DWORD   dwTemp;    switch(bInfo)    {    case    HAL_INFO_FRAME_ID:        *pdwData = __dwDISPTR;        break;    case    HAL_INFO_FRAME_ERROR:        *pdwData = __dwPicErrCnt;        break;    case    HAL_INFO_HLI_STATUS:        if (__dwSPType == SP_TYPE_DVD)        {            *pdwData = __blHLI_Status;        }        else        {            *pdwData = 0;        }        break;    case    HAL_INFO_STILL:        *pdwData = __dwSeqEndCode;        break;    case    HAL_INFO_DECCMD_ACK :         // *pdwData = __dwPlayMode;         *pdwData = REG_SRAM_PLAYMODE;         break;    case    HAL_INFO_DECFRAME:        *pdwData = __dwDecFrame;        break;    // Chuan0.70, Add to query current Disp frame index    case    HAL_INFO_DISPFRAME_INDEX:        *pdwData = __dwM_sel;        break;#ifndef NO_PIP    // Chuan0.70, Add to query current Disp PIP frame    case    HAL_INFO_PIPFRAME:        *pdwData = __dwPIP_disp_sel;        break;#endif  // #ifndef NO_PIP    //0xffffff->0; 0->1; ...    case    HAL_INFO_VIDEO_REMAIN:        // Notice: must *2 to let output as DWORD unit (H/W register reports value is 64 bit unit)        // *pdwData = ( (REG_MCU_VREM + BIT_BUFF_DIFF) & 0xFFFFFF ) * (BIT_BUFF_UNIT_32);        *pdwData = MCU_VIDEO_BS_BUF_REMAINDER / 4; // Unit: DW        break;    case    HAL_INFO_AUDIO_REMAIN:        // Notice: must *2 to let output as DWORD unit (H/W register reports value is 64 bit unit)        /*        if (_bHALABuf2Def)        {            *pdwData = ( (REG_MCU_A1REM + BIT_BUFF_DIFF) & 0xFFFFFF )* (BIT_BUFF_UNIT_32);        }        else        {            *pdwData = 0;        }        *pdwData += ( (REG_MCU_A0REM + BIT_BUFF_DIFF) & 0xFFFFFF ) * (BIT_BUFF_UNIT_32);        */        if (_bHALABuf2Def)        {            *pdwData = MCU_A1_BS_BUF_REMAINDER;        }        else        {            *pdwData = 0;        }        *pdwData += MCU_A0_BS_BUF_REMAINDER;        *pdwData /= 4;  // Unit: DW        break;    case    HAL_INFO_AUDIO1_REMAIN:        // Notice: must *2 to let output as DWORD unit (H/W register reports value is 64 bit unit)        // *pdwData = ( (REG_MCU_A0REM + BIT_BUFF_DIFF) & 0xFFFFFF ) * (BIT_BUFF_UNIT_32);        *pdwData = MCU_A0_BS_BUF_REMAINDER / 4; // Unit: DW        break;    case    HAL_INFO_AUDIO2_REMAIN:        // Notice: must *2 to let output as DWORD unit (H/W register reports value is 64 bit unit)        //A2-Rem=SPDIF raw W-R ptr for one buffer audio type such as AC3/DTS        // *pdwData = ( (REG_MCU_A1REM + BIT_BUFF_DIFF) & 0xFFFFFF ) * (BIT_BUFF_UNIT_32);        *pdwData = MCU_A1_BS_BUF_REMAINDER / 4; // Unit: DW        break;    case    HAL_INFO_VSIZE:        *pdwData = __dwCoded_Picture_Height;        break;    case    HAL_INFO_HSIZE:        *pdwData = __dwCoded_Picture_Width;        break;    case    HAL_INFO_STC:        *pdwData = REG_PLAT_TIMER3_VALUE;        break ;    // LLY2.51, split audio bitrate data getting procedure from audio frequency.    // Since, we may re-correct bitrate of variable bitrate MP3    // So, if any call HAL_INFO_AUDIOFREQ after F/W re-correct it    // Then, the value will be modify again.    case    HAL_INFO_BITRATE:        HAL_ReadAM(HAL_AM_BIT_RATE, &dwTemp);        __wHALAudioBitrate = (WORD)dwTemp;        *pdwData = dwTemp;        break;    case    HAL_INFO_AUDIOFREQ:        // LLY2.51, split it to an indepentent case        /*        HAL_ReadAM(HAL_AM_BIT_RATE, &dwTemp);        __wHALAudioBitrate = (WORD)dwTemp;        */        HAL_ReadAM(HAL_AM_SAMPLE_RATE, &dwTemp);        // LLY1.20, assign the audio frequency first        // Since, __dwHALAudioFreq means the real audio frequency (don't care up sample or not)        switch((BYTE)dwTemp)        {        case    0x1:    // 8 KHz            __dwHALAudioFreq=VALUE_8K;            *pdwData = AUDIO_FREQ_8K;            break;        case    0x2:    // 16 KHz            __dwHALAudioFreq=VALUE_16K;            *pdwData = AUDIO_FREQ_16K;            break;        case    0x3:    // 32 KHz            __dwHALAudioFreq=VALUE_32K;            *pdwData = AUDIO_FREQ_32K;            break;        case    0x6:    // 11.025KHz            __dwHALAudioFreq=VALUE_11K;            *pdwData = AUDIO_FREQ_11K;            break;        case    0x7:    // 22.05 KHz            __dwHALAudioFreq=VALUE_22K;            *pdwData = AUDIO_FREQ_22K;            break;        case    0x8:    // 44.1 KHz            __dwHALAudioFreq=VALUE_44K;            *pdwData = AUDIO_FREQ_44K;            break;        case    0x9:    // 88.2 KHz            __dwHALAudioFreq=VALUE_88K;            *pdwData = AUDIO_FREQ_88K;            break;        case    0xa:    // 176.4 KHz            __dwHALAudioFreq=VALUE_176K;            *pdwData = AUDIO_FREQ_176K;            break;        case    0xb:    // 12 KHz            __dwHALAudioFreq=VALUE_12K;            *pdwData = AUDIO_FREQ_12K;            break;        case    0xc:    // 24 KHz            __dwHALAudioFreq=VALUE_24K;            *pdwData = AUDIO_FREQ_24K;            break;        case    0xd:    // 48 KHz            __dwHALAudioFreq=VALUE_48K;            *pdwData = AUDIO_FREQ_48K;            break;        case    0xe:    // 96 KHz            __dwHALAudioFreq=VALUE_96K;            *pdwData = AUDIO_FREQ_96K;            break;        case    0xf:    // 192 KHz            __dwHALAudioFreq=VALUE_192K;            *pdwData = AUDIO_FREQ_192K;            break;        default:        case    0:            __dwHALAudioFreq=0;            *pdwData = AUDIO_FREQ_NONE;            return FALSE;            break;        }        //DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "  __dwHALAudioFreq=%lx  __wHALAudioBitrate=%lx", __dwHALAudioFreq, __wHALAudioBitrate);        break ;    case    HAL_INFO_CAN_RUNTIME_RESET_PROC2:        //can't be used when Proc2 does unpack        //GR(1)[31]- written 1 by boot Proc2 code; 0 by small boot Proc2 code        if ( (*(volatile DWORD *)0x80000784) >> 31 )            *pdwData = TRUE;        else            *pdwData = FALSE;        break;    // wyc1.11a, return the disp mode for upper level code to reference.    case    HAL_INFO_DISP_MODE_SET:    {        extern DWORD _dwModeSet;        *pdwData = _dwModeSet;        break;    }    // Chuan1.21, Query STC is updated or not.    case    HAL_INFO_STC_UPDATED:        *pdwData = __dwSTCUpdated;        break;#ifdef SUPPORT_STB //Aron2.17-909s, for stb    // LLY2.17, porting Aron's code to get Aspect Ratio information.    case    HAL_INFO_ASPECT_RATIO:        *pdwData = __dwAspect_Ratio_Info;        break;#endif //    // LLY2.21a, add to read back audio channel number    case    HAL_INFO_CHANNEL_NO:        // bit[1:0] : L/R/C;  bit[3:2]: Ls/Rs; bit[24]: LFE        *pdwData = (REG_AIU_GR(14)&0x3) + ((REG_AIU_GR(14)>>2)&0x3) + ((REG_AIU_GR(14)>>24)&0x1);        //printf("%lx, %lx, %lx, %lx\n", (REG_AIU_GR(14)&0x3), ((REG_AIU_GR(14)>>2)&0x3), ((REG_AIU_GR(14)>>24)&0x1), REG_AIU_GR(14));        // LLY2.61, porting Grievous's code again since it seems lost for DVD_260 integration.        // Grievous2.60, must return FALSE while the value is zero        // to tell caller the information is not ready.        if(*pdwData==0)            return FALSE;        break;    // LLY2.22, add to read back FBR mode flag    case    HAL_INFO_FBR_MODE:        *pdwData = __dwFBRMode;        break;    // LLY2.22, add to read back DISP frame Y address    case    HAL_INFO_DISPFRAME_YADDR:        *pdwData = __DISPFrameInfo[(BYTE)(*pdwData)].dwFY_Addr;        break;    // LLY2.22, add to read back DISP frame UV address    case    HAL_INFO_DISPFRAME_UVADDR:        *pdwData = __DISPFrameInfo[(BYTE)(*pdwData)].dwFC_Addr;        break;    // LLY2.30, add to read back LPCM downsample or not flag    case    HAL_INFO_LPCM_DOWNSAMPLE:        *pdwData = (REG_AIU_GR(10)>>24 & 0x1);        break;    // LLY2.36, add to read back New STC value is valid or not    // Notice: not implement now.    case    HAL_INFO_NEW_STC_VALID:        *pdwData = 1; //__dwUseNewSTC;        break;    default:        return FALSE;    }    return TRUE;}//*********************************************************************// Description  :   Write audio settings to Proc2// Arguments    :   bType: parameter type//                  pdwVal: ptr to memory where the read value is to be stored// Return       :   None// Notice       :   Using PROC1 vs. PROC2 command register//                  [Issue mode]//                  Para1[31:30]: 1 = write AM; 2 = read AM//                  Para1[7:0]: Command ID//                  Para2[31:0]: value//                  REG_PLAT_PROC2_INT_FORCE[11] = 1, to set S/W INT to PROC2//                  [Readback mode]//                  Para1[31:30]: command ack//                  Para2[31:0]: value//*********************************************************************void    HAL_WriteAM(BYTE bCmdId, DWORD dwVal){//    DWORD dwHALTemp, dwAck=1;#ifdef NO_PROC2    return ;#endif // #ifdef NO_PROC2#ifdef DEBUG_RW_AM    if (bCmdId!=HAL_AM_RESET_AUDIO)        DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "\nHAL_WriteAM(%hx,%lx)", bCmdId, dwVal);#endif // #ifdef DEBUG_RW_AM    // Clear parameter 1 & 2 as zero first before using it.    // Seems un-necessary ??    REG_PLAT_PARAMETER1 = 0;    REG_PLAT_PARAMETER2 = 0;    // Set desired value into parameter 2    switch (bCmdId)    {        ///// 1 bit /////        case HAL_AM_DOWNSAMPLE_EN:        case HAL_AM_UPSAMPLE_EN: //for MP3-LSF        case HAL_AM_2CH_TO_6CH: //Duplicate        case HAL_AM_LFE_OUTPUT:        case HAL_AM_SPDIF_MODE:        case HAL_AM_SPDIF_OUTPUT:        case HAL_AM_KEYSHIFT_EN:        case HAL_AM_SURR_EN:        case HAL_AM_DTS_MODE:        case HAL_AM_START_DECODE: //for MP3/WMA        case HAL_AM_PROLOGIC_ENABLE:        case HAL_AM_SKIP_ALL_FRAMES:        case HAL_AM_PCM_MUTE:        case HAL_AM_ENCODE_SPDIF_RAW:        case HAL_AM_VIDEO_MASTER:        case HAL_AM_VIDEO_UPDATED_STC:        case HAL_AM_RESET_PTS:        case HAL_AM_PROC2_WAIT_STC:        case HAL_AM_TEST_CENTERSURR_DELAY:        case HAL_AM_DBG_SHOWINFO:        case HAL_AM_MPEG_STB_RADIO: // LLY2.21, for STB radio command       	case HAL_AM_DECODE_DTS: // Aron2.36, for STB AC3 decode control       	// LLY2.38, add to info DSP not update STC       	// [0]: update STC; [1]: not update STC       	case HAL_AM_AUDIO_NOT_UPDATE_STC:    	// CMH2.55, add to enable PCM    	case HAL_AM_PCM_BTYE_PER_SAMPLE:        // LLY2.55, porting Grievious's code to support AM interface for PCM channel setting.        case HAL_AM_PCM_CH_NUM:        // Joey2.60: add for controlling of SPDIF PCM with/without volume control.        case HAL_AM_DO_SPDIF_PCM_SCALE:        // LLY2.61, add to tell audio decoder current CT909G type (5.1ch or 2 ch)        case HAL_AM_CT909G_2CH:        // Grievous2.77, provide A/V sync control for audio STC is great than STC 2 second will clean audio buffer for *.avi file.       	case HAL_AM_AV_SYNC_2SEC_CONDITION:            REG_PLAT_PARAMETER2 = dwVal&0x1;            break;        ///// 2 bits /////        case HAL_AM_AC3_DOWNMIX_MODE:        case HAL_AM_AC3_KOK_MODE:        case HAL_AM_DUAL_MODE:        case HAL_AM_PCM_MODE:        case HAL_AM_BASS_MANAGE_CONFIG:        case HAL_AM_DRC_MODE: //kevin0.76            REG_PLAT_PARAMETER2 = dwVal&0x3;            break;        ///// 3 b

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -