Example #1
0
static int video_DigitalZoom(int nChn, int nRatioX, int nRatioY, int nRatioW, int nRatioH, unsigned char bLive	)
{
	static unsigned char s_bZoom[MAX_CAM_CH];
	if(nChn < MAX_CAM_CH){
		int i = 0;
		VO_ZOOM_RATIO_S stZoomRatio = {0};
		if(!s_bZoom[nChn]){
			if(0 == nRatioX && 0 == nRatioY && 1000 == nRatioW && 1000 == nRatioH){
				// needless to zoom
				return 0;
			}
			stZoomRatio.u32XRatio = nRatioX;
			stZoomRatio.u32YRatio = nRatioY;
			stZoomRatio.u32WRatio = nRatioW;
			stZoomRatio.u32HRatio = nRatioH;
			for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
				DVR_ASSERT(HI_MPI_VO_SetZoomInRatio(VO_DEV_ID[i], nChn, &stZoomRatio));
			}
			s_bZoom[nChn] = TRUE;
		}else{
			// all zeroes is recover
			memset(&stZoomRatio, 0, sizeof(stZoomRatio));
			for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
				DVR_ASSERT(HI_MPI_VO_SetZoomInRatio(VO_DEV_ID[i], nChn, &stZoomRatio));
			}
			s_bZoom[nChn] = FALSE;
		}
		return 0;
	}
	return -1;
}
Example #2
0
static void video_ClearDigitalZoom(int nChn)
{
	int i = 0;
	VO_ZOOM_ATTR_S stBaseZoom;
	VO_ZOOM_RATIO_S stZoomRatio;

	memset(&stZoomRatio, 0, sizeof(stZoomRatio));
	for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
		DVR_ASSERT(HI_MPI_VO_SetZoomInRatio(VO_DEV_ID[i], nChn, &stZoomRatio)); // very important
	}

	video_GetZoom(nChn, &stBaseZoom, NULL);
	if(VIDEO_IsLiveMode()){
		for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
			DVR_ASSERT(HI_MPI_VO_SetZoomInWindow(VO_DEV_ID[i], nChn, &stBaseZoom));
		}
