bool HimppAiChan::enableObject() { HI_S32 s32Ret; s32Ret = HI_MPI_AI_EnableChn(_mpp_chn.s32DevId, _chnid); if (s32Ret != HI_SUCCESS) { fprintf(stderr, "failed to enable AI chn%d-%d\n", _mpp_chn.s32DevId, _chnid); return false; } return true; }
static int enc_create_g711a_stream(int ain, int vin_ref, SDK_ENC_G711A_STREAM_ATTR_t* stream_attr) { if(ain < HI_AENC_CH_BACKLOG_REF){ if(vin_ref < HI_VENC_CH_BACKLOG_REF){ int const aenc_ch = ain; SDK_ENC_G711A_STREAM_ATTR_t* const this_stream_attr = &_sdk_enc.attr.audio_stream_attr[ain]; if(0 == this_stream_attr->magic){ AENC_ATTR_G711_S aenc_attr_g711 = {0}; AENC_CHN_ATTR_S aenc_ch_attr = {.enType = PT_G711A, .pValue = &aenc_attr_g711,}; MPP_CHN_S mpp_ch_ai, mpp_ch_aenc; aenc_ch_attr.enType = PT_G711A; aenc_ch_attr.pValue = &aenc_attr_g711; //aenc_ch_attr.u32BufSize = 8; //aenc_ch_attr.u32BufSize = MAX_AUDIO_FRAME_NUM; // ver 050 faq 1.6.3 aenc_ch_attr.u32BufSize = MAX_AUDIO_FRAME_NUM; memcpy(this_stream_attr, stream_attr, sizeof(SDK_ENC_G711A_STREAM_ATTR_t)); this_stream_attr->magic = ENC_H264_STREAM_ATTR_MAGIC; // mark the magic this_stream_attr->ain = ain; this_stream_attr->vin_ref = vin_ref; // FIXME: remember to check the sample rate and bitwidth this_stream_attr->sample_rate = SDK_ENC_AUDIO_SAMPLE_RATE_8KBPS; this_stream_attr->bit_width = SDK_ENC_AUDIO_BITWIDTH_8BITS; this_stream_attr->packet_size = 320; // sdk operate // enable vin SOC_CHECK(HI_MPI_AI_EnableChn(__HI_AIN_CH, ain)); // create aenc chn SOC_CHECK(HI_MPI_AENC_CreateChn(aenc_ch, &aenc_ch_attr)); #if 0 //enable resample // bind AENC to AI channel mpp_ch_ai.enModId = HI_ID_AI; mpp_ch_ai.s32DevId = __HI_AIN_CH; mpp_ch_ai.s32ChnId = ain; mpp_ch_aenc.enModId = HI_ID_AENC; mpp_ch_aenc.s32DevId = 0; mpp_ch_aenc.s32ChnId = aenc_ch; SOC_CHECK(HI_MPI_SYS_Bind(&mpp_ch_ai, &mpp_ch_aenc)); #endif _sdk_enc.attr.audio_msk |= 1<<ain; return SDK_SUCCESS; } }
/****************************************************************************** * function : Start Ai ******************************************************************************/ HI_S32 SAMPLE_COMM_AUDIO_StartAi(AUDIO_DEV AiDevId, HI_S32 s32AiChnCnt, AIO_ATTR_S *pstAioAttr, HI_BOOL bAnrEn, AUDIO_RESAMPLE_ATTR_S *pstAiReSmpAttr) { HI_S32 i, s32Ret; s32Ret = HI_MPI_AI_SetPubAttr(AiDevId, pstAioAttr); if (s32Ret) { printf("%s: HI_MPI_AI_SetPubAttr(%d) failed with %#x\n", __FUNCTION__, AiDevId, s32Ret); return HI_FAILURE; } if (HI_MPI_AI_Enable(AiDevId)) { printf("%s: HI_MPI_AI_Enable(%d) failed with %#x\n", __FUNCTION__, AiDevId, s32Ret); return HI_FAILURE; } for (i=0; i<s32AiChnCnt; i++) { if (HI_MPI_AI_EnableChn(AiDevId, i)) { printf("%s: HI_MPI_AI_EnableChn(%d,%d) failed with %#x\n", __FUNCTION__,\ AiDevId, i, s32Ret); return HI_FAILURE; } if (HI_TRUE == bAnrEn) { if (HI_MPI_AI_EnableAnr(AiDevId, i)) { printf("%s: HI_MPI_AI_EnableAnr(%d,%d) failed with %#x\n", __FUNCTION__,\ AiDevId, i, s32Ret); return HI_FAILURE; } } if (NULL != pstAiReSmpAttr) { if (HI_MPI_AI_EnableReSmp(AiDevId, i, pstAiReSmpAttr)) { printf("%s: HI_MPI_AI_EnableReSmp(%d,%d) failed with %#x\n",\ __FUNCTION__, AiDevId, i, s32Ret); return HI_FAILURE; } } } return HI_SUCCESS; }
static int ai_start(AUDIO_DEV AiDevId, HI_S32 s32AiChnCnt, AIO_ATTR_S *pstAioAttr) { HI_S32 i = 0; HI_S32 s32Ret = HI_FAILURE; s32Ret = HI_MPI_AI_SetPubAttr(AiDevId, pstAioAttr); CHECK(s32Ret == HI_SUCCESS, HI_FAILURE, "Error with %#x.\n", s32Ret); s32Ret = HI_MPI_AI_Enable(AiDevId); CHECK(s32Ret == HI_SUCCESS, HI_FAILURE, "Error with %#x.\n", s32Ret); for (i = 0; i < s32AiChnCnt; i++) { s32Ret = HI_MPI_AI_EnableChn(AiDevId, i); CHECK(s32Ret == HI_SUCCESS, HI_FAILURE, "Error with %#x.\n", s32Ret); } return HI_SUCCESS; }
static void avenc_AEncInit() { #define AENC_G711A_USE //#define AENC_ADPCM_USE //#define AENC_LPCM_USE int i = 0; #if defined(AENC_G711A_USE) AENC_ATTR_G711_S stAencG711A = {0}; AENC_CHN_ATTR_S stAencAttr = {.enType = PT_G711A, .pValue = &stAencG711A,}; #elif defined(AENC_ADPCM_USE) AENC_ATTR_ADPCM_S stAencADPCM = {.enADPCMType = ADPCM_TYPE_DVI4, }; AENC_CHN_ATTR_S stAencAttr = {.enType = PT_ADPCMA, .pValue = &stAencADPCM,}; #elif defined(AENC_LPCM_USE) AENC_ATTR_LPCM_S stAencLPCM = {0}; AENC_CHN_ATTR_S stAencAttr = {.enType = PT_LPCM, .pValue = &stAencLPCM,}; #else #error "Audio Encode Format Not Supported" #endif // stAencAttr.u32BufSize = 8; // stAencAttr.u32BufSize = MAX_AUDIO_FRAME_NUM; // ver 050 faq 1.6.3 stAencAttr.u32BufSize = 5; // hisilicon SDK for(i = 0; i < AVENC_AUDIO_MAX_CH; ++i){ if(g_pstSysEnv->GetEncMode(g_pstSysEnv, i) == MODE_AUDIO_VIDEO){ if(AUDIO_IsCapLiveLoop()){ // if with audio live loop // audio live init here DVR_ASSERT(HI_MPI_AI_EnableChn(AIN_DEV, i)); } // create aenc chn DVR_ASSERT(HI_MPI_AENC_CreateChn(i, &stAencAttr)); // bind AENC to AI channel DVR_ASSERT(HI_MPI_AENC_BindAi(i, AIN_DEV, i)); } } }
/****************************************************************************** * function : Start Ai ******************************************************************************/ HI_S32 unidoli_start_ai(AUDIO_DEV AiDevId, HI_S32 s32AiChnCnt, AIO_ATTR_S* pstAioAttr, HI_VOID* pstAiVqeAttr, HI_U32 u32AiVqeType) { HI_S32 i; HI_S32 s32Ret; s32Ret = HI_MPI_AI_SetPubAttr(AiDevId, pstAioAttr); if (s32Ret) { printf("%s: HI_MPI_AI_SetPubAttr(%d) failed with %#x\n", __FUNCTION__, AiDevId, s32Ret); return s32Ret; } s32Ret = HI_MPI_AI_Enable(AiDevId); if (s32Ret) { printf("%s: HI_MPI_AI_Enable(%d) failed with %#x\n", __FUNCTION__, AiDevId, s32Ret); return s32Ret; } for (i = 0; i < s32AiChnCnt; i++) { s32Ret = HI_MPI_AI_EnableChn(AiDevId, i/(pstAioAttr->enSoundmode + 1)); if (s32Ret) { printf("%s: HI_MPI_AI_EnableChn(%d,%d) failed with %#x\n", __FUNCTION__, AiDevId, i, s32Ret); return s32Ret; } if (NULL != pstAiVqeAttr) { HI_BOOL bAiVqe = HI_TRUE; switch (u32AiVqeType) { case 0: s32Ret = HI_SUCCESS; bAiVqe = HI_FALSE; break; case 1: s32Ret = HI_MPI_AI_SetTalkVqeAttr(AiDevId, i, SAMPLE_AUDIO_AO_DEV, i, (AI_TALKVQE_CONFIG_S *)pstAiVqeAttr); break; default: s32Ret = HI_FAILURE; break; } if (s32Ret) { printf("%s: SetAiVqe%d(%d,%d) failed with %#x\n", __FUNCTION__, u32AiVqeType, AiDevId, i, s32Ret); return s32Ret; } if (bAiVqe) { s32Ret = HI_MPI_AI_EnableVqe(AiDevId, i); if (s32Ret) { printf("%s: HI_MPI_AI_EnableVqe(%d,%d) failed with %#x\n", __FUNCTION__, AiDevId, i, s32Ret); return s32Ret; } } } } return HI_SUCCESS; }