/****************************************************************************** * funciton : Sensor init * note : different sensor corresponding different lib. So, you can change SENSOR_TYPE in Makefile.para, instead of modify program code. ******************************************************************************/ HI_S32 SAMPLE_COMM_ISP_SensorInit(void) { HI_S32 s32Ret; #ifdef ISP_V1 /* 1. sensor init */ sensor_init(); /* 0: linear mode, 1: WDR mode */ sensor_mode_set(0); #endif /* 2. sensor register callback */ s32Ret = sensor_register_callback(); if (s32Ret != HI_SUCCESS) { printf("%s: sensor_register_callback failed with %#x!\n", \ __FUNCTION__, s32Ret); return s32Ret; } return HI_SUCCESS; }
/****************************************************************************** * 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; }
/****************************************************************************** * funciton : ISP init ******************************************************************************/ static HI_S32 s32IspInit(VI_ATTR_S * pstViAttr) { ISP_DEV IspDev = 0; HI_S32 s32Ret; ALG_LIB_S stLib; ISP_PUB_ATTR_S *pstPubAttr; ISP_WDR_MODE_S stWdrMode; if (NULL == pstViAttr) { printf("Func %s() Line[%d], parament is null\n", __FUNCTION__, __LINE__); return HI_FAILURE; } IspDev = pstViAttr->IspDev; pstPubAttr = pstViAttr->pstIspPubAttr; stWdrMode.enWDRMode = pstViAttr->enWDRMode; /* 1. sensor register callback */ s32Ret = sensor_register_callback(); if (s32Ret != HI_SUCCESS) { printf("%s: sensor_register_callback failed with %#x!\n", \ __FUNCTION__, s32Ret); return s32Ret; } /* 2. register hisi ae lib */ stLib.s32Id = 0; strcpy(stLib.acLibName, HI_AE_LIB_NAME); s32Ret = HI_MPI_AE_Register(IspDev, &stLib); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_AE_Register failed!\n", __FUNCTION__); return s32Ret; } /* 3. register hisi awb lib */ stLib.s32Id = 0; strcpy(stLib.acLibName, HI_AWB_LIB_NAME); s32Ret = HI_MPI_AWB_Register(IspDev, &stLib); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_AWB_Register failed!\n", __FUNCTION__); return s32Ret; } /* 4. register hisi af lib */ stLib.s32Id = 0; strcpy(stLib.acLibName, HI_AF_LIB_NAME); s32Ret = HI_MPI_AF_Register(IspDev, &stLib); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_AF_Register failed!\n", __FUNCTION__); return s32Ret; } /* 5. isp mem init */ s32Ret = HI_MPI_ISP_MemInit(IspDev); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_ISP_Init failed!\n", __FUNCTION__); return s32Ret; } /* 6. isp set WDR mode */ s32Ret = HI_MPI_ISP_SetWDRMode(IspDev, &stWdrMode); if (HI_SUCCESS != s32Ret) { printf("start ISP WDR failed!\n"); return s32Ret; } /* 7. isp set pub attributes */ s32Ret = HI_MPI_ISP_SetPubAttr(IspDev, pstPubAttr); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_ISP_SetPubAttr failed with %#x!\n", __FUNCTION__, s32Ret); return s32Ret; } /* 8. isp init */ s32Ret = HI_MPI_ISP_Init(IspDev); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_ISP_Init failed!\n", __FUNCTION__); return s32Ret; } gbIspInited = HI_TRUE; /*9. isp run*/ if (0 != pthread_create(&gs_IspPid, NULL, (void* (*)(void*))vdIspRun, NULL)) { printf("%s: create isp running thread failed!\n", __FUNCTION__); return HI_FAILURE; } usleep(1000); return HI_SUCCESS; }
/****************************************************************************** * funciton : ISP init ******************************************************************************/ HI_S32 SAMPLE_COMM_ISP_Init(WDR_MODE_E enWDRMode) { ISP_DEV IspDev = 0; HI_S32 s32Ret; ISP_PUB_ATTR_S stPubAttr; ALG_LIB_S stLib; #if 0 /* 0. set cmos iniparser file path */ s32Ret = sensor_set_inifile_path("configs/"); if (s32Ret != HI_SUCCESS) { printf("%s: set cmos iniparser file path failed with %#x!\n", \ __FUNCTION__, s32Ret); return s32Ret; } #endif /* 1. sensor register callback */ s32Ret = sensor_register_callback(); if (s32Ret != HI_SUCCESS) { printf("%s: sensor_register_callback failed with %#x!\n", \ __FUNCTION__, s32Ret); return s32Ret; } /* 2. register hisi ae lib */ stLib.s32Id = 0; strcpy(stLib.acLibName, HI_AE_LIB_NAME); s32Ret = HI_MPI_AE_Register(IspDev, &stLib); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_AE_Register failed!\n", __FUNCTION__); return s32Ret; } /* 3. register hisi awb lib */ stLib.s32Id = 0; strcpy(stLib.acLibName, HI_AWB_LIB_NAME); s32Ret = HI_MPI_AWB_Register(IspDev, &stLib); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_AWB_Register failed!\n", __FUNCTION__); return s32Ret; } /* 4. register hisi af lib */ stLib.s32Id = 0; strcpy(stLib.acLibName, HI_AF_LIB_NAME); s32Ret = HI_MPI_AF_Register(IspDev, &stLib); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_AF_Register failed!\n", __FUNCTION__); return s32Ret; } /* 5. isp mem init */ s32Ret = HI_MPI_ISP_MemInit(IspDev); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_ISP_Init failed!\n", __FUNCTION__); return s32Ret; } /* 6. isp set WDR mode */ ISP_WDR_MODE_S stWdrMode; stWdrMode.enWDRMode = enWDRMode; s32Ret = HI_MPI_ISP_SetWDRMode(0, &stWdrMode); if (HI_SUCCESS != s32Ret) { printf("start ISP WDR failed!\n"); return s32Ret; } /* 7. isp set pub attributes */ /* note : different sensor, different ISP_PUB_ATTR_S define. if the sensor you used is different, you can change ISP_PUB_ATTR_S definition */ switch(SENSOR_TYPE) { case APTINA_9M034_DC_720P_30FPS: case APTINA_AR0130_DC_720P_30FPS: stPubAttr.enBayer = BAYER_GRBG; stPubAttr.f32FrameRate = 30; stPubAttr.stWndRect.s32X = 0; stPubAttr.stWndRect.s32Y = 0; stPubAttr.stWndRect.u32Width = 1280; stPubAttr.stWndRect.u32Height = 720; break; case SONY_IMX122_DC_1080P_30FPS: stPubAttr.enBayer = BAYER_RGGB; stPubAttr.f32FrameRate = 30; stPubAttr.stWndRect.s32X = 200; stPubAttr.stWndRect.s32Y = 20; stPubAttr.stWndRect.u32Width = 1920; stPubAttr.stWndRect.u32Height = 1080; break; case SONY_IMX122_DC_720P_30FPS: stPubAttr.enBayer = BAYER_RGGB; stPubAttr.f32FrameRate = 30; stPubAttr.stWndRect.s32X = 200; stPubAttr.stWndRect.s32Y = 20; stPubAttr.stWndRect.u32Width = 1280; stPubAttr.stWndRect.u32Height = 720; break; case APTINA_AR0230_HISPI_1080P_30FPS: stPubAttr.enBayer = BAYER_GRBG; stPubAttr.f32FrameRate = 30; stPubAttr.stWndRect.s32X = 0; stPubAttr.stWndRect.s32Y = 0; stPubAttr.stWndRect.u32Width = 1920; stPubAttr.stWndRect.u32Height = 1080; break; case PANASONIC_MN34222_MIPI_1080P_30FPS: stPubAttr.enBayer = BAYER_GRBG; stPubAttr.f32FrameRate = 30; stPubAttr.stWndRect.s32X = 0; stPubAttr.stWndRect.s32Y = 0; stPubAttr.stWndRect.u32Width = 1920; stPubAttr.stWndRect.u32Height = 1080; break; case OMNIVISION_OV9752_MIPI_720P_30FPS: stPubAttr.enBayer = BAYER_BGGR; stPubAttr.f32FrameRate = 30; stPubAttr.stWndRect.s32X = 0; stPubAttr.stWndRect.s32Y = 0; stPubAttr.stWndRect.u32Width = 1280; stPubAttr.stWndRect.u32Height = 720; break; default: stPubAttr.enBayer = BAYER_GRBG; stPubAttr.f32FrameRate = 30; stPubAttr.stWndRect.s32X = 0; stPubAttr.stWndRect.s32Y = 0; stPubAttr.stWndRect.u32Width = 1920; stPubAttr.stWndRect.u32Height = 1080; break; } s32Ret = HI_MPI_ISP_SetPubAttr(IspDev, &stPubAttr); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_ISP_SetPubAttr failed with %#x!\n", __FUNCTION__, s32Ret); return s32Ret; } /* 8. isp init */ s32Ret = HI_MPI_ISP_Init(IspDev); if (s32Ret != HI_SUCCESS) { printf("%s: HI_MPI_ISP_Init failed!\n", __FUNCTION__); return s32Ret; } gbIspInited = HI_TRUE; return HI_SUCCESS; }