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;
}
示例#2
0
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;
}