Esempio n. 1
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 5
0
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;
}