예제 #1
0
/******************************************************************************
* funciton : change between linear and wdr mode
******************************************************************************/
HI_S32 SAMPLE_COMM_ISP_ChangeSensorMode(HI_U8 u8Mode)
{
    HI_S32 s32Ret;
#ifdef ISP_V1    
    SAMPLE_COMM_ISP_Stop();
    
    s32Ret = sensor_mode_set(u8Mode);
    if (s32Ret != HI_SUCCESS)
    {
        printf("%s: sensor_mode_set failed with %#x!\n", 
               __FUNCTION__, s32Ret);
        return s32Ret;
    }
    s32Ret = sensor_register_callback();
    if (s32Ret != HI_SUCCESS)
    {
        printf("%s: sensor_register_callback failed with %#x!\n", 
               __FUNCTION__, s32Ret);
        return s32Ret;
    }
    s32Ret = SAMPLE_COMM_ISP_Run();
    if (s32Ret != HI_SUCCESS)
    {
        printf("%s: SAMPLE_COMM_ISP_Run failed with %#x!\n", 
               __FUNCTION__, s32Ret);
        return s32Ret;
    }
#endif
#ifdef ISP_V2
    ISP_WDR_ATTR_S stWdrAttr;
    stWdrAttr.enWdrMode = u8Mode;
    s32Ret = HI_MPI_ISP_SetWdrAttr(&stWdrAttr);
    if (s32Ret != HI_SUCCESS)
    {
        printf("%s: HI_MPI_ISP_SetWdrAttr failed with %#x!\n", 
               __FUNCTION__, s32Ret);
        return s32Ret;
    }
#endif
    return HI_SUCCESS;
}
예제 #2
0
HI_S32 SAMPLE_COMM_VI_StartIsp(SAMPLE_VI_CONFIG_S* pstViConfig) {
	HI_S32 i, s32Ret = HI_SUCCESS;
	VI_DEV ViDev;
	VI_CHN ViChn;
	HI_U32 u32DevNum = 1;
	HI_U32 u32ChnNum = 1;
	SIZE_S stTargetSize;
	RECT_S stCapRect;
	SAMPLE_VI_MODE_E enViMode;
	ROTATE_E enRotate;
	SAMPLE_VI_CHN_SET_E enViChnSet;

	if (!pstViConfig) {
		SAMPLE_PRT("%s: null ptr\n", __FUNCTION__);
		return HI_FAILURE;
	}
	enViMode = pstViConfig->enViMode;
	enViChnSet = pstViConfig->enViChnSet;
	enRotate = pstViConfig->enRotate;

	/******************************************
	 step 1: configure sensor.
	 note: you can jump over this step, if you do not use Hi3518 interal isp. 
	 ******************************************/
	s32Ret = SAMPLE_COMM_ISP_SensorInit();
	if (HI_SUCCESS != s32Ret) {
		SAMPLE_PRT("%s: Sensor init failed!\n", __FUNCTION__);
		return HI_FAILURE;
	}

	/******************************************************
	 step 2 : config & start vicap dev
	 ******************************************************/
	for (i = 0; i < u32DevNum; i++) {
		ViDev = i;
		s32Ret = SAMPLE_COMM_VI_StartDev(ViDev, enViMode);
		if (HI_SUCCESS != s32Ret) {
			SAMPLE_PRT("%s: start vi dev[%d] failed!\n", __FUNCTION__, i);
			return HI_FAILURE;
		}
	}

	/******************************************
	 step 3: configure & run isp thread 
	 note: you can jump over this step, if you do not use Hi3518 interal isp. 
	 note: isp run must at this step -- after vi dev enable, before vi chn enable 
	 ******************************************/
	s32Ret = SAMPLE_COMM_ISP_Run();
	if (HI_SUCCESS != s32Ret) {
		SAMPLE_PRT("%s: ISP init failed!\n", __FUNCTION__);
		/* disable videv */
		return HI_FAILURE;
	}
	/******************************************************
	 * Step 4: config & start vicap chn (max 1) 
	 ******************************************************/
	for (i = 0; i < u32ChnNum; i++) {
		ViChn = i;

		stCapRect.s32X = 0;
		stCapRect.s32Y = 0;
		switch (enViMode) {
		case APTINA_9M034_DC_720P_30FPS:
		case APTINA_AR0130_DC_720P_30FPS:
		case SONY_ICX692_DC_720P_30FPS:
		case SONY_IMX104_DC_720P_30FPS:
		case OMNI_OV9712_DC_720P_30FPS:
			stCapRect.u32Width = 1280;
			stCapRect.u32Height = 720;
			break;

		case SONY_IMX122_DC_1080P_30FPS:
			stCapRect.u32Width = 1920;
			stCapRect.u32Height = 1080;
			break;

		default:
			stCapRect.u32Width = 1280;
			stCapRect.u32Height = 720;
			break;
		}

		stTargetSize.u32Width = stCapRect.u32Width;
		stTargetSize.u32Height = stCapRect.u32Height;

		s32Ret = SAMPLE_COMM_VI_StartChn(ViChn, &stCapRect, &stTargetSize,
				pstViConfig);
		if (HI_SUCCESS != s32Ret) {
			SAMPLE_COMM_ISP_Stop();
			return HI_FAILURE;
		}
	}

	return s32Ret;
}