/****************************************************************************** * 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; }
HI_S32 SAMPLE_COMM_VI_StopIsp(SAMPLE_VI_CONFIG_S* pstViConfig) { VI_DEV ViDev; VI_CHN ViChn; HI_S32 i; HI_S32 s32Ret; HI_U32 u32DevNum = 1; HI_U32 u32ChnNum = 1; if (!pstViConfig) { SAMPLE_PRT("%s: null ptr\n", __FUNCTION__); return HI_FAILURE; } /*** Stop VI Chn ***/ for (i = 0; i < u32ChnNum; i++) { /* Stop vi phy-chn */ ViChn = i; s32Ret = HI_MPI_VI_DisableChn(ViChn); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_DisableChn failed with %#x\n", s32Ret); return HI_FAILURE; } } /*** Stop VI Dev ***/ for (i = 0; i < u32DevNum; i++) { ViDev = i; s32Ret = HI_MPI_VI_DisableDev(ViDev); if (HI_SUCCESS != s32Ret) { SAMPLE_PRT("HI_MPI_VI_DisableDev failed with %#x\n", s32Ret); return HI_FAILURE; } } SAMPLE_COMM_ISP_Stop(); return HI_SUCCESS; }
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; }