HI_S32 SAMPLE_COMM_VO_HdmiStart(VO_INTF_SYNC_E enIntfSync) { HI_HDMI_INIT_PARA_S stHdmiPara; HI_HDMI_ATTR_S stAttr; HI_HDMI_VIDEO_FMT_E enVideoFmt; SAMPLE_COMM_VO_HdmiConvertSync(enIntfSync, &enVideoFmt); stHdmiPara.enForceMode = HI_HDMI_FORCE_HDMI; stHdmiPara.pCallBackArgs = NULL; stHdmiPara.pfnHdmiEventCallback = NULL; HI_MPI_HDMI_Init(&stHdmiPara); HI_MPI_HDMI_Open(HI_HDMI_ID_0); HI_MPI_HDMI_GetAttr(HI_HDMI_ID_0, &stAttr); stAttr.bEnableHdmi = HI_TRUE; stAttr.bEnableVideo = HI_TRUE; stAttr.enVideoFmt = enVideoFmt; stAttr.enVidOutMode = HI_HDMI_VIDEO_MODE_YCBCR444; stAttr.enDeepColorMode = HI_HDMI_DEEP_COLOR_OFF; stAttr.bxvYCCMode = HI_FALSE; stAttr.bEnableAudio = HI_FALSE; stAttr.enSoundIntf = HI_HDMI_SND_INTERFACE_I2S; stAttr.bIsMultiChannel = HI_FALSE; stAttr.enBitDepth = HI_HDMI_BIT_DEPTH_16; stAttr.bEnableAviInfoFrame = HI_TRUE; stAttr.bEnableAudInfoFrame = HI_TRUE; stAttr.bEnableSpdInfoFrame = HI_FALSE; stAttr.bEnableMpegInfoFrame = HI_FALSE; stAttr.bDebugFlag = HI_FALSE; stAttr.bHDCPEnable = HI_FALSE; stAttr.b3DEnable = HI_FALSE; /* It's recommended to use DVI transmission for VESA standard Timing */ if (enIntfSync > VO_OUTPUT_480P60) { stAttr.bEnableHdmi = HI_FALSE; stAttr.bEnableAudInfoFrame = HI_FALSE; stAttr.enVidOutMode = HI_HDMI_VIDEO_MODE_RGB444; stAttr.bEnableAviInfoFrame = HI_FALSE; } HI_MPI_HDMI_SetAttr(HI_HDMI_ID_0, &stAttr); HI_MPI_HDMI_Start(HI_HDMI_ID_0); printf("HDMI start success.\n"); 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 = 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; }
HI_S32 HI_VO_HdmiStart(VO_INTF_SYNC_E enIntfSync) { int ii = 0; while (HDMI_CONVTBL[ii][0] != enIntfSync) { if(ii >= ARRAY_SIZE(HDMI_CONVTBL)) { return -1; } ii ++; } HI_MPI_HDMI_Stop(HI_HDMI_ID_0); HI_MPI_HDMI_Close(HI_HDMI_ID_0); HI_MPI_HDMI_DeInit(); { HI_HDMI_INIT_PARA_S stHdmiPara; stHdmiPara.enForceMode = HI_HDMI_FORCE_HDMI; stHdmiPara.pCallBackArgs = NULL; stHdmiPara.pfnHdmiEventCallback = NULL; HI_MPI_HDMI_Init(&stHdmiPara); } { HI_HDMI_ATTR_S stAttr; HI_MPI_HDMI_Open(HI_HDMI_ID_0); HI_MPI_HDMI_GetAttr(HI_HDMI_ID_0, &stAttr); stAttr.bEnableHdmi = HI_TRUE; stAttr.bEnableVideo = HI_TRUE; stAttr.enVideoFmt = HDMI_CONVTBL[ii][1]; stAttr.enVidOutMode = HI_HDMI_VIDEO_MODE_RGB444; stAttr.enDeepColorMode = HI_HDMI_DEEP_COLOR_24BIT; stAttr.bxvYCCMode = HI_FALSE; stAttr.bEnableAudio = HI_TRUE; stAttr.enSoundIntf = HI_HDMI_SND_INTERFACE_I2S; stAttr.bIsMultiChannel = HI_FALSE; stAttr.enBitDepth = HI_HDMI_BIT_DEPTH_16; stAttr.enSampleRate = HI_HDMI_SAMPLE_RATE_8K; stAttr.u8DownSampleParm = HI_FALSE; stAttr.u8I2SCtlVbit = 0; stAttr.bEnableAviInfoFrame = HI_TRUE; stAttr.bEnableAudInfoFrame = HI_TRUE; stAttr.bEnableSpdInfoFrame = HI_FALSE; stAttr.bEnableMpegInfoFrame = HI_FALSE; stAttr.bDebugFlag = HI_FALSE; stAttr.bHDCPEnable = HI_FALSE; stAttr.b3DEnable = HI_FALSE; HI_MPI_HDMI_SetAttr(HI_HDMI_ID_0, &stAttr); HI_MPI_HDMI_Start(HI_HDMI_ID_0); } return HI_SUCCESS; }