HI_S32 SAMPLE_COMM_AUDIO_StartHdmi(AIO_ATTR_S *pstAioAttr) { HI_S32 s32Ret; HI_HDMI_ATTR_S stHdmiAttr; HI_HDMI_ID_E enHdmi = HI_HDMI_ID_0; VO_PUB_ATTR_S stPubAttr; VO_DEV VoDev = 0; stPubAttr.u32BgColor = 0x0000ff00; stPubAttr.enIntfType = VO_INTF_HDMI|VO_INTF_VGA; stPubAttr.bDoubleFrame = HI_FALSE; stPubAttr.enIntfSync = VO_OUTPUT_1080P30; if(HI_SUCCESS != SAMPLE_COMM_VO_StartDevLayer(VoDev, &stPubAttr, 25)) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "failed"); return HI_FAILURE; } s32Ret = SAMPLE_COMM_VO_HdmiStart(stPubAttr.enIntfSync); if(HI_SUCCESS != s32Ret) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "failed"); return HI_FAILURE; } HI_MPI_HDMI_SetAVMute(enHdmi, HI_TRUE); s32Ret = HI_MPI_HDMI_GetAttr(enHdmi, &stHdmiAttr); if(HI_SUCCESS != s32Ret) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "failed"); return HI_FAILURE; } stHdmiAttr.bEnableAudio = HI_TRUE; /**< \CAǷ\F1Enable\D2\F4Ƶ */ stHdmiAttr.enSoundIntf = HI_HDMI_SND_INTERFACE_I2S; /**< HDMI\D2\F4Ƶ\C0\B4Դ, \BD\A8\D2\E9HI_HDMI_SND_INTERFACE_I2S,\B4˲\CE\CA\FD\D0\E8Ҫ\D3\EBAO\CA\E4\C8뱣\B3\D6һ\D6\C2 */ stHdmiAttr.enSampleRate = (HI_HDMI_SAMPLE_RATE_E)pstAioAttr->enSamplerate; /**< PCM\D2\F4Ƶ\B2\C9\D1\F9\C2\CA,\B4˲\CE\CA\FD\D0\E8Ҫ\D3\EBAO\B5\C4\C5\E4\D6ñ\A3\B3\D6һ\D6\C2 */ stHdmiAttr.u8DownSampleParm = HI_FALSE; /**< PCM\D2\F4Ƶ\CF\F2\CF\C2downsample\B2\C9\D1\F9\C2ʵIJ\CE\CA\FD\A3\ACĬ\C8\CFΪ0 */ stHdmiAttr.enBitDepth = 8 * (pstAioAttr->enBitwidth+1); /**< \D2\F4Ƶλ\BF\ED\A3\ACĬ\C8\CFΪ16,\B4˲\CE\CA\FD\D0\E8Ҫ\D3\EBAO\B5\C4\C5\E4\D6ñ\A3\B3\D6һ\D6\C2 */ stHdmiAttr.u8I2SCtlVbit = 0; /**< \B1\A3\C1\F4\A3\AC\C7\EB\C5\E4\D6\C3Ϊ0, I2S control (0x7A:0x1D) */ stHdmiAttr.bEnableAviInfoFrame = HI_TRUE; /**< \CAǷ\F1ʹ\C4\DC AVI InfoFrame\A3\AC\BD\A8\D2\E9ʹ\C4\DC */ stHdmiAttr.bEnableAudInfoFrame = HI_TRUE;; /**< \CAǷ\F1ʹ\C4\DC AUDIO InfoFrame\A3\AC\BD\A8\D2\E9ʹ\C4\DC */ s32Ret = HI_MPI_HDMI_SetAttr(enHdmi, &stHdmiAttr); if(HI_SUCCESS != s32Ret) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "failed"); return HI_FAILURE; } HI_MPI_HDMI_SetAVMute(enHdmi, HI_FALSE); return HI_SUCCESS; }
HI_S32 SAMPLE_COMM_AUDIO_StartHdmi(AIO_ATTR_S *pstAioAttr) { HI_S32 s32Ret; HI_HDMI_ATTR_S stHdmiAttr; HI_HDMI_ID_E enHdmi = HI_HDMI_ID_0; VO_PUB_ATTR_S stPubAttr; VO_DEV VoDev = 0; stPubAttr.u32BgColor = 0x000000ff; stPubAttr.enIntfType = VO_INTF_HDMI; stPubAttr.bDoubleFrame = HI_FALSE; stPubAttr.enIntfSync = VO_OUTPUT_1080P30; if(HI_SUCCESS != SAMPLE_COMM_VO_StartDevLayer(VoDev, &stPubAttr, 25)) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "failed"); return HI_FAILURE; } s32Ret = SAMPLE_COMM_VO_HdmiStart(stPubAttr.enIntfSync); if(HI_SUCCESS != s32Ret) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "failed"); return HI_FAILURE; } HI_MPI_HDMI_SetAVMute(enHdmi, HI_TRUE); s32Ret = HI_MPI_HDMI_GetAttr(enHdmi, &stHdmiAttr); if(HI_SUCCESS != s32Ret) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "failed"); return HI_FAILURE; } stHdmiAttr.bEnableAudio = HI_TRUE; /**< 是否Enable音频 */ stHdmiAttr.enSoundIntf = HI_HDMI_SND_INTERFACE_I2S; /**< HDMI音频来源, 建议HI_HDMI_SND_INTERFACE_I2S,此参数需要与AO输入保持一致 */ stHdmiAttr.enSampleRate = pstAioAttr->enSamplerate; /**< PCM音频采样率,此参数需要与AO的配置保持一致 */ stHdmiAttr.u8DownSampleParm = HI_FALSE; /**< PCM音频向下downsample采样率的参数,默认为0 */ stHdmiAttr.enBitDepth = 8 * (pstAioAttr->enBitwidth+1); /**< 音频位宽,默认为16,此参数需要与AO的配置保持一致 */ stHdmiAttr.u8I2SCtlVbit = 0; /**< 保留,请配置为0, I2S control (0x7A:0x1D) */ stHdmiAttr.bEnableAviInfoFrame = HI_TRUE; /**< 是否使能 AVI InfoFrame,建议使能 */ stHdmiAttr.bEnableAudInfoFrame = HI_TRUE;; /**< 是否使能 AUDIO InfoFrame,建议使能 */ s32Ret = HI_MPI_HDMI_SetAttr(enHdmi, &stHdmiAttr); if(HI_SUCCESS != s32Ret) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "failed"); return HI_FAILURE; } HI_MPI_HDMI_SetAVMute(enHdmi, HI_FALSE); return HI_SUCCESS; }