//		VIDEO_TRACE("clear zoom @ ch%d [%d,%d,%d,%d]", nChn, stBaseZoom.stZoomRect.s32X, stBaseZoom.stZoomRect.s32Y, stBaseZoom.stZoomRect.u32Width, stBaseZoom.stZoomRect.u32Height);
	}else{
		memset(&stBaseZoom.stZoomRect, 0, sizeof(stBaseZoom.stZoomRect));
		for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
			DVR_ASSERT(HI_MPI_VO_SetZoomInWindow(VO_DEV_ID[i], nChn, &stBaseZoom));
		}
	}
	memset(&s_stVideo.astDigitalZoomRatio[nChn], 0, sizeof(s_stVideo.astDigitalZoomRatio[nChn]));
	s_stVideo.abDigitalZoom[nChn] = FALSE;
}
Example #3
0
static void video_InputDestroy()
{
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	// vi2
	DVR_ASSERT(HI_MPI_VI_DisableChn(2, 0));
	DVR_ASSERT(HI_MPI_VI_Disable(2));
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	// vi0
	DVR_ASSERT(HI_MPI_VI_DisableChn(0, 0));
	DVR_ASSERT(HI_MPI_VI_Disable(0));
}
Example #4
0
static int avenc_AEncDestroy()
{
	int i = 0;
	for(i = 0; i < AVENC_AUDIO_MAX_CH; ++i){
		// unbind AENC
		DVR_ASSERT(HI_MPI_AENC_UnBindAi(i, AIN_DEV, i));
		// destroy aenc chn
		DVR_ASSERT(HI_MPI_AENC_DestroyChn(i));
		if(AUDIO_IsCapLiveLoop()){
			DVR_ASSERT(HI_MPI_AI_DisableChn(AIN_DEV, i));
		}
	}
	return 0;
}
Example #5
0
static void video_OutputDestroy()
{
	int i = 0, ii = 0;
	for(i = 0; i < sizeof(VO_DEV_ID) / sizeof(VO_DEV_ID[0]); ++i){
		// enable vo channel
		for(ii = 0; ii < VIDEO_GetMaxDiv(); ++ii){
			DVR_ASSERT(HI_MPI_VO_DisableChn(VO_DEV_ID[i], ii));
		}
		// disable video layer
		DVR_ASSERT(HI_MPI_VO_DisableVideoLayer(VO_DEV_ID[i]));
	}
	video_ScreenExit();
	s_stVideo.bOutput = FALSE;
}
Example #6
0
static void video_InputDestroy()
{
	int i = 0;
	// vi0 1-16 ch cif input 1d1
	// vi1 1-16 ch selecting input 1d1
	// vi2 17-20 ch d1 input 4d1
	// vi3 21-24 ch d1 input 4d1
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	// vi3
	for(i = 0; i < 4; ++i){
		DVR_ASSERT(HI_MPI_VI_DisableChn(3, i));
	}
	DVR_ASSERT(HI_MPI_VI_Disable(3));
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	// vi2
	for(i = 0; i < 4; ++i){
		DVR_ASSERT(HI_MPI_VI_DisableChn(2, i));
	}
	DVR_ASSERT(HI_MPI_VI_Disable(2));
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	// vi1
	DVR_ASSERT(HI_MPI_VI_DisableChn(1, 0));
	DVR_ASSERT(HI_MPI_VI_Disable(1));
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	// vi0
	DVR_ASSERT(HI_MPI_VI_DisableChn(0, 0));
	DVR_ASSERT(HI_MPI_VI_Disable(0));
}
Example #7
0
static void video_OutputDestroy()
{
	int i = 0, ii = 0;
	for(i = 0; i < sizeof(VO_DEV_ID) / sizeof(VO_DEV_ID[0]); ++i){
		// enable vo channel
		for(ii = MAX_CAM_CH; ii >= 0; --ii){
			video_BindOutput(VO_DEV_ID[i], ii, FALSE);
			DVR_ASSERT(HI_MPI_VO_DisableChn(VO_DEV_ID[i], ii));
		}
		// disable video layer
		DVR_ASSERT(HI_MPI_VO_DisableVideoLayer(VO_DEV_ID[i]));
	}
	video_ScreenExit();
	s_stVideo.bOutput = FALSE;
}
Example #8
0
static void video_ClearDigitalZoom(int nChn)
{
	int i = 0;
	VO_ZOOM_RATIO_S stZoomRatio;
	VO_ZOOM_ATTR_S stZoomRect;
	for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
		memset(&stZoomRatio, 0, sizeof(stZoomRatio));
		DVR_ASSERT(HI_MPI_VO_SetZoomInRatio(VO_DEV_ID[i], nChn, &stZoomRatio));
		DVR_ASSERT(HI_MPI_VO_GetZoomInWindow(VO_DEV_ID[i], nChn, &stZoomRect));
		memset(&stZoomRect.stZoomRect, 0, sizeof(stZoomRect.stZoomRect));
		DVR_ASSERT(HI_MPI_VO_SetZoomInWindow(VO_DEV_ID[i], nChn, &stZoomRect));
	}
	memset(&s_stVideo.astDigitalZoomRatio[nChn], 0, sizeof(s_stVideo.astDigitalZoomRatio[nChn]));
	s_stVideo.abDigitalZoom[nChn] = FALSE;
}
static void video_InputDestroy()
{
	int nDev = 0;
	int i = 0, ii = 0;

    for(ii = 0; ii < MAX_CAM_CH; ii += 4) {
        if(VIMAP_Get(ii, &nDev, NULL) < 0) {
            continue;
        }

        for(i = 0; i < 4; ++i) {
            DVR_ASSERT(HI_MPI_VI_DisableChn(nDev, i));
        }
        DVR_ASSERT(HI_MPI_VI_Disable(nDev));
    }
}
Example #10
0
static void video_InputDestroy()
{
    int ii, jj;

    // vi0 1-4   ch cif input 4d1
    // vi1 5-8   ch cif input 4d1
    // vi2 9-12  ch cif input 4d1
    // vi3 13-16 ch cif input 4d1
    ////////////////////////////////////////////////////////////////
    for(ii = 0; ii < 4; ii ++) {
        for(jj = 0; jj < 4; ++ jj){
            DVR_ASSERT(HI_MPI_VI_DisableChn(ii, jj));
        }
        DVR_ASSERT(HI_MPI_VI_Disable(ii));
    }
}
Example #11
0
static void avenc_VideoPreProc(int nVeGrp, int nChn)
{
	int const nWidth = 352;
	int const nHeight = (VOUT_PAL == g_pstSysEnv->GetStandard(g_pstSysEnv)) ? 288 : 240;
	// source size
	if(nChn < 16){
        // all is cif
        VIDEO_PREPROC_CONF_S stPreProcConf;
        DVR_ASSERT(HI_MPI_VPP_GetConf(nVeGrp, &stPreProcConf));

        stPreProcConf.stClipAttr[0].stClipRect.u32Width = 352;
        stPreProcConf.stClipAttr[0].stClipRect.u32Height = (VOUT_PAL == g_pstSysEnv->GetStandard(g_pstSysEnv)) ? 288 : 240;
        stPreProcConf.stClipAttr[0].stClipRect.s32X= 0;
        stPreProcConf.stClipAttr[0].stClipRect.s32Y = (stPreProcConf.stClipAttr[0].stClipRect.u32Height + 2) * (nChn % 8);
        stPreProcConf.stClipAttr[0].u32SrcWidth = 352; // field width
        stPreProcConf.stClipAttr[0].u32SrcHeight = (8 * stPreProcConf.stClipAttr[0].stClipRect.u32Height + 7 * 2) * 2; // half field height
        stPreProcConf.stClipAttr[0].u32ClipMode = (nChn < 8) ? VIDEO_FIELD_BOTTOM : VIDEO_FIELD_TOP;

        DVR_ASSERT(HI_MPI_VPP_SetConf(nVeGrp, &stPreProcConf));
	}
}
Example #12
0
static void video_CheckDigitalZoomD1(int nChn)
{
	int i = 0;
	VO_ZOOM_RATIO_S stZoomRatio = {0};
	stZoomRatio.u32XRatio = s_stVideo.astDigitalZoomRatio[nChn].nRatioX;
	stZoomRatio.u32YRatio = s_stVideo.astDigitalZoomRatio[nChn].nRatioY;
	stZoomRatio.u32WRatio = s_stVideo.astDigitalZoomRatio[nChn].nRatioW;
	stZoomRatio.u32HRatio = s_stVideo.astDigitalZoomRatio[nChn].nRatioH;
	for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
		DVR_ASSERT(HI_MPI_VO_SetZoomInRatio(VO_DEV_ID[i], SPECIAL_D1_CH, &stZoomRatio));
	}
}
Example #13
0
static void video_DisplayD1(int nVoDev, int nChn, unsigned char bDisplay)
{
	static int s_nDispViDev = -1;
	static int s_nDispViChn = -1;
	static int s_nDispVoChn = -1;
	VI_CHN_ATTR_S stViChnAttr;

	// input reset

	// dont try to change input the original setting of d1 channel
	if(bDisplay){
		if(!(-1 == s_nDispViDev && -1 == s_nDispViChn)){
			if(s_nDispVoChn >= MAX_D1_CNT){
				DVR_ASSERT(HI_MPI_VI_GetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
				VI_CIF_ATTR_CONF(&stViChnAttr);
				DVR_ASSERT(HI_MPI_VI_SetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
			}
			DVR_ASSERT(HI_MPI_VO_SetChnField(nVoDev, nChn, VO_FIELD_BOTTOM));
		}
		if(nChn >= MAX_D1_CNT){
			if(0 == VIMAP_Get(nChn, &s_nDispViDev, &s_nDispViChn)){
				DVR_ASSERT(HI_MPI_VI_GetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
				VI_D1_ATTR_CONF(&stViChnAttr);
				DVR_ASSERT(HI_MPI_VI_SetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
				s_nDispVoChn = nChn;
			}
		}
		DVR_ASSERT(HI_MPI_VO_SetChnField(nVoDev, nChn, VO_FIELD_BOTH));
	}else{
		if(!(-1 == s_nDispViDev && -1 == s_nDispViChn)){
			if(nChn >= MAX_D1_CNT){
				// reset field setting
				DVR_ASSERT(HI_MPI_VI_GetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
				VI_CIF_ATTR_CONF(&stViChnAttr);
				DVR_ASSERT(HI_MPI_VI_SetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
				s_nDispViDev = -1;
				s_nDispViChn = -1;
			}
			s_nDispVoChn = -1;
		}
		DVR_ASSERT(HI_MPI_VO_SetChnField(nVoDev, nChn, VO_FIELD_BOTTOM));
	}
}
Example #14
0
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));
		}
	}
}
Example #15
0
static void video_InputDestroy()
{
	int nDev = 0;
	int i = 0;
#if (MAX_CAM_CH > 4)
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	// vi2
	nDev = 2;
	for(i = 0; i < 4; ++i){
		DVR_ASSERT(HI_MPI_VI_DisableChn(nDev, i));
	}
	DVR_ASSERT(HI_MPI_VI_Disable(nDev));
#endif
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	// vi0
	nDev = 0;
	for(i = 0; i < 4; ++i){
		DVR_ASSERT(HI_MPI_VI_DisableChn(nDev, i));
	}
	DVR_ASSERT(HI_MPI_VI_Disable(nDev));
}
Example #16
0
static void video_InputInit()
{
	int i = 0, ii = 0;
	// init sdk
	{
		int nDev = 0;
		int nChnCnt = 0;
		VI_PUB_ATTR_S stViDevAttr;
		VI_CHN_ATTR_S stViChnAttr;
		int const vi_fps = (VIDEO_IS_PAL() ? 25 : 30);

		// vi0 1-4 ch cif input 4d1
		// vi2 5-8 ch d1 input 4d1

		// device attributes
		stViDevAttr.enInputMode = VI_MODE_BT656;
		stViDevAttr.enWorkMode = VI_WORK_MODE_4D1;
		stViDevAttr.enViNorm = (VIDEO_IS_PAL() ? VIDEO_ENCODING_MODE_PAL : VIDEO_ENCODING_MODE_NTSC);
		// channel attributes
		stViChnAttr.stCapRect.s32Y = 0;
		stViChnAttr.stCapRect.u32Height = (VIDEO_IS_PAL() ? 288 : 240);
		stViChnAttr.bHighPri = HI_FALSE;
		stViChnAttr.bChromaResample = HI_FALSE;
		stViChnAttr.enViPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
		VI_CIF_ATTR_CONF(&stViChnAttr);

        for(ii = 0; ii < MAX_CAM_CH; ii += 4) {
            if(VIMAP_Get(ii, &nDev, NULL) < 0) {
                continue;
            }

            DVR_ASSERT(HI_MPI_VI_Disable(nDev));
            DVR_ASSERT(HI_MPI_VI_SetPubAttr(nDev, &stViDevAttr));
            DVR_ASSERT(HI_MPI_VI_Enable(nDev));

            for(i = 0; i < 4; ++i) {
                if(nChnCnt++ < MAX_D1_CNT){
                    VI_D1_ATTR_CONF(&stViChnAttr);
                }else{
                    VI_CIF_ATTR_CONF(&stViChnAttr);
                }
                DVR_ASSERT(HI_MPI_VI_SetChnAttr(nDev, i, &stViChnAttr));
                DVR_ASSERT(HI_MPI_VI_EnableChn(nDev, i));
                DVR_ASSERT(HI_MPI_VI_SetSrcFrameRate(nDev, i, vi_fps));
                DVR_ASSERT(HI_MPI_VI_SetFrameRate(nDev, i, vi_fps));
            }
        }
	}
}
Example #17
0
// if arg=NULL, time stamp will sync to system clock
int SYSTEM_SetTime(struct timeval* pstVal)
{
	int nRet = 0;
	unsigned long long u64Pts = 0;
	struct timeval stVal = {0};
	if(pstVal){
		stVal = *pstVal;
		nRet = settimeofday(pstVal, NULL);
		assert(0 == nRet);
		write_rtc(pstVal->tv_sec);
		sleep(2);
	}else{
		gettimeofday(&stVal, NULL);
	}
	u64Pts = stVal.tv_sec;
	u64Pts *= 1000000;
	u64Pts += stVal.tv_usec;
	DVR_ASSERT(HI_MPI_SYS_InitPtsBase(u64Pts));
	return 0;
}
Example #18
0
static void video_InputInit()
{
    int ii, jj;

    VI_PUB_ATTR_S stViDevAttr;
    VI_CHN_ATTR_S stViChnAttr;

    // vi0 1-4   ch cif input 4d1
    // vi1 5-8   ch cif input 4d1
    // vi2 9-12  ch cif input 4d1
    // vi3 13-16 ch cif input 4d1
    ////////////////////////////////////////////////////////////////
    // vi
    stViDevAttr.enInputMode = VI_MODE_BT656;
    stViDevAttr.enWorkMode = VI_WORK_MODE_4D1;
    stViDevAttr.enViNorm = (VIDEO_IS_PAL() ? VIDEO_ENCODING_MODE_PAL : VIDEO_ENCODING_MODE_NTSC);
    // 4d1 input
    stViChnAttr.stCapRect.u32Width  = 704;
    stViChnAttr.stCapRect.u32Height = VI_CIF_HEIGHT;
    stViChnAttr.stCapRect.s32X = VI_X_OFFSET;
    stViChnAttr.stCapRect.s32Y = 0;
    stViChnAttr.bChromaResample = HI_FALSE;
    stViChnAttr.enCapSel = VO_FIELD_BOTTOM;
    stViChnAttr.bDownScale = HI_TRUE;
    stViChnAttr.bHighPri = HI_FALSE;
    stViChnAttr.enViPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
    for(ii = 0; ii < 4; ii ++) {
        // interface
        DVR_ASSERT(HI_MPI_VI_Disable(ii));
        DVR_ASSERT(HI_MPI_VI_SetPubAttr(ii, &stViDevAttr));
        DVR_ASSERT(HI_MPI_VI_Enable(ii));
        for(jj = 0; jj < 4; jj ++) {
            DVR_ASSERT(HI_MPI_VI_SetChnAttr(ii, jj, &stViChnAttr));
            DVR_ASSERT(HI_MPI_VI_EnableChn(ii, jj));
            DVR_ASSERT(HI_MPI_VI_SetSrcFrameRate(ii, jj, MAX_CIF_LIVE_FPS));
            DVR_ASSERT(HI_MPI_VI_SetFrameRate(ii, jj, MAX_CIF_LIVE_FPS));
        }
    }
}
Example #19
0
int SYSTEM_Init()
{
	int BSizW = VIDEO_IS_960() ?VRES_SIZE_W_EF :VRES_SIZE_W_SD;
	int BSizH = VIDEO_IS_PAL() ?VRES_SIZE_H_PL :VRES_SIZE_H_NT;
	int ii    = 0;

	VB_CONF_S stVbConf   = {0};
	MPP_SYS_CONF_S stSysConf = {0};
	memset(&stVbConf, 0, sizeof(stVbConf));

#ifdef _NVR
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	stVbConf.astCommPool[0].u32BlkSize = 352 * 288 * 2;
	stVbConf.astCommPool[0].u32BlkCnt  = 4;
#elif defined(_EXT_HDDVR)
#if   (MAX_CAM_CH == 4) && defined(_HI3520D_EXT)
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	//stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P * 2;
	//stVbConf.astCommPool[ii].u32BlkCnt  = 3 * MAX_CAM_CH;
	//ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (VRES_SIZE_W_HD1080P/2) * VRES_SIZE_W_HD720P * 3 / 2;// 1280*720*2 , 1280*960*1.5( 1080* 960* 1.5)
	stVbConf.astCommPool[ii].u32BlkCnt  = 7 * MAX_CAM_CH - 1;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW) * (BSizH) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 3 * MAX_CAM_CH - 2;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	ii ++;
#elif (MAX_CAM_CH == 4)
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD1080P * VRES_SIZE_H_HD1080P * 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 6 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW) * (BSizH) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	ii ++;
#endif
#if   (MAX_CAM_CH == 8) && defined(SDK_PLATFORM_HI3521)
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD1080P * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 3 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (VRES_SIZE_W_HD1080P/2) * VRES_SIZE_H_HD1080P * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 5 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW) * (BSizH) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 2 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 2 * MAX_CAM_CH;
	ii ++;
