/****************************************************************************** * function : Start Ao ******************************************************************************/ HI_S32 SAMPLE_COMM_AUDIO_StartAo(AUDIO_DEV AoDevId, AO_CHN AoChn, AIO_ATTR_S *pstAioAttr, AUDIO_RESAMPLE_ATTR_S *pstAoReSmpAttr) { HI_S32 s32Ret; s32Ret = HI_MPI_AO_SetPubAttr(AoDevId, pstAioAttr); if (HI_SUCCESS != s32Ret) { printf("%s: HI_MPI_AO_SetPubAttr(%d) failed with %#x!\n", __FUNCTION__, AoDevId, s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_AO_Enable(AoDevId); if (HI_SUCCESS != s32Ret) { printf("%s: HI_MPI_AO_Enable(%d) failed with %#x!\n", __FUNCTION__, AoDevId, s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_AO_EnableChn(AoDevId, AoChn); if (HI_SUCCESS != s32Ret) { printf("%s: HI_MPI_AO_EnableChn(%d) failed with %#x!\n", __FUNCTION__, AoChn, s32Ret); return HI_FAILURE; } if (NULL != pstAoReSmpAttr) { s32Ret = HI_MPI_AO_DisableReSmp(AoDevId, AoChn); s32Ret |= HI_MPI_AO_EnableReSmp(AoDevId, AoChn, pstAoReSmpAttr); if (HI_SUCCESS != s32Ret) { printf("%s: HI_MPI_AO_EnableReSmp(%d,%d) failed with %#x!\n", __FUNCTION__, AoDevId, AoChn, s32Ret); return HI_FAILURE; } } return HI_SUCCESS; }
static int ao_start(AUDIO_DEV AoDevId, AO_CHN AoChn, AIO_ATTR_S *pstAioAttr) { HI_S32 s32Ret = HI_FAILURE; s32Ret = HI_MPI_AO_SetPubAttr(AoDevId, pstAioAttr); CHECK(s32Ret == HI_SUCCESS, HI_FAILURE, "Error with %#x.\n", s32Ret); s32Ret = HI_MPI_AO_Enable(AoDevId); CHECK(s32Ret == HI_SUCCESS, HI_FAILURE, "Error with %#x.\n", s32Ret); s32Ret = HI_MPI_AO_EnableChn(AoDevId, AoChn); CHECK(s32Ret == HI_SUCCESS, HI_FAILURE, "Error with %#x.\n", s32Ret); return HI_SUCCESS; }
int Hi3511AoutSetup(int nChannel, void *param) { HI_S32 s32ret; AIO_ATTR_S stAttr; stAttr.enBitwidth = AUDIO_BIT_WIDTH_16; stAttr.enSamplerate = AUDIO_SAMPLE_RATE_8000; stAttr.enSoundmode = AUDIO_SOUND_MODE_MOMO; stAttr.enWorkmode =AIO_MODE_I2S_MASTER ;//AIO_MODE_I2S_SLAVE stAttr.u32EXFlag = 0; //stAttr.u32FrmNum = 5; stAttr.u32FrmNum = 10;//add by liujw stAttr.u32PtNumPerFrm = 160; s32ret = HI_MPI_AO_SetPubAttr(0, &stAttr); if(HI_SUCCESS != s32ret) { printf("set ao %d attr err:0x%x::%s %d\n", 0, s32ret, __FILE__, __LINE__); return -1; } #if 1 //add code by liujw 12-3-2 s32ret = HI_MPI_AO_Enable(0); if(HI_SUCCESS != s32ret) { printf("enable ao dev %d err:0x%x\n", 0, s32ret); return -1; } #endif s32ret = HI_MPI_AO_EnableChn(0, 0); if(HI_SUCCESS != s32ret) { printf("enable ai chn %d err:0x%x\n", nChannel, s32ret); return -1; } g_Hi3511_aout_open_flag = 1; //add by liujw return 0; }
int adec_ao (AIO_ATTR_S *pstAioAttr) { HI_S32 sret; int ret = FAILURE; AUDIO_DEV aoDev = 0; AO_CHN aoChn = 0; ADEC_CHN adChn = 0; int acodec_fd = 0; unsigned int i2s_fs_sel = 0; //-----------Set CFG------------- acodec_fd = open (ACODEC_FILE,O_RDWR); if (acodec_fd < 0) { printf ("open[%s] error[%s]\n", ACODEC_FILE, strerror (errno)); return ret; } if (ioctl (acodec_fd, ACODEC_SOFT_RESET_CTRL)) { printf ("reset codec error\n"); return ret; } i2s_fs_sel = 0x18;//AUDIO_SAMPLE_RATE_8000 if (ioctl (acodec_fd, ACODEC_SET_I2S1_FS,&i2s_fs_sel)) { printf ("set acodec sample rate failure\n"); return ret; } close (acodec_fd); //-------------Start Adec------------- ADEC_CHN_ATTR_S stAdecAttr; stAdecAttr.enType = PT_G711A; stAdecAttr.u32BufSize = 20; stAdecAttr.enMode = ADEC_MODE_STREAM; if (PT_ADPCMA == stAdecAttr.enType) { ADEC_ATTR_ADPCM_S stAdpcm; stAdecAttr.pValue = &stAdpcm; stAdpcm.enADPCMType = 0; printf ("-----------I do not Play Pcm\n"); } else if (PT_G711A == stAdecAttr.enType || PT_G711U == stAdecAttr.enType) { ADEC_ATTR_G711_S stAdecG711; stAdecAttr.pValue = &stAdecG711; } else { printf ("Undefine Type\n"); return ret; } sret = HI_MPI_ADEC_CreateChn(adChn, &stAdecAttr); if (sret != HI_SUCCESS) { printf ("HI_MPI_ADEC_CreateChn error[%x]\n", sret); return ret; } //----------------------Start Ao----------- sret = HI_MPI_AO_SetPubAttr (aoDev, pstAioAttr); if (sret != SUCCESS) { printf ("HI_MPI_AO_SetPubAttr error[%x]\n", sret); return ret; } sret = HI_MPI_AO_Enable (aoDev); if (sret != SUCCESS) { printf ("HI_MPI_AO_Enable error[%x]\n", sret); return ret; } sret = HI_MPI_AO_EnableChn (aoDev, aoChn); if (sret != SUCCESS) { printf ("HI_MPI_AO_EnableChn error[%x]\n", sret); return ret; } //-------- SAMPLE_COMM_AUDIO_AoBindAdec MPP_CHN_S stSrcChn,stDestChn; stSrcChn.enModId = HI_ID_ADEC; stSrcChn.s32DevId = 0; stSrcChn.s32ChnId = adChn; stDestChn.enModId = HI_ID_AO; stDestChn.s32DevId = aoDev; stDestChn.s32ChnId = aoChn; sret = HI_MPI_SYS_Bind (&stSrcChn, &stDestChn); if (sret != HI_SUCCESS) { printf ("HI_MPI_SYS_Bind error [%x]\n", sret); return ret; } printf ("HI_MPI_SYS_Bind success\n"); //--------------SAMPLE_COMM_AUDIO_AdecProc int AdChn = adChn; FILE *pfd = NULL; AUDIO_STREAM_S stAudioStream; HI_U32 u32Len = 324; HI_U32 u32ReadLen; HI_S32 s32AdecChn = AdChn; HI_U8 *pu8AudioStream = NULL; pfd = fopen ("/root/ap_down.voice", "r"); if (pfd == NULL) { printf ("open file error[%s]\n", strerror (errno)); return -1; } printf ("open file success\n"); pu8AudioStream = (HI_U8*)malloc(sizeof(HI_U8)*MAX_AUDIO_STREAM_LEN); while (1) { stAudioStream.pStream = pu8AudioStream; u32ReadLen = fread(stAudioStream.pStream, 1, u32Len, pfd/*文件FD*/); if (u32ReadLen <= 0) { printf ("read complete\n"); break; } stAudioStream.u32Len = u32ReadLen; sret = HI_MPI_ADEC_SendStream(s32AdecChn, &stAudioStream, HI_TRUE); if (sret != HI_SUCCESS) { printf ("HI_MPI_ADEC_SendStream error [%x]\n", sret); break; } } free(pu8AudioStream); fclose(pfd); printf ("Wow, it ok\n"); return 0; }
HI_S32 unidoli_start_ao(AUDIO_DEV AoDevId, HI_S32 s32AoChnCnt, AIO_ATTR_S* pstAioAttr, HI_VOID* pstAoVqeAttr, HI_U32 u32AoVqeType) { HI_S32 i; HI_S32 s32Ret; s32Ret = HI_MPI_AO_SetPubAttr(AoDevId, pstAioAttr); if (HI_SUCCESS != s32Ret) { printf("%s: HI_MPI_AO_SetPubAttr(%d) failed with %#x!\n", __FUNCTION__, \ AoDevId, s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_AO_Enable(AoDevId); if (HI_SUCCESS != s32Ret) { printf("%s: HI_MPI_AO_Enable(%d) failed with %#x!\n", __FUNCTION__, AoDevId, s32Ret); return HI_FAILURE; } for (i = 0; i < s32AoChnCnt; i++) { s32Ret = HI_MPI_AO_EnableChn(AoDevId, i/(pstAioAttr->enSoundmode + 1)); if (HI_SUCCESS != s32Ret) { printf("%s: HI_MPI_AO_EnableChn(%d) failed with %#x!\n", __FUNCTION__, i, s32Ret); return HI_FAILURE; } if (NULL != pstAoVqeAttr) { HI_BOOL bAoVqe = HI_TRUE; switch (u32AoVqeType) { case 0: s32Ret = HI_SUCCESS; bAoVqe = HI_FALSE; break; case 1: s32Ret = HI_MPI_AO_SetVqeAttr(AoDevId, i, (AO_VQE_CONFIG_S *)pstAoVqeAttr); break; default: s32Ret = HI_FAILURE; break; } if (s32Ret) { printf("%s: SetAoVqe%d(%d,%d) failed with %#x\n", __FUNCTION__, u32AoVqeType, AoDevId, i, s32Ret); return s32Ret; } if (bAoVqe) { s32Ret = HI_MPI_AO_EnableVqe(AoDevId, i); if (s32Ret) { printf("%s: HI_MPI_AI_EnableVqe(%d,%d) failed with %#x\n", __FUNCTION__, AoDevId, i, s32Ret); return s32Ret; } } } } return HI_SUCCESS; }