bool HimppVpssGroup::disableObject() { HI_S32 s32Ret; MPP_CHN_S dst_chn; dst_chn.enModId = HI_ID_VPSS; dst_chn.s32DevId = _grpid; dst_chn.s32ChnId = 0; if ((s32Ret = HI_MPI_SYS_UnBind(*source(), &dst_chn)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_SYS_UnBind %d failed [%#x]\n", _grpid, s32Ret); } s32Ret = HI_MPI_VPSS_StopGrp(_grpid); if (s32Ret != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VPSS_StopGrp %d failed [%#x]\n", _grpid, s32Ret); } s32Ret = HI_MPI_VPSS_DestroyGrp(_grpid); if (s32Ret != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VPSS_DestroyGrp %d failed [%#x]\n", _grpid, s32Ret); } return true; }
HI_S32 SAMPLE_COMM_VPSS_StopGroup(VPSS_GRP VpssGrp) { HI_S32 s32Ret; if (VpssGrp < 0 || VpssGrp > VPSS_MAX_GRP_NUM) { printf("VpssGrp%d is out of rang[0,%d]. \n", VpssGrp, VPSS_MAX_GRP_NUM); return HI_FAILURE; } s32Ret = HI_MPI_VPSS_StopGrp(VpssGrp); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("%s failed with %#x\n", __FUNCTION__, s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VPSS_DestroyGrp(VpssGrp); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("%s failed with %#x\n", __FUNCTION__, s32Ret); return HI_FAILURE; } return HI_SUCCESS; }
bool HimppVpssGroup::enableObject() { HI_S32 s32Ret = HI_FAILURE; ImageResolution res = videoSource()->getResolution(); VPSS_GRP_ATTR_S attr; attr.u32MaxW = res.Width; attr.u32MaxH = res.Height; attr.bDciEn = HI_FALSE; attr.bIeEn = HI_FALSE; attr.bNrEn = HI_TRUE; attr.bHistEn = HI_FALSE; attr.enDieMode = VPSS_DIE_MODE_NODIE; attr.enPixFmt = HIMPP_PIXEL_FORMAT; if ((s32Ret = HI_MPI_VPSS_CreateGrp(_grpid, &attr)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VPSS_CreateGrp %d failed [%#x]\n", _grpid, s32Ret); return false; } if ((s32Ret = HI_MPI_VPSS_StartGrp(_grpid)) != HI_SUCCESS) { HIMPP_PRINT("HI_MPI_VPSS_CreateGrp %d failed [%#x]\n", _grpid, s32Ret); goto err_destroy_grp; } MPP_CHN_S dst_chn; dst_chn.enModId = HI_ID_VPSS; 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", _grpid, s32Ret); goto err_stop_grp; } return true; err_stop_grp: HI_MPI_VPSS_StopGrp(_grpid); err_destroy_grp: HI_MPI_VPSS_DestroyGrp(_grpid); return false; }
/***************************************************************************** * function : disable vi dev *****************************************************************************/ HI_S32 SAMPLE_COMM_VPSS_Stop(HI_S32 s32GrpCnt, HI_S32 s32ChnCnt) { HI_S32 i, j; HI_S32 s32Ret = HI_SUCCESS; VPSS_GRP VpssGrp; VPSS_CHN VpssChn; for(i=0; i<s32GrpCnt; i++) { VpssGrp = i; s32Ret = HI_MPI_VPSS_StopGrp(VpssGrp); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("failed with %#x!\n", s32Ret); return HI_FAILURE; } for(j=0; j<s32ChnCnt; j++) { VpssChn = j; s32Ret = HI_MPI_VPSS_DisableChn(VpssGrp, VpssChn); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("failed with %#x!\n", s32Ret); return HI_FAILURE; } } s32Ret = HI_MPI_VPSS_DestroyGrp(VpssGrp); if (s32Ret != HI_SUCCESS) { SAMPLE_PRT("failed with %#x!\n", s32Ret); return HI_FAILURE; } } return HI_SUCCESS; }
static HI_S32 s32StartVPSS(const IPC_VEDIO_S* pstIpcVedio) { HI_S32 s32Ret,i; static VPSS_GRP_ATTR_S stVpssGrpAttr = { .u32MaxW = 1920, /*MAX width of the group*/ .u32MaxH = 1080, /*MAX height of the group*/ .enPixFmt = PIXEL_FORMAT_YUV_SEMIPLANAR_420, /*Pixel format*/ .bIeEn = HI_FALSE, /*Image enhance enable*/ .bDciEn = HI_FALSE, /*Dynamic contrast Improve enable*/ .bNrEn = HI_TRUE, /*Noise reduce enable*/ .bHistEn = HI_FALSE, /*Hist enable*/ .enDieMode = VPSS_DIE_MODE_NODIE /*De-interlace enable*/ }; static VPSS_CHN_ATTR_S stVpssChnAttr = { .bSpEn = HI_FALSE, /*Sharpen enable*/ .bBorderEn = HI_FALSE, /*Frame enable*/ .bMirror = HI_FALSE, /*mirror enable*/ .bFlip = HI_FALSE, /*flip enable*/ .s32SrcFrameRate = 25, /* source frame rate */ .s32DstFrameRate = -1, /* dest frame rate */ .stBorder = { 0,0,0,0,0 } }; static VPSS_CHN_MODE_S stVpssChnMode = { .enChnMode = VPSS_CHN_MODE_USER, /*Vpss channel's work mode*/ .u32Width = 1920, /*Width of target image*/ .u32Height = 1080, /*Height of target image*/ .bDouble = HI_FALSE, /*Field-frame transfer£¬only valid for VPSS_PRE0_CHN*/ .enPixelFormat =PIXEL_FORMAT_YUV_SEMIPLANAR_420,/*Pixel format of target image*/ .enCompressMode = COMPRESS_MODE_SEG /*Compression mode of the output*/ }; static VPSS_ATTR_S stVpssAttr = { .VpssGrp = 0, .VpssChnNum = 1, .pstVpssGrpAttr = &stVpssGrpAttr, .pstVpssChnAttr = &stVpssChnAttr, .pstVpssChnMode = &stVpssChnMode }; g_pstVpssAttr = &stVpssAttr; g_pstVpssAttr->VpssChnNum = pstIpcVedio->u32StreamNum; /*sync grp attr*/ g_pstVpssAttr->pstVpssGrpAttr->u32MaxW = pstIpcVedio->astStreamFmt[0].stSize.u32Width; g_pstVpssAttr->pstVpssGrpAttr->u32MaxH = pstIpcVedio->astStreamFmt[0].stSize.u32Height; g_pstVpssAttr->pstVpssGrpAttr->enPixFmt = pstIpcVedio->e_pixFmt; s32Ret = s32VpssStartGrp(g_pstVpssAttr->VpssGrp, g_pstVpssAttr->pstVpssGrpAttr); if (HI_SUCCESS != s32Ret) { printf("Start Vpss Grp failed!\n"); return s32Ret; } for(i = 0; i < g_pstVpssAttr->VpssChnNum; i++) { /*sync chn attr*/ g_pstVpssAttr->pstVpssChnMode->u32Width = pstIpcVedio->astStreamFmt[i].stSize.u32Width; g_pstVpssAttr->pstVpssChnMode->u32Height = pstIpcVedio->astStreamFmt[i].stSize.u32Height; g_pstVpssAttr->pstVpssChnMode->enPixelFormat = pstIpcVedio->e_pixFmt; g_pstVpssAttr->pstVpssChnAttr->s32DstFrameRate = pstIpcVedio->astStreamFmt[i].f32FrameRate; s32Ret = s32VpssStartChn(g_pstVpssAttr->VpssGrp,i,g_pstVpssAttr->pstVpssChnAttr,g_pstVpssAttr->pstVpssChnMode,HI_NULL); if (HI_SUCCESS != s32Ret) { printf("Start Vpss Chn failed!\n"); return s32Ret; } } return HI_SUCCESS; } static HI_S32 s32VpssStopGrp(VPSS_GRP VpssGrp) { HI_S32 s32Ret; if (VpssGrp < 0 || VpssGrp > VPSS_MAX_GRP_NUM) { printf("VpssGrp%d is out of rang[0,%d]. \n", VpssGrp, VPSS_MAX_GRP_NUM); return HI_FAILURE; } s32Ret = HI_MPI_VPSS_StopGrp(VpssGrp); if (s32Ret != HI_SUCCESS) { printf("%s failed with %#x\n", __FUNCTION__, s32Ret); return HI_FAILURE; } s32Ret = HI_MPI_VPSS_DestroyGrp(VpssGrp); if (s32Ret != HI_SUCCESS) { printf("%s failed with %#x\n", __FUNCTION__, s32Ret); return HI_FAILURE; } return HI_SUCCESS; } static HI_S32 s32VpssStopChn(VPSS_GRP VpssGrp, VPSS_CHN VpssChn) { HI_S32 s32Ret; if (VpssGrp < 0 || VpssGrp > VPSS_MAX_GRP_NUM) { printf("VpssGrp%d is out of rang[0,%d]. \n", VpssGrp, VPSS_MAX_GRP_NUM); return HI_FAILURE; } if (VpssChn < 0 || VpssChn > VPSS_MAX_CHN_NUM) { printf("VpssChn%d is out of rang[0,%d]. \n", VpssChn, VPSS_MAX_CHN_NUM); return HI_FAILURE; } s32Ret = HI_MPI_VPSS_DisableChn(VpssGrp, VpssChn); if (s32Ret != HI_SUCCESS) { printf("%s failed with %#x\n", __FUNCTION__, s32Ret); return HI_FAILURE; } return HI_SUCCESS; } HI_S32 VPSS_init(const IPC_VEDIO_S* pstIpcVedio) { HI_S32 s32Ret; if (HI_NULL == pstIpcVedio) { printf("null ptr,line%d. \n", __LINE__); return HI_FAILURE; } s32Ret = s32StartVPSS(pstIpcVedio); return s32Ret; } HI_S32 VPSS_exit(void) { HI_S32 i; for(i = 0; i < g_pstVpssAttr->VpssChnNum; i++) { s32VpssStopChn(g_pstVpssAttr->VpssGrp,i); } s32VpssStopGrp(g_pstVpssAttr->VpssGrp); return HI_SUCCESS; }