#elif (MAX_CAM_CH == 8)
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD1080P * VRES_SIZE_H_HD1080P * 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 2 * MAX_CAM_CH;
	ii ++;
	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD1080P * VRES_SIZE_H_HD1080P * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 2 * MAX_CAM_CH;
	ii ++;
	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P* 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 3 * MAX_CAM_CH;
	ii ++;
	stVbConf.astCommPool[ii].u32BlkSize = (BSizW) * (BSizH) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 3 * MAX_CAM_CH;
	ii ++;
	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 3 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD1080P * VRES_SIZE_H_HD1080P * 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);
	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD1080P * VRES_SIZE_H_HD1080P * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);
	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P* 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 3 * MAX_CAM_CH;
	strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);
	stVbConf.astCommPool[ii].u32BlkSize = (BSizW) * (BSizH) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 1 * MAX_CAM_CH;
	strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);
	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 1 * MAX_CAM_CH;
	strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);

#endif
#if   (MAX_CAM_CH == 16) && defined(SDK_PLATFORM_HI3531)
#ifdef _HVR
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	if (JCONF_BNC_CAM() > 0) {
		stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P * 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4 * ((JCONF_BNC_CAM()+1)/2*2)/2;
		ii ++;

		stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P * 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4 * ((JCONF_BNC_CAM()+1)/2*2)/2;
		strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);

		stVbConf.astCommPool[ii].u32BlkSize = (VRES_SIZE_W_HD1080P/2) * VRES_SIZE_H_HD1080P * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 5 * ((JCONF_BNC_CAM()+1)/2*2)/2;
		ii ++;

		stVbConf.astCommPool[ii].u32BlkSize = (VRES_SIZE_W_HD1080P/2) * VRES_SIZE_H_HD1080P * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 5 * ((JCONF_BNC_CAM()+1)/2*2)/2;
		strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);

		stVbConf.astCommPool[ii].u32BlkSize = (BSizW) * (BSizH) * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4 * JCONF_BNC_CAM();
		ii ++;

		stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4 * JCONF_BNC_CAM();
		ii ++;
	}

	if (JCONF_BNC_CAM()  == 0) {
		stVbConf.astCommPool[ii].u32BlkSize = (1920 * 1080) * 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4;
		ii ++;
		stVbConf.astCommPool[ii].u32BlkSize = (1280 * 960) * 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4;
		ii ++;
		stVbConf.astCommPool[ii].u32BlkSize = (720 * 576) * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt	= 6;
		ii ++;
		stVbConf.astCommPool[ii].u32BlkSize = (352 * 288) * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt	= 6;
		ii ++;
	}
#else
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P * 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 3 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P * 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 3 * MAX_CAM_CH;
	strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);

	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = VRES_SIZE_W_HD720P * VRES_SIZE_H_HD720P * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW) * (BSizH) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	ii ++;
#endif
#endif
	
#elif defined(_JA2024NC)
//	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkSize = 704 * 576 * 2; // 4*4CIF live vi0
//	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkCnt  = 4 * 16;
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkSize = 384 * 4636 * 2; // 16CIF live must be YUV422 2bpp
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkCnt  = 12;
      ++stVbConf.u32MaxPoolCnt;
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkSize = 704 * 576 * 2; // D1 live(1-16) vi1
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkCnt  = 8;
	++stVbConf.u32MaxPoolCnt;
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkSize = 384 * 288 * 2; // 4CIF live vi3 (17-20)
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkCnt  = 8 * 4;
	++stVbConf.u32MaxPoolCnt;
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkSize = 384 * 288 * 2; // 4CIF live vi4 (21-24)
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkCnt  = 8 * 4;
	++stVbConf.u32MaxPoolCnt;
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkSize = 704 * 576 * 2; // 1D1 live vi3/4 (17-24)
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkCnt  = 8;
	++stVbConf.u32MaxPoolCnt;

    stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkSize = 384 * 288 * 3 / 2; // VENC main stream
    stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkCnt = 6 * MAX_CAM_CH;
	++stVbConf.u32MaxPoolCnt;
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkSize = 384 * 288 * 3 / 2; // VENC sub stream
    stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkCnt = 6 * MAX_CAM_CH;
	++stVbConf.u32MaxPoolCnt;
	stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkSize = 384 * 288 * 3 / 2; // VENC cell-phonme stream
    stVbConf.astCommPool[stVbConf.u32MaxPoolCnt].u32BlkCnt = 6;
	++stVbConf.u32MaxPoolCnt;

#elif defined(_JA2032NC)

	stVbConf.u32MaxPoolCnt = 7;
	stVbConf.astCommPool[0].u32BlkSize = 384 * 4636 * 2; // 16CIF live must be YUV422 2bpp
	stVbConf.astCommPool[0].u32BlkCnt  = 12;
	stVbConf.astCommPool[1].u32BlkSize = 384 * 4636 * 2; // 16CIF live must be YUV422 2bpp
	stVbConf.astCommPool[1].u32BlkCnt  = 12;
	stVbConf.astCommPool[2].u32BlkSize = 704 * 576 * 2; // D1 live(1-8) vi1
	stVbConf.astCommPool[2].u32BlkCnt  = 5;
	stVbConf.astCommPool[3].u32BlkSize = 704 * 576 * 2; // D1 live(9-16) vi3
	stVbConf.astCommPool[3].u32BlkCnt  = 5;

    stVbConf.astCommPool[4].u32BlkSize = 384 * 288 * 2; // VENC main stream
    stVbConf.astCommPool[4].u32BlkCnt = 5 * MAX_CAM_CH;
	stVbConf.astCommPool[5].u32BlkSize = 384 * 288 * 2; // VENC sub stream
    stVbConf.astCommPool[5].u32BlkCnt = 5 * MAX_CAM_CH;
	stVbConf.astCommPool[6].u32BlkSize = 384 * 288 * 2; // VENC cell-phonme stream
    stVbConf.astCommPool[6].u32BlkCnt = 5;

    //stVbConf.astCommPool[7].u32BlkSize = 704 * 576 * 2; // D1 live(9-16) vi3
	//stVbConf.astCommPool[7].u32BlkCnt  = 2;

#elif defined(_JA7216CX) || defined(_JA7216NC)
	stVbConf.u32MaxPoolCnt = 6;
//	// from tongli
//	stVbConf.astCommPool[0].u32BlkSize = 3339968;
//	stVbConf.astCommPool[0].u32BlkCnt  = 10;
//	stVbConf.astCommPool[1].u32BlkSize = 813056;
//	stVbConf.astCommPool[1].u32BlkCnt  = 10;
//	stVbConf.astCommPool[2].u32BlkSize = 214016;
//	stVbConf.astCommPool[2].u32BlkCnt  = 40;
	// from yangyi
	stVbConf.astCommPool[0].u32BlkSize = 384 * 4636 * 2; // 16CIF live must be YUV422 2bpp
	stVbConf.astCommPool[0].u32BlkCnt  = 12;
	stVbConf.astCommPool[1].u32BlkSize = 704 * 576 * 2; // D1 live(1-8) vi1
	stVbConf.astCommPool[1].u32BlkCnt  = 5;
	stVbConf.astCommPool[2].u32BlkSize = 704 * 576 * 2; // D1 live(9-16) vi3
	stVbConf.astCommPool[2].u32BlkCnt  = 5;

    stVbConf.astCommPool[3].u32BlkSize = 384 * 288 * 2; // VENC main stream
    stVbConf.astCommPool[3].u32BlkCnt = 5 * MAX_CAM_CH;
	stVbConf.astCommPool[4].u32BlkSize = 384 * 288 * 2; // VENC sub stream
    stVbConf.astCommPool[4].u32BlkCnt = 5 * MAX_CAM_CH;
	stVbConf.astCommPool[5].u32BlkSize = 384 * 288 * 2; // VENC cell-phonme stream
    stVbConf.astCommPool[5].u32BlkCnt = 5;



#elif defined(_JA2016CX) || defined(_JA2016NC) || defined(_JA2016ICX)
	stVbConf.u32MaxPoolCnt = 6;
	stVbConf.astCommPool[0].u32BlkSize = 704 * 576 * 2; // D1 for full screen live
	stVbConf.astCommPool[0].u32BlkCnt  = 5 * (MAX_D1_CNT + 1);
	stVbConf.astCommPool[1].u32BlkSize = 352 * 288 * 2; // cif for live
	stVbConf.astCommPool[1].u32BlkCnt  = 5 * (MAX_CIF_CNT - MAX_D1_CNT);

	stVbConf.astCommPool[2].u32BlkSize = 704 * 576 * 3 / 2; // cif for main stream venc
	stVbConf.astCommPool[2].u32BlkCnt  = 4 * MAX_D1_CNT;
	stVbConf.astCommPool[3].u32BlkSize = 352 * 288 * 3 / 2; // cif for sub stream venc
	stVbConf.astCommPool[3].u32BlkCnt  = 4 * (MAX_CIF_CNT - MAX_D1_CNT);
	stVbConf.astCommPool[4].u32BlkSize = 352 * 288 * 3 / 2; // cif for sub stream venc
	stVbConf.astCommPool[4].u32BlkCnt  = 4 * MAX_CAM_CH;
	stVbConf.astCommPool[5].u32BlkSize = 352 * 288 * 3 / 2; // VENC cell-phonme stream
	stVbConf.astCommPool[5].u32BlkCnt  = 4;

