HI_S32 SampleDisable1D1Mjpeg1CifH264(HI_VOID) { HI_S32 s32Ret; s32Ret = HI_MPI_VENC_StopRecvPic(1); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_StartRecvPic err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_StopRecvPic(0); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_StartRecvPic err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_UnRegisterChn(1); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_UnRegisterChn err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_UnRegisterChn(0); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_UnRegisterChn err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_DestroyChn(1); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_DestroyChn err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_DestroyChn(0); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_DestroyChn err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_DestroyGroup(0); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_DestroyGroup err 0x%x\n",s32Ret); return HI_FAILURE; } return HI_SUCCESS; }
static HI_S32 SampleDisableEncodeH264(VENC_GRP VeGroup, VENC_CHN VeChn) { HI_S32 s32Ret; s32Ret = HI_MPI_VENC_StopRecvPic(VeChn); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_StartRecvPic err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_UnRegisterChn(VeChn); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_UnRegisterChn err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_DestroyChn(VeChn); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_DestroyChn err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_DestroyGroup(VeGroup); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_DestroyGroup err 0x%x\n",s32Ret); return HI_FAILURE; } return HI_SUCCESS; }
/****************************************************************************** * funciton : Stop venc ( stream mode -- H264, MJPEG ) ******************************************************************************/ HI_S32 SAMPLE_COMM_VENC_Stop(VENC_CHN VencChn) { HI_S32 s32Ret; /****************************************** step 1: Stop Recv Pictures ******************************************/ s32Ret = HI_MPI_VENC_StopRecvPic(VencChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VENC_StopRecvPic vechn[%d] failed with %#x!\n",\ VencChn, s32Ret); return HI_FAILURE; } /****************************************** step 2: Distroy Venc Channel ******************************************/ s32Ret = HI_MPI_VENC_DestroyChn(VencChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VENC_DestroyChn vechn[%d] failed with %#x!\n",\ VencChn, s32Ret); return HI_FAILURE; } return HI_SUCCESS; }
HI_S32 PCIV_Slave_StopVenc(PCIV_MSGHEAD_S *pMsg) { HI_S32 s32Ret; VENC_CHN vencChn; VENC_CHN_ATTR_S *pAttr = NULL; PCIV_VENCCMD_DESTROY_S *pCmd = (PCIV_VENCCMD_DESTROY_S *)pMsg->cMsgBody; PCIV_VENCCMD_ECHO_S *pCmdEcho = (PCIV_VENCCMD_ECHO_S *)pMsg->cMsgBody; vencChn = pCmd->vencChn; s32Ret = HI_MPI_VENC_StopRecvPic(vencChn);/*main chn start rev */ HI_ASSERT(HI_SUCCESS == s32Ret); s32Ret = HI_MPI_VENC_UnRegisterChn(vencChn);/*register to group 0 */ HI_ASSERT(HI_SUCCESS == s32Ret); s32Ret = HI_MPI_VENC_DestroyChn(vencChn); HI_ASSERT(HI_SUCCESS == s32Ret); /* Echo the cmd */ pMsg->enMsgType = PCIV_MSGTYPE_CMDECHO; pMsg->enDevType = PCIV_DEVTYPE_VENCCHN; pMsg->u32Target = 0; pMsg->u32MsgLen = sizeof(PCIV_VENCCMD_ECHO_S); pCmdEcho->vencChn = vencChn; pCmdEcho->s32Echo = HI_SUCCESS; s32Ret = PCIV_SendMsg(0, PCIV_MSGPORT_USERCMD, pMsg); HI_ASSERT((HI_FAILURE != s32Ret)); return HI_SUCCESS; }
static int enc_release_h264_stream(int vin, int stream) { SDK_ENC_H264_STREAM_ATTR_t* stream_attr = &_sdk_enc.attr.video_stream_attr[vin][stream]; if(vin < HI_VENC_CH_BACKLOG_REF && stream < HI_VENC_STREAM_BACKLOG_REF){ if(ENC_H264_STREAM_ATTR_MAGIC == stream_attr->magic){ int const venc_group = vin; int const venc_ch = vin * HI_VENC_STREAM_BACKLOG_REF + stream; SOC_TRACE("Release video encode (%d,%d)", vin, stream); SOC_CHECK(HI_MPI_VENC_StopRecvPic(venc_ch)); SOC_CHECK(HI_MPI_VENC_UnRegisterChn(venc_ch)); SOC_CHECK(HI_MPI_VENC_DestroyChn(venc_ch)); if(0 == stream){ SOC_CHECK(HI_MPI_VENC_UnbindInput(venc_group)); SOC_CHECK(HI_MPI_VENC_DestroyGroup(venc_group)); } // clear the magic stream_attr->magic = 0; return SDK_SUCCESS; } } return SDK_FAILURE; }
/****************************************************************************** * funciton : Create venc and Start recv pic . ******************************************************************************/ HI_S32 venc_snap_stop(VENC_CHN VencChn) { HI_S32 s32Ret; // VPSS_GRP VpssGrp = VencChn; // MPP_CHN_S stSrcChn; // MPP_CHN_S stDestChn; SIZE_S picSize; VIDEO_NORM_E enNorm = VIDEO_ENCODING_MODE_PAL; PIC_SIZE_E enPicSize = PIC_CIF; s32Ret = get_snap_pic_size(enNorm, enPicSize, &picSize); if(s32Ret != HI_SUCCESS) { Printf("get_snap_pic_size err \n"); return HI_FAILURE; } /****************************************** step : stop recv pic ******************************************/ s32Ret = HI_MPI_VENC_StopRecvPic(VencChn); if (HI_SUCCESS != s32Ret) { Printf("HI_MPI_VENC_StopRecvPic [%d] faild with %#x!\n",VencChn, s32Ret); return HI_FAILURE; } /****************************************** step : venc unbind vpss ******************************************/ s32Ret = venc_bind_vpss(VencChn, &picSize, HI_FALSE); if (HI_SUCCESS != s32Ret) { Printf("venc_bind_vpss failed!\n"); return HI_FAILURE; } s32Ret = HI_MPI_VENC_DestroyChn(VencChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VENC_DestroyChn vechn[%d] failed with %#x!\n", VencChn, s32Ret); return HI_FAILURE; } return HI_SUCCESS; }
HI_S32 SampleDestroySnapChn(VENC_GRP VeGroup,VENC_CHN SnapChn) { HI_S32 s32Ret; s32Ret = HI_MPI_VENC_DestroyChn(SnapChn); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_DestroyChn err 0x%x\n",s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_DestroyGroup(VeGroup); if (s32Ret != HI_SUCCESS) { printf("HI_MPI_VENC_DestroyGroup err 0x%x\n",s32Ret); return HI_FAILURE; } return HI_SUCCESS; }
bool HimppVencChan::disableObject() { HI_S32 s32Ret; GROUP_CROP_CFG_S dis_crop = { .bEnable = HI_FALSE }; MPP_CHN_S dst_chn = { .enModId = HI_ID_GROUP, .s32DevId = _grpid, .s32ChnId = 0 }; if ((s32Ret = HI_MPI_SYS_UnBind(*source(), &dst_chn)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_SYS_UnBind %d failed [%#x]\n", _chnid, s32Ret); } if ((s32Ret = HI_MPI_VENC_StopRecvPic(_chnid)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_StopRecvPic %d failed [%#x]\n", _chnid, s32Ret); } if ((s32Ret = HI_MPI_VENC_SetGrpCrop(_grpid, &dis_crop)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_SetGrpCrop [%d] failed [%#x]!\n", _grpid, s32Ret); } if ((s32Ret = HI_MPI_VENC_UnRegisterChn(_chnid)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_UnRegisterChn %d failed [%#x]\n", _chnid, s32Ret); } if ((s32Ret = HI_MPI_VENC_DestroyChn(_chnid)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_DestroyChn %d failed [%#x]\n", _chnid, s32Ret); } if ((s32Ret = HI_MPI_VENC_DestroyGroup(_grpid)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_DestroyGroup %d failed [%#x]\n", _grpid, s32Ret); } return true; }
/****************************************************************************** * funciton : Stop snap ******************************************************************************/ HI_S32 SAMPLE_COMM_VENC_SnapStop(VENC_CHN VencChn) { HI_S32 s32Ret; s32Ret = HI_MPI_VENC_StopRecvPic(VencChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VENC_StopRecvPic vechn[%d] failed with %#x!\n", VencChn, s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VENC_DestroyChn(VencChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VENC_DestroyChn vechn[%d] failed with %#x!\n", VencChn, s32Ret); return HI_FAILURE; } return HI_SUCCESS; }
static int enc_release_h264_stream(int vin, int stream) { SDK_ENC_H264_STREAM_ATTR_t* stream_attr = &_sdk_enc.attr.video_stream_attr[vin][stream]; if(stream_attr && vin < HI_VENC_CH_BACKLOG_REF && stream < HI_VENC_STREAM_BACKLOG_REF){ if(ENC_H264_STREAM_ATTR_MAGIC == stream_attr->magic){ int const venc_ch = __HI_VENC_CH(vin, stream); int const venc_group = venc_ch; int const vpss_group = vin; int const vpss_ch = (venc_ch % HI_VENC_STREAM_BACKLOG_REF); MPP_CHN_S mpp_chn_vpss; MPP_CHN_S mpp_chn_venc; memset(&mpp_chn_vpss, 0, sizeof(mpp_chn_vpss)); memset(&mpp_chn_venc, 0, sizeof(mpp_chn_venc)); // unbind venc to vpss mpp_chn_vpss.enModId = HI_ID_VPSS; mpp_chn_vpss.s32DevId = vpss_group; mpp_chn_vpss.s32ChnId = vpss_ch; mpp_chn_venc.enModId = HI_ID_GROUP; mpp_chn_venc.s32DevId = venc_group; mpp_chn_venc.s32ChnId = venc_ch; SOC_TRACE("Stoping recv venc %d", venc_ch); SOC_CHECK(HI_MPI_VENC_StopRecvPic(venc_ch)); SOC_CHECK(HI_MPI_SYS_UnBind(&mpp_chn_vpss, &mpp_chn_venc)); SOC_CHECK(HI_MPI_VENC_UnRegisterChn(venc_ch)); SOC_CHECK(HI_MPI_VENC_DestroyChn(venc_ch)); SOC_CHECK(HI_MPI_VENC_DestroyGroup(venc_group)); // clear the magic stream_attr->magic = 0; return SDK_SUCCESS; } } return SDK_FAILURE; }
bool HimppVencChan::enableObject() { HI_S32 s32Ret; GROUP_CROP_CFG_S dis_crop = { .bEnable = HI_FALSE }; if ((s32Ret = HI_MPI_VENC_CreateGroup(_grpid)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_CreateGroup %d failed [%#x]\n", _grpid, s32Ret); return false; } VENC_CHN_ATTR_S attr; prepareVencChnAttr(attr); if ((s32Ret = HI_MPI_VENC_CreateChn(_chnid, &attr)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_CreateChn %d faild [%#x]\n", _chnid, s32Ret); goto err_destroy_grp; } if ((s32Ret = HI_MPI_VENC_SetMaxStreamCnt(_chnid, 4)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_SetMaxStreamCnt %d failed [%#x]\n", _chnid, s32Ret); } if ((s32Ret = HI_MPI_VENC_RegisterChn(_grpid, _chnid)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_RegisterChn %d-%d failed [%#x]\n", _grpid, _chnid, s32Ret); goto err_destroy_chn; } if ((s32Ret = HI_MPI_VENC_SetGrpCrop(_grpid, &_crop_cfg)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_SetGrpCrop [%d] faild [%#x]!\n", _grpid, s32Ret); goto err_unregister_chn; } if ((s32Ret = HI_MPI_VENC_StartRecvPic(_chnid)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VENC_StartRecvPic %d failed [%#x]\n", _chnid, s32Ret); goto err_disable_crop; } MPP_CHN_S dst_chn; dst_chn.enModId = HI_ID_GROUP; dst_chn.s32DevId = _grpid; dst_chn.s32ChnId = 0; if ((s32Ret = HI_MPI_SYS_Bind(*source(), &dst_chn)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_SYS_Bind %d failed [%#x]\n", _chnid, s32Ret); goto err_stop_recv_pic; } return true; err_stop_recv_pic: HI_MPI_VENC_StopRecvPic(_chnid); err_disable_crop: HI_MPI_VENC_SetGrpCrop(_grpid, &dis_crop); err_unregister_chn: HI_MPI_VENC_UnRegisterChn(_chnid); err_destroy_chn: HI_MPI_VENC_DestroyChn(_chnid); err_destroy_grp: HI_MPI_VENC_DestroyGroup(_grpid); return false; }