#include "drv_types.h" #include #include "hdmi_dbg.h" #include "hdmi_cmdq.h" #include "drv_devices.h" #include "hdmi_time.h" #ifndef INIT_BY_KMF extern INT32 DRV_Audio_intcmdqfire(void *); static BOOL SendAudioCmdq(AUDIO_CMDQ *pCmdq) { UINT32 num = 5; INT32 result = 0; while ((result = DRV_Audio_intcmdqfire((void*)pCmdq)) && (num--)); return (num != 0) ? true : false; } #else extern BOOL SendAudioCmdq(AUDIO_CMDQ *pCmdq); extern BOOL ResetAudioENG(AUDIO_CMDQ *pReset); #endif BOOL HDMI_AudioSendCmdq(AUDIO_CMDQ* cmdq) { BOOL ret = false; ret = SendAudioCmdq(cmdq); return ret; } BOOL HDMI_AudioSetOffset(UINT32 offset, UINT32 NLdelayCnt) { AUDIO_CMDQ offset_cmdq = {0}; hdmidbg("Step2:Send PTS Offset\n"); offset_cmdq.CID = AUDIO_CID; offset_cmdq.flag = AUDIO_FLAG_SET_PTS_OFFSET; offset_cmdq.RxType = AUDIO_RX_TYPE_HDMI; offset_cmdq.PTS_offset = offset; offset_cmdq.NLdelayCnt = NLdelayCnt; return HDMI_AudioSendCmdq(&offset_cmdq); } BOOL HDMI_AudioResetDecoder(void) { AUDIO_CMDQ resetcmdq; #ifndef INIT_BY_KMF volatile UINT32 *rp, *wp; #endif memset(&resetcmdq, 0, sizeof(AUDIO_CMDQ)); resetcmdq.CID = AUDIO_CID; resetcmdq.flag = AUDIO_FLAG_RESET_ALL; resetcmdq.RxType = AUDIO_RX_TYPE_HDMI; #ifdef INIT_BY_KMF if (!ResetAudioENG(&resetcmdq)) { return false; } #else rp = Get_CmdQ_RP(); wp = Get_CmdQ_WP(); if (*rp != *wp) { return false; } DISABLE_DRV_ENG(DRV_Audio_ENG); HDMI_DelayMs(1); ENABLE_DRV_ENG(DRV_Audio_ENG); if (!HDMI_AudioSendCmdq(&resetcmdq)) { return false; } #endif hdmidbg("Step1:Reset Audio Decoder\n"); return true; }