#elif defined(_JA2008NC)
	stVbConf.u32MaxPoolCnt = 6;
	stVbConf.astCommPool[0].u32BlkSize = 704 * 576 * 2; // D1 for full screen live
	stVbConf.astCommPool[0].u32BlkCnt  = 5 * (MAX_D1_CNT + 1);
	stVbConf.astCommPool[1].u32BlkSize = 352 * 288 * 2; // cif for live
	stVbConf.astCommPool[1].u32BlkCnt  = 5 * (MAX_CIF_CNT - MAX_D1_CNT);

	stVbConf.astCommPool[2].u32BlkSize = 704 * 576 * 3 / 2; // cif for main stream venc
	stVbConf.astCommPool[2].u32BlkCnt  = 4 * MAX_D1_CNT;
	stVbConf.astCommPool[3].u32BlkSize = 352 * 288 * 3 / 2; // cif for sub stream venc
	stVbConf.astCommPool[3].u32BlkCnt  = 4 * (MAX_CIF_CNT - MAX_D1_CNT);
	stVbConf.astCommPool[4].u32BlkSize = 352 * 288 * 3 / 2; // cif for sub stream venc
	stVbConf.astCommPool[4].u32BlkCnt  = 4 * MAX_CAM_CH;
	stVbConf.astCommPool[5].u32BlkSize = 352 * 288 * 3 / 2; // VENC cell-phonme stream
	stVbConf.astCommPool[5].u32BlkCnt  = 4;
#elif defined(_JA9204RN)
	stVbConf.u32MaxPoolCnt = 5;
	stVbConf.astCommPool[0].u32BlkSize = 960 * 576 * 3 / 2; // D1 for full screen live
	stVbConf.astCommPool[0].u32BlkCnt  = 5 * (MAX_D1_CNT + 1);
	stVbConf.astCommPool[1].u32BlkSize = 480 * 288 * 3 / 2; // cif for live
	stVbConf.astCommPool[1].u32BlkCnt  = 5 * (MAX_CIF_CNT - MAX_D1_CNT);

	stVbConf.astCommPool[2].u32BlkSize = 960 * 576 * 3 / 2; // cif for main stream venc
	stVbConf.astCommPool[2].u32BlkCnt  = 4 * MAX_D1_CNT;
	stVbConf.astCommPool[3].u32BlkSize = 480 * 288 * 3 / 2; // cif for sub stream venc
	stVbConf.astCommPool[3].u32BlkCnt  = 4 * (MAX_CIF_CNT - MAX_D1_CNT);
	stVbConf.astCommPool[4].u32BlkSize = 480 * 288 * 3 / 2; // cif for sub stream venc
	stVbConf.astCommPool[4].u32BlkCnt  = 4 * MAX_CAM_CH;

#elif defined(_JA3116TW)
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	stVbConf.astCommPool[ii].u32BlkSize = BSizW * BSizH * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 1.5 * (MAX_D1_CNT) * (VIDEO_IS_PAL() ?1 :1.2f);
	ii ++;
	stVbConf.astCommPool[ii].u32BlkSize = BSizW * BSizH * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * (MAX_D1_CNT + 1) * (VIDEO_IS_PAL() ?1 :1.2f);
	strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 2.5 * (MAX_CAM_CH + 1) * (VIDEO_IS_PAL() ?1 :1.2f);
	ii ++;
	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 2 * (MAX_CAM_CH + 1) * (VIDEO_IS_PAL() ?1 :1.2f);
	strcpy(stVbConf.astCommPool[ii ++].acMmzName, MMZ_ZONE_NAME1);

#elif defined(_JA2104) || defined(_JA2106) || defined(_JA2116)
	#if   defined(_HI3520D_RAM_LITE) && (MAX_CAM_CH == 4)
	 	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
		stVbConf.astCommPool[ii].u32BlkSize = BSizW * BSizH * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_D1_CNT + 2;
	 	ii ++;

		stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4 * (MAX_CIF_CNT - MAX_D1_CNT) + 3 * MAX_CAM_CH + 2;
	 	ii ++;
	#elif defined(_HI3520D_RAM_LITE) && (MAX_CAM_CH == 8)
		stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
		stVbConf.astCommPool[ii].u32BlkSize = BSizW * BSizH * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4 * (MAX_D1_CNT + 1);
	 	ii ++;
 
		stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 4 * (MAX_CIF_CNT - MAX_D1_CNT) + 2 * MAX_CAM_CH;
		ii ++;
	#elif defined(_HI3515A_EXT) && defined(_JA2104)
		stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
		stVbConf.astCommPool[ii].u32BlkSize = BSizW * BSizH * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 9 * (MAX_D1_CNT + 1);
		ii ++;

		stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
		stVbConf.astCommPool[ii].u32BlkCnt  = 6 * (MAX_CIF_CNT - MAX_D1_CNT) + 10 * (MAX_CAM_CH);
		ii ++;
	#elif defined(_HI3520D_EXT) && defined(_JA2104)
		stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
		stVbConf.astCommPool[ii].u32BlkSize = BSizW * BSizH * 3 / 2; // D1 for full screen live
		stVbConf.astCommPool[ii].u32BlkCnt  = 7 * (MAX_D1_CNT + 1);
		ii ++;

		stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2; // cif for live
		stVbConf.astCommPool[ii].u32BlkCnt  = 6 * (MAX_CIF_CNT - MAX_D1_CNT);
		ii ++;

		stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2; // cif for live
		stVbConf.astCommPool[ii].u32BlkCnt  = 4 * (MAX_CAM_CH);
		ii ++;
	#else
		stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
		stVbConf.astCommPool[ii].u32BlkSize = BSizW * BSizH * 3 / 2; // D1 for full screen live
		stVbConf.astCommPool[ii].u32BlkCnt  = 5 * (MAX_D1_CNT + 1) + 3;
		ii ++;

		stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2; // cif for live
		stVbConf.astCommPool[ii].u32BlkCnt  = 6 * (MAX_CIF_CNT - MAX_D1_CNT) + 4 * (MAX_CAM_CH);
		ii ++;
	#endif
#elif defined(_JA2108) || defined(_JA2116D)
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	stVbConf.astCommPool[ii].u32BlkSize = BSizW * BSizH * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 12 * (MAX_D1_CNT + 1);
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 12 * (MAX_CIF_CNT - MAX_D1_CNT);
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2; // cif for live
	stVbConf.astCommPool[ii].u32BlkCnt  = 5 * (MAX_CAM_CH);
	ii ++;

#elif defined(_JA2124) || defined(_JA2132)
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	stVbConf.astCommPool[ii].u32BlkSize = 720 * BSizH * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 9 * ((MAX_CAM_CH/16) * 4);
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = BSizW * BSizH * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 6 * ((MAX_CAM_CH%16)/4)+6;
	ii ++;

	stVbConf.astCommPool[ii].u32BlkSize = (BSizW/2) * (BSizH/2) * 3 / 2;
	stVbConf.astCommPool[ii].u32BlkCnt  = 4 * MAX_CAM_CH;
	ii ++;

#else
	stVbConf.u32MaxPoolCnt = VB_MAX_POOLS;
	stVbConf.astCommPool[0].u32BlkSize = 704 * 576 * 3 / 2;
	stVbConf.astCommPool[0].u32BlkCnt  = 8 * (MAX_D1_CNT);
	stVbConf.astCommPool[1].u32BlkSize = 352 * 288 * 3 / 2;
	stVbConf.astCommPool[1].u32BlkCnt  = 8 * (MAX_CIF_CNT - MAX_D1_CNT) + 2;
