📄 hdecoder.c
字号:
// 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 + -