/****************************************************************************** * function : Ai -> Ao(Hdmi) ******************************************************************************/ HI_S32 SAMPLE_AUDIO_AiHdmiAo(AIO_ATTR_S *pstAiAttr, AIO_ATTR_S *pstHdmiAoAttr) { HI_S32 s32Ret, s32AiChnCnt; AUDIO_DEV AiDev = SAMPLE_AUDIO_AI_DEV; AI_CHN AiChn = 0; AUDIO_DEV AoDev = SAMPLE_AUDIO_HDMI_AO_DEV; AO_CHN AoChn = 0; /* config aio dev attr */ if (NULL == pstAiAttr) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "NULL pointer"); return HI_FAILURE; } /* config audio codec */ s32Ret = SAMPLE_COMM_AUDIO_CfgAcodec(pstAiAttr, gs_bMicIn); if (HI_SUCCESS != s32Ret) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } /* enable AI channle */ s32AiChnCnt = pstAiAttr->u32ChnCnt; s32Ret = SAMPLE_COMM_AUDIO_StartAi(AiDev, s32AiChnCnt, pstAiAttr, gs_bAiAnr, gs_pstAiReSmpAttr); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } /* enable AO channle */ s32Ret = SAMPLE_COMM_AUDIO_StartAo(AoDev, AoChn, pstHdmiAoAttr, gs_pstAoReSmpAttr); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } /* AI to AO channel */ s32Ret = SAMPLE_COMM_AUDIO_CreatTrdAiAo(AiDev, AiChn, AoDev, AoChn); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } printf("\nplease press twice ENTER to exit this sample\n"); getchar(); getchar(); SAMPLE_COMM_AUDIO_DestoryTrdAi(AiDev, AiChn); SAMPLE_COMM_AUDIO_StopAi(AiDev, s32AiChnCnt, gs_bAiAnr, gs_bAioReSample); SAMPLE_COMM_AUDIO_StopAo(AoDev, AoChn, gs_bAioReSample); return HI_SUCCESS; }
/****************************************************************************** * function : Disable Tlv320 ******************************************************************************/ HI_S32 SAMPLE_COMM_AUDIO_DisableAcodec() { return SAMPLE_COMM_AUDIO_CfgAcodec(AUDIO_SAMPLE_RATE_48000, HI_FALSE); }
/****************************************************************************** * function : Ai -> Aenc -> file * -> Adec -> Ao ******************************************************************************/ HI_S32 SAMPLE_AUDIO_AiAenc(AIO_ATTR_S *pstAioAttr) { HI_S32 i, s32Ret; AUDIO_DEV AiDev = SAMPLE_AUDIO_AI_DEV; AI_CHN AiChn; AUDIO_DEV AoDev = SAMPLE_AUDIO_AO_DEV; AO_CHN AoChn = 0; ADEC_CHN AdChn = 0; HI_S32 s32AiChnCnt; HI_S32 s32AencChnCnt; AENC_CHN AeChn; HI_BOOL bSendAdec = HI_TRUE; FILE *pfd = NULL; /* config ai aenc dev attr */ if (NULL == pstAioAttr) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "NULL pointer"); return HI_FAILURE; } /******************************************** step 1: config audio codec ********************************************/ s32Ret = SAMPLE_COMM_AUDIO_CfgAcodec(pstAioAttr, gs_bMicIn); if (HI_SUCCESS != s32Ret) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } /******************************************** step 2: start Ai ********************************************/ s32AiChnCnt = pstAioAttr->u32ChnCnt; s32AencChnCnt = 1;//s32AiChnCnt; s32Ret = SAMPLE_COMM_AUDIO_StartAi(AiDev, s32AiChnCnt, pstAioAttr, gs_bAiAnr, gs_pstAiReSmpAttr); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } /******************************************** step 3: start Aenc ********************************************/ s32Ret = SAMPLE_COMM_AUDIO_StartAenc(s32AencChnCnt, gs_enPayloadType); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } /******************************************** step 4: Aenc bind Ai Chn ********************************************/ for (i=0; i<s32AencChnCnt; i++) { AeChn = i; AiChn = i; if (HI_TRUE == gs_bUserGetMode) { s32Ret = SAMPLE_COMM_AUDIO_CreatTrdAiAenc(AiDev, AiChn, AeChn); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } } else { s32Ret = SAMPLE_COMM_AUDIO_AencBindAi(AiDev, AiChn, AeChn); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return s32Ret; } } printf("Ai(%d,%d) bind to AencChn:%d ok!\n",AiDev , AiChn, AeChn); } /******************************************** step 5: start Adec & Ao. ( if you want ) ********************************************/ if (HI_TRUE == bSendAdec) { s32Ret = SAMPLE_COMM_AUDIO_StartAdec(AdChn, gs_enPayloadType); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } s32Ret = SAMPLE_COMM_AUDIO_StartAo(AoDev, AoChn, pstAioAttr, gs_pstAoReSmpAttr); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } pfd = SAMPLE_AUDIO_OpenAencFile(AdChn, gs_enPayloadType); if (!pfd) { SAMPLE_DBG(HI_FAILURE); return HI_FAILURE; } s32Ret = SAMPLE_COMM_AUDIO_CreatTrdAencAdec(AeChn, AdChn, pfd); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } s32Ret = SAMPLE_COMM_AUDIO_AoBindAdec(AoDev, AoChn, AdChn); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } printf("bind adec:%d to ao(%d,%d) ok \n", AdChn, AoDev, AoChn); } printf("\nplease press twice ENTER to exit this sample\n"); getchar(); getchar(); /******************************************** step 6: exit the process ********************************************/ if (HI_TRUE == bSendAdec) { SAMPLE_COMM_AUDIO_DestoryTrdAencAdec(AdChn); SAMPLE_COMM_AUDIO_StopAo(AoDev, AoChn, gs_bAioReSample); SAMPLE_COMM_AUDIO_StopAdec(AdChn); SAMPLE_COMM_AUDIO_AoUnbindAdec(AoDev, AoChn, AdChn); } for (i=0; i<s32AencChnCnt; i++) { AeChn = i; AiChn = i; if (HI_TRUE == gs_bUserGetMode) { SAMPLE_COMM_AUDIO_DestoryTrdAi(AiDev, AiChn); } else { SAMPLE_COMM_AUDIO_AencUnbindAi(AiDev, AiChn, AeChn); } } SAMPLE_COMM_AUDIO_StopAenc(s32AencChnCnt); SAMPLE_COMM_AUDIO_StopAi(AiDev, s32AiChnCnt, gs_bAiAnr, gs_bAioReSample); return HI_SUCCESS; }
/****************************************************************************** * function : file -> ADec -> Ao ******************************************************************************/ HI_S32 SAMPLE_AUDIO_AdecAo(AIO_ATTR_S *pstAioAttr) { HI_S32 s32Ret; AUDIO_DEV AoDev = SAMPLE_AUDIO_AO_DEV; AO_CHN AoChn = 0; ADEC_CHN AdChn = 0; FILE *pfd = NULL; if (NULL == pstAioAttr) { printf("[Func]:%s [Line]:%d [Info]:%s\n", __FUNCTION__, __LINE__, "NULL pointer"); return HI_FAILURE; } s32Ret = SAMPLE_COMM_AUDIO_CfgAcodec(pstAioAttr, gs_bMicIn); if (HI_SUCCESS != s32Ret) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } s32Ret = SAMPLE_COMM_AUDIO_StartAdec(AdChn, gs_enPayloadType); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } s32Ret = SAMPLE_COMM_AUDIO_StartAo(AoDev, AoChn, pstAioAttr, gs_pstAoReSmpAttr); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } s32Ret = SAMPLE_COMM_AUDIO_AoBindAdec(AoDev, AoChn, AdChn); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } pfd = SAMPLE_AUDIO_OpenAdecFile(AdChn, gs_enPayloadType); if (!pfd) { SAMPLE_DBG(HI_FAILURE); return HI_FAILURE; } s32Ret = SAMPLE_COMM_AUDIO_CreatTrdFileAdec(AdChn, pfd); if (s32Ret != HI_SUCCESS) { SAMPLE_DBG(s32Ret); return HI_FAILURE; } printf("bind adec:%d to ao(%d,%d) ok \n", AdChn, AoDev, AoChn); printf("\nplease press twice ENTER to exit this sample\n"); getchar(); getchar(); SAMPLE_COMM_AUDIO_DestoryTrdFileAdec(AdChn); SAMPLE_COMM_AUDIO_StopAo(AoDev, AoChn, gs_bAioReSample); SAMPLE_COMM_AUDIO_StopAdec(AdChn); SAMPLE_COMM_AUDIO_AoUnbindAdec(AoDev, AoChn, AdChn); return HI_SUCCESS; }