#endif

	SYSTEM_Destroy();
	SYSTEM_SetTime(NULL);
	DVR_ASSERT(HI_MPI_VB_SetConf(&stVbConf));
	DVR_ASSERT(HI_MPI_VB_Init());
	stSysConf.u32AlignWidth = 16;
	DVR_ASSERT(HI_MPI_SYS_SetConf(&stSysConf));
	DVR_ASSERT(HI_MPI_SYS_Init());
	return 0;
}
Example #20
0
void SYSTEM_Destroy()
{
	DVR_ASSERT(HI_MPI_SYS_Exit());
	DVR_ASSERT(HI_MPI_VB_Exit());
}
Example #21
0
static void video_Division(int nVoDev, int nScrWidth, int nScrHeight, int nDiv, int nPage, unsigned char bD1)
{
	int i = 0;
	int nGrid = 1;
	VO_CHN_ATTR_S stVoChnAttr;

	int nLocate = 0;
	int nChWidth = 0;
	int nChHeight = 0;
	int nOffsetX = (VO_ORIGIN_WIDTH - nScrWidth) / 2;
	int nOffsetY = (VO_ORIGIN_HEIGHT - nScrHeight) / 2;
	int nBlankW = 0;
	int nBlankH = 0;

	if(-1 == nDiv){
		nDiv = VIDEO_GetMaxDiv();
	}
	switch(nDiv)
	{
	case 1: nGrid = 1; break;
	case 4: nGrid = 2; break;
	case 9: nGrid = 3; break;
	case 16: nGrid = 4; break;
	case 25: nGrid = 5; break;
	default:
		return;
	}
	
	if(nVoDev == VO_CVBS_DEVICE) {
		nOffsetX = s_stVideo.ScrnEdges[1].nEdgeX;
		nOffsetY = s_stVideo.ScrnEdges[1].nEdgeY;

		nScrWidth  = s_stVideo.ScrnEdges[1].nEdgeW;
		nScrHeight = s_stVideo.ScrnEdges[1].nEdgeH;
	}
	
	nChWidth = nScrWidth / nGrid;
	nChHeight = nScrHeight / nGrid;
	nChWidth &= ~(2-1); // 2 alignment
	nChHeight &= ~(2-1); // 2 alignment
	nBlankW = nScrWidth % nChWidth;
	nBlankH = nScrHeight % nChHeight;
	for(i = 0, nLocate = 0; i < VIDEO_GetMaxDiv(); ++i){
		stVoChnAttr.stRect.s32X = nOffsetX + (((nLocate % nDiv) % nGrid) * nChWidth) & ~(2-1); // 2 alignment
		stVoChnAttr.stRect.s32Y = nOffsetY + (((nLocate % nDiv) / nGrid) * nChHeight) & ~(2-1); // 2 alignment	
		//VIDEO_TRACE("vo(%d,%d) (x,y)=%d,%d, [w,h]=%d,%d", nVoDev, i, stVoChnAttr.stRect.s32X, stVoChnAttr.stRect.s32Y, stVoChnAttr.stRect.u32Width, stVoChnAttr.stRect.u32Height);
		if((nGrid - 1) == (nLocate % nGrid)){
			// the right side
			stVoChnAttr.stRect.u32Width = nChWidth + nBlankW;
		}else{
			// for osd bar
			stVoChnAttr.stRect.u32Width = nChWidth - 2;
		}
		if((nGrid - 1) == (nLocate / nGrid)){
			stVoChnAttr.stRect.u32Height = nChHeight + nBlankH;
		}else{
			// for osd bar
			stVoChnAttr.stRect.u32Height = nChHeight - 2;
		}
		stVoChnAttr.u32Priority = 1;
		stVoChnAttr.bZoomEnable = HI_TRUE;
		stVoChnAttr.bDeflicker = (0 == nVoDev) ? HI_FALSE : HI_TRUE;
		DVR_ASSERT(HI_MPI_VO_SetChnAttr(nVoDev, i, &stVoChnAttr));
		if(VO_CHN_IS_ONTOP(nDiv, nPage, i)){
			++nLocate;
			DVR_ASSERT(HI_MPI_VO_ChnShow(nVoDev, i));
		}else{
			DVR_ASSERT(HI_MPI_VO_ChnHide(nVoDev, i));
		}
	}
}
Example #22
0
static void video_OutputInit()
{
	int i = 0, ii = 0;
	int const nMaxFps = MAX_D1_CNT ? MAX_D1_LIVE_FPS : MAX_CIF_LIVE_FPS;

	VO_VIDEO_LAYER_ATTR_S stVgaLayerAttr;
	VO_VIDEO_LAYER_ATTR_S stCvbsLayerAttr;

	// vga output
	{
		VGA_RESOLUTION const enRes = g_pstSysEnv->GetVGAResolution(g_pstSysEnv);

		stVgaLayerAttr.stImageSize.u32Width  = VO_ORIGIN_WIDTH;
		stVgaLayerAttr.stImageSize.u32Height = VO_ORIGIN_HEIGHT;
		stVgaLayerAttr.stDispRect.s32X = 0;
		stVgaLayerAttr.stDispRect.s32Y = 0;
		switch(enRes) {
		case VGA_800x600:
			stVgaLayerAttr.stDispRect.u32Width  = 800;
			stVgaLayerAttr.stDispRect.u32Height = 600;
			break;
		default:
		case VGA_1024x768:
			stVgaLayerAttr.stDispRect.u32Width  = 1024;
			stVgaLayerAttr.stDispRect.u32Height = 768;
			break;
		case VGA_1280x1024:
			stVgaLayerAttr.stDispRect.u32Width  = 1280;
			stVgaLayerAttr.stDispRect.u32Height = 1024;
			break;
		case VGA_1366x768:
			stVgaLayerAttr.stDispRect.u32Width  = 1366;
			stVgaLayerAttr.stDispRect.u32Height = 768;
			break;
		case VGA_1440x900:
			stVgaLayerAttr.stDispRect.u32Width  = 1440;
			stVgaLayerAttr.stDispRect.u32Height = 900;
			break;
		}

		stVgaLayerAttr.u32DispFrmRt = nMaxFps;
		stVgaLayerAttr.enPixFormat  = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
		stVgaLayerAttr.s32PiPChn    = VO_DEFAULT_CHN;
	}
	// cvbs
	{
		stCvbsLayerAttr.stImageSize.u32Width  = VO_ORIGIN_WIDTH;
		stCvbsLayerAttr.stImageSize.u32Height = VO_ORIGIN_HEIGHT;
		stCvbsLayerAttr.stDispRect.s32X       = 0;
		stCvbsLayerAttr.stDispRect.s32Y       = 0;
		stCvbsLayerAttr.stDispRect.u32Width   = VO_ORIGIN_WIDTH;
		stCvbsLayerAttr.stDispRect.u32Height  = VO_ORIGIN_HEIGHT;
		stCvbsLayerAttr.u32DispFrmRt          = nMaxFps;
		stCvbsLayerAttr.enPixFormat           = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
		stCvbsLayerAttr.s32PiPChn             = VO_DEFAULT_CHN;
	}
	{
		// configuration active
		const VO_VIDEO_LAYER_ATTR_S astVideoLayerAttr[] = {stVgaLayerAttr, stCvbsLayerAttr};

        video_ScreenInit();

		for(i = 0; i < sizeof(VO_DEV_ID) / sizeof(VO_DEV_ID[0]); ++i){
			//DVR_ASSERT(HI_MPI_VO_SetDispBufLen(nDev, MAX_CAM_CH));
			DVR_ASSERT(HI_MPI_VO_SetVideoLayerAttr(VO_DEV_ID[i], &astVideoLayerAttr[i]));
			DVR_ASSERT(HI_MPI_VO_EnableVideoLayer(VO_DEV_ID[i]));
			// setup division
			video_Division(VO_DEV_ID[i], s_stVideo.nScrWidth[i], s_stVideo.nScrHeight[i], -1, 0, FALSE);
			// enable vo channel
			for(ii = 0; ii < VIDEO_GetMaxDiv(); ++ii){
				DVR_ASSERT(HI_MPI_VO_SetChnField(VO_DEV_ID[i], ii, VO_FIELD_BOTTOM));
				DVR_ASSERT(HI_MPI_VO_EnableChn(VO_DEV_ID[i], ii));
				if(ii < MAX_CAM_CH){
					video_BindOutput(VO_DEV_ID[i], ii, TRUE);
				}else{
					DVR_ASSERT(HI_MPI_VO_SENDFRAME(VO_DEV_ID[i], ii, s_pstLogoPic));
				}
			}
		}
	}
	s_stVideo.bOutput = TRUE;
}
Example #23
0
static void video_DisplayD1(int nVoDev, int nChn, unsigned char bDisplay)
{
	int i = 0, ii = 0;
	static int s_nDispViDev = -1;
	static int s_nDispViChn = -1;
	VI_CHN_ATTR_S stViChnAttr;
	if(bDisplay){
		for(i = 0; i < VIDEO_GetMaxDiv(); ++i){
			DVR_ASSERT(HI_MPI_VO_ChnHide(nVoDev, i));
		}
	}
	if(bDisplay){
		// unbind last full channel first
		if(!(-1 == s_nDispViDev && -1 == s_nDispViChn)){
			DVR_ASSERT(HI_MPI_VI_UnBindOutput(s_nDispViDev, s_nDispViChn, nVoDev, SPECIAL_D1_CH));
		}
		DVR_ASSERT(HI_MPI_VO_ClearChnBuffer(nVoDev, SPECIAL_D1_CH, HI_TRUE));
		if(nChn < 16){
			int fd = open(VIDEO_DEV, O_RDWR);
			if(fd > 0){
				// set ad configuration
				video_preview_t stPreview = {0};
				stPreview.chn = nChn; // switch to this channel @ ad
				ioctl(fd, VIDEO_DRV_SET_LIVE_CHN, &stPreview);
				close(fd);
				fd = -1;
			}
			// redefine device
			s_nDispViDev = 1;
			s_nDispViChn = 0;
		}else if(nChn < 24){
			// reset field to both not downscale
			if(0 == VIMAP_Get(nChn, &s_nDispViDev, &s_nDispViChn)){
			}
		}else{
			;
		}
		if(s_stVideo.nLossStat & (1<<nChn)){
//			VIDEO_TRACE("Send User Pic");
			DVR_ASSERT(HI_MPI_VO_SENDFRAME(nVoDev, SPECIAL_D1_CH, VIDEO_GetUserPic(nChn)));
		}else{
			DVR_ASSERT(HI_MPI_VI_GetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
			VI_D1_ATTR_CONF(&stViChnAttr);
			DVR_ASSERT(HI_MPI_VI_SetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
			DVR_ASSERT(HI_MPI_VI_BindOutput(s_nDispViDev, s_nDispViChn, nVoDev, SPECIAL_D1_CH));
			usleep(40000);
		}
		DVR_ASSERT(HI_MPI_VO_ChnShow(nVoDev, SPECIAL_D1_CH));
	}else{
		if(!(-1 == s_nDispViDev && -1 == s_nDispViChn)){
			DVR_ASSERT(HI_MPI_VI_GetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
			VI_CIF_ATTR_CONF(&stViChnAttr);
			DVR_ASSERT(HI_MPI_VI_SetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
			DVR_ASSERT(HI_MPI_VI_UnBindOutput(s_nDispViDev, s_nDispViChn, nVoDev, SPECIAL_D1_CH));
			DVR_ASSERT(HI_MPI_VO_ChnHide(nVoDev, SPECIAL_D1_CH));
			if(nVoDev > 0){
				s_nDispViDev = -1;
				s_nDispViChn = -1;
			}
		}
	}
}
Example #24
0
static void video_InputInit()
{
	int i = 0;
	// init sdk
	{
		VI_PUB_ATTR_S stViDevAttr;
		VI_CHN_ATTR_S stViChnAttr;

		// vi0 1-16 ch cif input 1d1
		// vi1 1-16 ch selecting input 1d1
		// vi2 17-20 ch d1 input 4d1
		// vi3 21-24 ch d1 input 4d1

		////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////
		// vi0
		stViDevAttr.enInputMode = VI_MODE_BT656;
		stViDevAttr.enWorkMode = VI_WORK_MODE_1D1;
		stViDevAttr.enViNorm = (VIDEO_IS_PAL() ? VIDEO_ENCODING_MODE_PAL : VIDEO_ENCODING_MODE_NTSC);
        // channel attribute
        stViChnAttr.stCapRect.s32X = 0;
        stViChnAttr.stCapRect.s32Y = 0;
        stViChnAttr.stCapRect.u32Width = VI_CIF_WIDTH;
        stViChnAttr.stCapRect.u32Height = 8 * VI_CIF_HEIGHT + 7 * 2; // half field height combo frame
        stViChnAttr.bChromaResample = HI_FALSE;
        stViChnAttr.enCapSel = VI_CAPSEL_BOTH;
        stViChnAttr.bDownScale = HI_FALSE;
        stViChnAttr.bHighPri = HI_FALSE;
        stViChnAttr.enViPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;

        DVR_ASSERT(HI_MPI_VI_Disable(0));
        DVR_ASSERT(HI_MPI_VI_SetPubAttr(0, &stViDevAttr));
        DVR_ASSERT(HI_MPI_VI_Enable(0));
        DVR_ASSERT(HI_MPI_VI_SetChnAttr(0, 0, &stViChnAttr));
        DVR_ASSERT(HI_MPI_VI_EnableChn(0, 0));
        DVR_ASSERT(HI_MPI_VI_SetSrcFrameRate(0, 0, MAX_CIF_LIVE_FPS));

		////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////
		// vi1
		stViDevAttr.enInputMode = VI_MODE_BT656;
		stViDevAttr.enWorkMode = VI_WORK_MODE_1D1;
		stViDevAttr.enViNorm = (VIDEO_IS_PAL() ? VIDEO_ENCODING_MODE_PAL : VIDEO_ENCODING_MODE_NTSC);
		// channel attribute
		stViChnAttr.stCapRect.u32Width  = 704;
		stViChnAttr.stCapRect.u32Height = VI_CIF_HEIGHT;
		stViChnAttr.stCapRect.s32X = 8;
		stViChnAttr.stCapRect.s32Y = 0;
		stViChnAttr.bChromaResample = HI_FALSE;
		stViChnAttr.enCapSel = VI_CAPSEL_BOTH;
		stViChnAttr.bDownScale = HI_FALSE;
		stViChnAttr.bHighPri = HI_FALSE;
		stViChnAttr.enViPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;

		// interface
		DVR_ASSERT(HI_MPI_VI_Disable(1));
		DVR_ASSERT(HI_MPI_VI_SetPubAttr(1, &stViDevAttr));
		DVR_ASSERT(HI_MPI_VI_Enable(1));
		DVR_ASSERT(HI_MPI_VI_SetChnAttr(1, 0, &stViChnAttr));
		DVR_ASSERT(HI_MPI_VI_EnableChn(1, 0));
		DVR_ASSERT(HI_MPI_VI_SetSrcFrameRate(1, 0, MAX_D1_LIVE_FPS));

		////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////
		// vi2
		stViDevAttr.enInputMode = VI_MODE_BT656;
		stViDevAttr.enWorkMode = VI_WORK_MODE_4D1;
		stViDevAttr.enViNorm = (VIDEO_IS_PAL() ? VIDEO_ENCODING_MODE_PAL : VIDEO_ENCODING_MODE_NTSC);
		// cif input
		stViChnAttr.stCapRect.u32Width = 704;
		stViChnAttr.stCapRect.u32Height = VI_CIF_HEIGHT;
		stViChnAttr.stCapRect.s32X = 8;
		stViChnAttr.stCapRect.s32Y = 0;
		stViChnAttr.bChromaResample = HI_FALSE;
		stViChnAttr.enCapSel = VI_CAPSEL_BOTTOM;
		stViChnAttr.bDownScale = HI_TRUE;
		stViChnAttr.bHighPri = HI_FALSE;
		stViChnAttr.enViPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;

		// interface
		DVR_ASSERT(HI_MPI_VI_Disable(2));
		DVR_ASSERT(HI_MPI_VI_SetPubAttr(2, &stViDevAttr));
		DVR_ASSERT(HI_MPI_VI_Enable(2));
		for(i = 0; i < 4; ++i){
			DVR_ASSERT(HI_MPI_VI_SetChnAttr(2, i, &stViChnAttr));
			DVR_ASSERT(HI_MPI_VI_EnableChn(2, i));
			DVR_ASSERT(HI_MPI_VI_SetSrcFrameRate(2, i, MAX_CIF_LIVE_FPS));
		}

		////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////
		// vi3
		stViDevAttr.enInputMode = VI_MODE_BT656;
		stViDevAttr.enWorkMode = VI_WORK_MODE_4D1;
		stViDevAttr.enViNorm = (VIDEO_IS_PAL() ? VIDEO_ENCODING_MODE_PAL : VIDEO_ENCODING_MODE_NTSC);
		// cif input
		stViChnAttr.stCapRect.u32Width = 704;
		stViChnAttr.stCapRect.u32Height = VI_CIF_HEIGHT;
		stViChnAttr.stCapRect.s32X = 8;
		stViChnAttr.stCapRect.s32Y = 0;
		stViChnAttr.bChromaResample = HI_FALSE;
		stViChnAttr.enCapSel = VI_CAPSEL_BOTTOM;
		stViChnAttr.bDownScale = HI_TRUE;
		stViChnAttr.bHighPri = HI_FALSE;
		stViChnAttr.enViPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;

		// interface
		DVR_ASSERT(HI_MPI_VI_Disable(3));
		DVR_ASSERT(HI_MPI_VI_SetPubAttr(3, &stViDevAttr));
		DVR_ASSERT(HI_MPI_VI_Enable(3));
		for(i = 0; i < 4; ++i){
			DVR_ASSERT(HI_MPI_VI_SetChnAttr(3, i, &stViChnAttr));
			DVR_ASSERT(HI_MPI_VI_EnableChn(3, i));
			DVR_ASSERT(HI_MPI_VI_SetSrcFrameRate(3, i, MAX_CIF_LIVE_FPS));
		}
	}
}
Example #25
0
static void video_OutputInit()
{
	int i = 0, ii = 0;
	int const nMaxFps = MAX_D1_CNT ? MAX_D1_LIVE_FPS : MAX_CIF_LIVE_FPS;

	VO_VIDEO_LAYER_ATTR_S stVgaLayerAttr;
	VO_VIDEO_LAYER_ATTR_S stCvbsLayerAttr;

	// vga output
	{
		VGA_RESOLUTION const enRes = g_pstSysEnv->GetVGAResolution(g_pstSysEnv);

		stVgaLayerAttr.stImageSize.u32Width  = VO_ORIGIN_WIDTH;
		stVgaLayerAttr.stImageSize.u32Height = VO_ORIGIN_HEIGHT;
		stVgaLayerAttr.stDispRect.s32X = 0;
		stVgaLayerAttr.stDispRect.s32Y = 0;
		switch(enRes) {
		case VGA_800x600:
			stVgaLayerAttr.stDispRect.u32Width  = 800;
			stVgaLayerAttr.stDispRect.u32Height = 600;
			break;
		default:
		case VGA_1024x768:
			stVgaLayerAttr.stDispRect.u32Width  = 1024;
			stVgaLayerAttr.stDispRect.u32Height = 768;
			break;
		case VGA_1280x1024:
			stVgaLayerAttr.stDispRect.u32Width  = 1280;
			stVgaLayerAttr.stDispRect.u32Height = 1024;
			break;
		case VGA_1366x768:
			stVgaLayerAttr.stDispRect.u32Width  = 1366;
			stVgaLayerAttr.stDispRect.u32Height = 768;
			break;
		case VGA_1440x900:
			stVgaLayerAttr.stDispRect.u32Width  = 1440;
			stVgaLayerAttr.stDispRect.u32Height = 900;
			break;
		}

		stVgaLayerAttr.u32DispFrmRt = nMaxFps;
		stVgaLayerAttr.enPixFormat  = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
		stVgaLayerAttr.s32PiPChn    = VO_DEFAULT_CHN;
	}
	// cvbs
	{
		stCvbsLayerAttr.stImageSize.u32Width  = VO_ORIGIN_WIDTH;
		stCvbsLayerAttr.stImageSize.u32Height = VO_ORIGIN_HEIGHT;
		stCvbsLayerAttr.stDispRect.s32X       = 0;
		stCvbsLayerAttr.stDispRect.s32Y       = 0;
		stCvbsLayerAttr.stDispRect.u32Width   = VO_ORIGIN_WIDTH;
		stCvbsLayerAttr.stDispRect.u32Height  = VO_ORIGIN_HEIGHT;
		stCvbsLayerAttr.u32DispFrmRt          = nMaxFps;
		stCvbsLayerAttr.enPixFormat           = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
		stCvbsLayerAttr.s32PiPChn             = VO_DEFAULT_CHN;
	}
	{
		// configuration active
		const VO_VIDEO_LAYER_ATTR_S astVideoLayerAttr[] = {stVgaLayerAttr, stCvbsLayerAttr};

        video_ScreenInit();

		for(i = 0; i < sizeof(VO_DEV_ID) / sizeof(VO_DEV_ID[0]); ++i){
			//DVR_ASSERT(HI_MPI_VO_SetDispBufLen(nDev, MAX_CAM_CH));
			DVR_ASSERT(HI_MPI_VO_SetVideoLayerAttr(VO_DEV_ID[i], &astVideoLayerAttr[i]));
			DVR_ASSERT(HI_MPI_VO_EnableVideoLayer(VO_DEV_ID[i]));
			// setup division
			video_Division(VO_DEV_ID[i], s_stVideo.nScrWidth[i], s_stVideo.nScrHeight[i], VIDEO_GetMaxDiv(), 0, FALSE);

			// 1 - 16 digital zoom
			// 17 - 20 bind directly
			// 21 - 24 bind directly
			VO_DISPLAY_FIELD_E enDisplayField;
			// enable vo channel
			for(ii = 0; ii < VIDEO_GetMaxDiv() + 1; ++ii){
				if(ii < 16){
					// for vi0 1-16
					// digital zoom
					VO_ZOOM_ATTR_S stZoomAttr;
					memset(&stZoomAttr, 0, sizeof(stZoomAttr));
					stZoomAttr.enField = VIDEO_FIELD_FRAME;
					stZoomAttr.stZoomRect.u32Width = VI_CIF_WIDTH;
					stZoomAttr.stZoomRect.u32Height = VI_CIF_HEIGHT;
					stZoomAttr.stZoomRect.s32X = 0;
					stZoomAttr.stZoomRect.s32Y = (ii % 8) * (stZoomAttr.stZoomRect.u32Height + 2);
					VIDEO_TRACE("ch=%d zoom [%d,%d,%d,%d]", ii, stZoomAttr.stZoomRect.s32X, stZoomAttr.stZoomRect.s32Y, stZoomAttr.stZoomRect.u32Width, stZoomAttr.stZoomRect.u32Height);
					DVR_ASSERT(HI_MPI_VO_SetZoomInWindow(VO_DEV_ID[i], ii, &stZoomAttr));
					enDisplayField = (ii >= 8) ? VO_FIELD_TOP : VO_FIELD_BOTTOM;
				}else if(ii < 20){
					// for vi2 ch1-4
					enDisplayField = VO_FIELD_BOTTOM;
				}else if(ii < 24){
					// for vi3 ch1-4
					enDisplayField = VO_FIELD_BOTTOM;
				}else if(24 == ii){
					enDisplayField = VO_FIELD_BOTH;
				}else if(25 == ii){
					// for ch1-16 d1 live
					enDisplayField = VO_FIELD_BOTH;
				}
				DVR_ASSERT(HI_MPI_VO_SetChnField(VO_DEV_ID[i], ii, enDisplayField));
				DVR_ASSERT(HI_MPI_VO_EnableChn(VO_DEV_ID[i], ii));
				if(ii < MAX_CAM_CH){
					video_BindOutput(VO_DEV_ID[i], ii, TRUE);
				}else if(ii < SPECIAL_D1_CH){
					DVR_ASSERT(HI_MPI_VO_SENDFRAME(VO_DEV_ID[i], ii, s_pstLogoPic));
				}
			}
		}
	}
	s_stVideo.bOutput = TRUE;
}
Example #26
0
static void video_InputInit()
{
//	int i = 0;
	// init sdk
	{
		VI_PUB_ATTR_S stViDevAttr;
		VI_CHN_ATTR_S stViChnAttr;

		// vi0 1-16 ch cif input 1d1
		// vi2 1-16 ch d1 input mutex d1 live
		////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////
		// vi0
		stViDevAttr.enInputMode = VI_MODE_BT656;
		stViDevAttr.enWorkMode = VI_WORK_MODE_1D1;
		stViDevAttr.enViNorm = (VIDEO_IS_PAL() ? VIDEO_ENCODING_MODE_PAL : VIDEO_ENCODING_MODE_NTSC);
		// channel attribute
		stViChnAttr.stCapRect.s32X = 0;
		stViChnAttr.stCapRect.s32Y = 0;
		stViChnAttr.stCapRect.u32Width = VI_CIF_WIDTH;
		stViChnAttr.stCapRect.u32Height = 8 * VI_CIF_HEIGHT + 7 * 2; // half field height combo frame
		stViChnAttr.bChromaResample = HI_FALSE;
		stViChnAttr.enCapSel = VI_CAPSEL_BOTH;
		stViChnAttr.bDownScale = HI_FALSE;
		stViChnAttr.bHighPri = HI_FALSE;
		stViChnAttr.enViPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;

		DVR_ASSERT(HI_MPI_VI_Disable(0));
		DVR_ASSERT(HI_MPI_VI_SetPubAttr(0, &stViDevAttr));
		DVR_ASSERT(HI_MPI_VI_Enable(0));
		DVR_ASSERT(HI_MPI_VI_SetChnAttr(0, 0, &stViChnAttr));
		DVR_ASSERT(HI_MPI_VI_EnableChn(0, 0));
		DVR_ASSERT(HI_MPI_VI_SetSrcFrameRate(0, 0, MAX_CIF_LIVE_FPS));
		DVR_ASSERT(HI_MPI_VI_SetFrameRate(0, 0, MAX_CIF_LIVE_FPS));

		////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////
		// vi2 must be d1
		stViChnAttr.enCapSel = VI_CAPSEL_BOTH;
		stViChnAttr.bDownScale = HI_FALSE;
		stViChnAttr.stCapRect.s32Y = 0;
		stViChnAttr.stCapRect.u32Height = VIDEO_IS_PAL() ? 288 : 240;
		stViChnAttr.bChromaResample = HI_FALSE;
		stViChnAttr.bHighPri = HI_FALSE;
		VI_CIF_ATTR_CONF(&stViChnAttr);

		// vi2
		DVR_ASSERT(HI_MPI_VI_Disable(2));
		DVR_ASSERT(HI_MPI_VI_SetPubAttr(2, &stViDevAttr));
		DVR_ASSERT(HI_MPI_VI_Enable(2));
		DVR_ASSERT(HI_MPI_VI_SetChnAttr(2, 0, &stViChnAttr));
		DVR_ASSERT(HI_MPI_VI_EnableChn(2, 0));
		DVR_ASSERT(HI_MPI_VI_SetSrcFrameRate(2, 0, MAX_D1_LIVE_FPS));
		DVR_ASSERT(HI_MPI_VI_SetFrameRate(2, 0, MAX_D1_LIVE_FPS));
	}
}
Example #27
0
static void video_Division(int nVoDev, int nScrWidth, int nScrHeight, int nDiv, int nPage, unsigned char bLive)
{
	int i = 0;
	int nGrid = 1;
	VO_CHN_ATTR_S stVoChnAttr;
	int nLocate = 0;
	int nChWidth = 0;
	int nChHeight = 0;
	int nOffsetX = (VO_ORIGIN_WIDTH - nScrWidth) / 2;
	int nOffsetY = (VO_ORIGIN_HEIGHT - nScrHeight) / 2;
	int nBlankW = 0;
	int nBlankH = 0;
	int nBeginCh = nDiv * nPage;
	int nEndCh = MAX_CAM_CH >= (nBeginCh + nDiv) ? MAX_CAM_CH : (nBeginCh + nDiv);

//	if(!bD1 && 1 == nDiv){
//		// full screen is ready all the time at this solution
//		return;
//	}

	switch(nDiv)
	{
	case 1: nGrid = 1; break;
	case 4: nGrid = 2; break;
	case 9: nGrid = 3; break;
	case 16: nGrid = 4; break;
	case 25: nGrid = 5; break;
	default:
		return;
	}

	if(nVoDev == VO_CVBS_DEVICE) {
		nOffsetX = s_stVideo.ScrnEdges[1].nEdgeX;
		nOffsetY = s_stVideo.ScrnEdges[1].nEdgeY;

		nScrWidth  = s_stVideo.ScrnEdges[1].nEdgeW;
		nScrHeight = s_stVideo.ScrnEdges[1].nEdgeH;
	}

	// full d1 for live only
	stVoChnAttr.stRect.s32X = nOffsetX;
	stVoChnAttr.stRect.s32Y = nOffsetY;
	stVoChnAttr.stRect.u32Width = nScrWidth;
	stVoChnAttr.stRect.u32Height = nScrHeight;
	stVoChnAttr.u32Priority = 1;
	stVoChnAttr.bZoomEnable = HI_TRUE;
	stVoChnAttr.bDeflicker = HI_FALSE;
	DVR_ASSERT(HI_MPI_VO_SetChnAttr(nVoDev, MAX_CAM_CH, &stVoChnAttr));
	if(1 == nDiv && bLive){
		DVR_ASSERT(HI_MPI_VO_ChnShow(nVoDev, MAX_CAM_CH));
	}else{
		DVR_ASSERT(HI_MPI_VO_ChnHide(nVoDev, MAX_CAM_CH));
	}

	nChWidth = nScrWidth / nGrid;
	nChHeight = nScrHeight / nGrid;
	nChWidth &= ~(2-1); // 2 alignment
	nChHeight &= ~(2-1); // 2 alignment
	nBlankW = nScrWidth % nChWidth;
	nBlankH = nScrHeight % nChHeight;

	for(i = 0, nLocate = 0; i < nEndCh; ++i){
		int const nChn = i % MAX_CAM_CH;
		unsigned char bShow = FALSE;

		if(i >= nBeginCh && i < (nBeginCh + nDiv) && (nDiv > 1 || !bLive)){
			// need to show
			bShow = TRUE;
			// live not full division mode
			// playback all the mode
			stVoChnAttr.stRect.s32X = (nOffsetX + (((nLocate % nDiv) % nGrid) * nChWidth)) & ~(2-1); // 2 alignment
			stVoChnAttr.stRect.s32Y = (nOffsetY + (((nLocate % nDiv) / nGrid) * nChHeight)) & ~(2-1); // 2 alignment
			if((nGrid - 1) == (nLocate % nGrid)){
				// the right side
				stVoChnAttr.stRect.u32Width = nChWidth + nBlankW;
			}else{
				// for osd bar
				stVoChnAttr.stRect.u32Width = nChWidth - 2;
			}
			if((nGrid - 1) == (nLocate / nGrid)){
				// the bottom
				stVoChnAttr.stRect.u32Height = nChHeight + nBlankH;
			}else{
				// for osd bar
				stVoChnAttr.stRect.u32Height = nChHeight - 2;
			}
			stVoChnAttr.u32Priority = 0;
			stVoChnAttr.bZoomEnable = HI_TRUE;
			stVoChnAttr.bDeflicker = (0 == nVoDev) ? HI_FALSE : HI_TRUE;
			++nLocate;
		}else{
			bShow = FALSE;
			stVoChnAttr.stRect.s32X = 0;
			stVoChnAttr.stRect.s32Y = 0;
			stVoChnAttr.stRect.u32Width = VI_CIF_WIDTH;
			stVoChnAttr.stRect.u32Height = VI_CIF_HEIGHT;
			stVoChnAttr.u32Priority = 0;
			stVoChnAttr.bZoomEnable = HI_FALSE;
			stVoChnAttr.bDeflicker = HI_FALSE;
		}
//		VIDEO_TRACE("vo(%d,%d) (x,y)=%d,%d, [w,h]=%d,%d", nVoDev, i, stVoChnAttr.stRect.s32X, stVoChnAttr.stRect.s32Y, stVoChnAttr.stRect.u32Width, stVoChnAttr.stRect.u32Height);
		DVR_ASSERT(HI_MPI_VO_SetChnAttr(nVoDev, nChn, &stVoChnAttr));
		if(bShow){
			DVR_ASSERT(HI_MPI_VO_ChnShow(nVoDev, nChn));
		}else{
			DVR_ASSERT(HI_MPI_VO_ChnHide(nVoDev, nChn));
		}
	}
}
Example #28
0
static void video_DisplayD1(int nVoDev, int nChn, unsigned char bDisplay)
{
	static int s_nDispViDev = -1;
	static int s_nDispViChn = -1;
	VI_CHN_ATTR_S stViChnAttr;
	if(bDisplay){
		int i = 0;
		for(i = 0; i < MAX_CAM_CH; ++i){
			DVR_ASSERT(HI_MPI_VO_ChnHide(nVoDev, i));
		}
	}
	if(bDisplay){
		static int s_nLastFull = -1; // prevent to bind twice
		if(-1 == s_nLastFull || nChn != s_nLastFull){
			int fd = open(VIDEO_DEV, O_RDWR);
			VIDEO_TRACE("%s fd = %d", __func__, fd);
			if(fd > 0){
				// set ad configuration
				video_preview_t stPreview = {0};
				stPreview.chn = nChn; // switch to this channel @ ad
				ioctl(fd, VIDEO_DRV_SET_LIVE_CHN, &stPreview);
				close(fd);
				fd = -1;
			}
		}
		// unbind last full channel first
		if(!(-1 == s_nDispViDev && -1 == s_nDispViChn)){
			DVR_ASSERT(HI_MPI_VI_UnBindOutput(s_nDispViDev, s_nDispViChn, nVoDev, MAX_CAM_CH));
		}
		// bind to d1 special live connect
		s_nDispViDev = 2;
		s_nDispViChn = 0;
		DVR_ASSERT(HI_MPI_VO_ClearChnBuffer(nVoDev, MAX_CAM_CH, HI_TRUE));
		if(s_stVideo.nLossStat & (1<<nChn)){
			DVR_ASSERT(HI_MPI_VO_SENDFRAME(nVoDev, MAX_CAM_CH, VIDEO_GetUserPic(nChn)));
		}else{
			DVR_ASSERT(HI_MPI_VI_GetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
			VI_D1_ATTR_CONF(&stViChnAttr);
			DVR_ASSERT(HI_MPI_VI_SetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
			DVR_ASSERT(HI_MPI_VI_BindOutput(s_nDispViDev, s_nDispViChn, nVoDev, MAX_CAM_CH));
		}
		usleep(40000);
		DVR_ASSERT(HI_MPI_VO_ChnShow(nVoDev, MAX_CAM_CH));
		video_CheckDigitalZoomD1(nChn);
	}else{
		if(!(-1 == s_nDispViDev && -1 == s_nDispViChn)){
			DVR_ASSERT(HI_MPI_VO_ChnHide(nVoDev, MAX_CAM_CH));
//			printf("unbind output (%d,%d) to (%d,%d)", s_nDispViDev, s_nDispViChn, nVoDev, MAX_CAM_CH);
			DVR_ASSERT(HI_MPI_VI_UnBindOutput(s_nDispViDev, s_nDispViChn, nVoDev, MAX_CAM_CH));
			DVR_ASSERT(HI_MPI_VI_GetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
			VI_CIF_ATTR_CONF(&stViChnAttr);
			DVR_ASSERT(HI_MPI_VI_SetChnAttr(s_nDispViDev, s_nDispViChn, &stViChnAttr));
			s_nDispViDev = -1;
			s_nDispViChn = -1;
		}
	}
}
Example #29
0
static int video_DigitalZoom(int nChn, int nRatioX, int nRatioY, int nRatioW, int nRatioH, unsigned char bLive)
{
	int i, ii;
	VO_ZOOM_ATTR_S stBaseZoom;

	if(bLive){
		int x, y, w, h;
		video_GetZoom(nChn, &stBaseZoom, NULL);
		x = stBaseZoom.stZoomRect.s32X;
		y = stBaseZoom.stZoomRect.s32Y;
		w = stBaseZoom.stZoomRect.u32Width;
		h = stBaseZoom.stZoomRect.u32Height;

		if(!s_stVideo.abDigitalZoom[nChn]){
			if(0 == nRatioX && 0 == nRatioY && 1000 == nRatioW && 1000 == nRatioH){
				// needless to zoom
				return 0;
			}
			s_stVideo.astDigitalZoomRatio[nChn].nRatioX = nRatioX;
			s_stVideo.astDigitalZoomRatio[nChn].nRatioY = nRatioY;
			s_stVideo.astDigitalZoomRatio[nChn].nRatioW = nRatioW;
			s_stVideo.astDigitalZoomRatio[nChn].nRatioH = nRatioH;
			stBaseZoom.stZoomRect.s32X = x + (nRatioX * w / 1000);
			stBaseZoom.stZoomRect.s32Y = y + (nRatioY * h / 1000);
			stBaseZoom.stZoomRect.u32Width = nRatioW * w / 1000;
			stBaseZoom.stZoomRect.u32Height = nRatioH * h / 1000;
			stBaseZoom.stZoomRect.s32X &= ~0xf; // aligned 16 pixels
			stBaseZoom.stZoomRect.s32Y &= ~0xf; // aligned 16 pixels
			stBaseZoom.stZoomRect.u32Width &= ~1;
			stBaseZoom.stZoomRect.u32Height &= ~1;
			VIDEO_TRACE("ch=%d zoom [%d,%d,%d,%d]", ii, stBaseZoom.stZoomRect.s32X,stBaseZoom.stZoomRect.s32Y, stBaseZoom.stZoomRect.u32Width, stBaseZoom.stZoomRect.u32Height);
			for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
				DVR_ASSERT(HI_MPI_VO_SetZoomInWindow(VO_DEV_ID[i], nChn, &stBaseZoom));
			}
			if(1 == s_stVideo.nCurDivi && nChn == s_stVideo.nCurPage){
				video_CheckDigitalZoomD1(nChn);
			}
			s_stVideo.abDigitalZoom[nChn] = TRUE;
		}else{
			// all zeroes is recover
			memset(&s_stVideo.astDigitalZoomRatio[nChn], 0, sizeof(s_stVideo.astDigitalZoomRatio[nChn]));
			s_stVideo.abDigitalZoom[nChn] = FALSE;
			for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
				DVR_ASSERT(HI_MPI_VO_SetZoomInWindow(VO_DEV_ID[i], nChn, &stBaseZoom));
				video_CheckDigitalZoomD1(nChn);
			}
		}
	}else{
//		return 0;
		VO_ZOOM_RATIO_S stZoomRatio = {0};
		if(!s_stVideo.abDigitalZoom[nChn]){
			if(0 == nRatioX && 0 == nRatioY && 1000 == nRatioW && 1000 == nRatioH){
				// needless to zoom
				return 0;
			}
			s_stVideo.astDigitalZoomRatio[nChn].nRatioX = stZoomRatio.u32XRatio = nRatioX;
			s_stVideo.astDigitalZoomRatio[nChn].nRatioY = stZoomRatio.u32YRatio = nRatioY;
			s_stVideo.astDigitalZoomRatio[nChn].nRatioW = stZoomRatio.u32WRatio = nRatioW;
			s_stVideo.astDigitalZoomRatio[nChn].nRatioH = stZoomRatio.u32HRatio = nRatioH;
			for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
				DVR_ASSERT(HI_MPI_VO_SetZoomInRatio(VO_DEV_ID[i], nChn, &stZoomRatio));
			}
			s_stVideo.abDigitalZoom[nChn] = TRUE;
		}else{
			// all zeroes is recover
			memset(&stZoomRatio, 0, sizeof(stZoomRatio));
			for(i = 0; i < sizeof(VO_DEV_ID)/sizeof(VO_DEV_ID[0]); ++i){
				DVR_ASSERT(HI_MPI_VO_SetZoomInRatio(VO_DEV_ID[i], nChn, &stZoomRatio));
			}
			memset(&s_stVideo.astDigitalZoomRatio[nChn], 0, sizeof(s_stVideo.astDigitalZoomRatio[nChn]));
			s_stVideo.abDigitalZoom[nChn] = FALSE;
		}
	}
	return 0;
}