ISP流程

  • Post author:
  • Post category:其他


https://blog.csdn.net/zhi11235813/article/details/78801528



ISP(Image Signal Processor)流程概述

对前端图像传感器输出的信号做后期处理,

依赖于ISP才能在不同的光学条件下都能较好的还原现场细节。

在这里插入图片描述



实现代码

海思mpp_sample_venc流程中

SAMPLE_VENC_1080P_CLASSIC
{
	step  1: init sys variable 
	step 2: mpp system init. -------SAMPLE_COMM_SYS_Init
	step 3: start vi dev & chn to capture---SAMPLE_COMM_VI_StartVi
	                       ↓分支线程SAMPLE_COMM_VI_StartIspAndVi ↓
	        {
	         step 1: mipi configure
	         step 2: configure sensor and ISP (include WDR mode).
	         step 3: run isp thread 
	          step 4 : config & start vicap dev
	           Step 5: config & start vicap chn (max 1) 
	        }
	step 4: start vpss and vi bind vpss---SAMPLE_COMM_SYS_GetPicSize	
}

在这里插入图片描述

如果用户调试好图像效果后,可以使用 PQ Tools 工具提供的配置文件保存功能进行配 置参数保存。在下次启动时系统可以使用 PQ Tools 工具提供的配置文件加载功能加载 已经调节好的图像参数。

在这里插入图片描述

来自sample_comm_isp.c 38行
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;
    
    /*1.sensor register callback*/-注册sensor库(sensor向3A算法和ISP注册回调函数)
    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 */---(3A算法向ISP注册回调函数)---注册海思AE算法库 
    stLib.s32Id = 0;
    strcpy(stLib.acLibName, HI_AE_LIB_NAME);
    s32Ret = HI_MPI_AE_Register(IspDev, &stLib);

    /* 3. register hisi awb lib */-(3A算法向ISP注册回调函数)--注册海思AWB算法库
    stLib.s32Id = 0;
    strcpy(stLib.acLibName, HI_AWB_LIB_NAME);
    s32Ret = HI_MPI_AWB_Register(IspDev, &stLib);

    /* 4. register hisi af lib */--(3A算法向ISP注册回调函数)----注册海思AF算法库 
    stLib.s32Id = 0;
    strcpy(stLib.acLibName, HI_AF_LIB_NAME);
    s32Ret = HI_MPI_AF_Register(IspDev, &stLib);

    /* 5. isp mem init */-----------------------------初始化ISP外部寄存器
    s32Ret = HI_MPI_ISP_MemInit(IspDev);

    /* 6. isp set WDR mode */-------------------------------配置ISP宽动态模式
    ISP_WDR_MODE_S stWdrMode;
    stWdrMode.enWDRMode  = enWDRMode;
    s32Ret = HI_MPI_ISP_SetWDRMode(0, &stWdrMode);    

    /* 7. isp set pub attributes */-------------------------配置图像公共属性 
    /*不同sensor所用参数不同,也可以用自己的参数 */
              
    switch(SENSOR_TYPE)
    {
        case APTINA_9M034_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;
            ……
    }

    s32Ret = HI_MPI_ISP_SetPubAttr(IspDev, &stPubAttr);------ 配置图像公共属性

    /* 8. isp init */------------------------------------ 初始化ISP Firmware 
    s32Ret = HI_MPI_ISP_Init(IspDev);
---------------------------------------------------
后面则是 运行HI_MPI_ISP_Run线程+	启动&停止VI/VO等业务
s32Ret = HI_MPI_ISP_Exit();
pthread_join(isp_pid, 0)
-------------------------------------------------
    gbIspInited = HI_TRUE;
    return HI_SUCCESS;
}

HI_VOID* Test_ISP_Run(HI_VOID *param)
{
    ISP_DEV IspDev = 0;
    HI_MPI_ISP_Run(IspDev);

    return HI_NULL;
}

来自sample_comm_isp.c
/******************************************************************************
* funciton : ISP Run
******************************************************************************/
HI_S32 SAMPLE_COMM_ISP_Run()
{
#if (CHIP_ID == CHIP_HI3516C_V200)
    if (0 != pthread_create(&gs_IspPid, 0, (void* (*)(void*))Test_ISP_Run, NULL))
    {
        printf("%s: create isp running thread failed!\n", __FUNCTION__);
        return HI_FAILURE;
    }
    usleep(1000);
#else
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_attr_setstacksize(&attr, 4096 * 1024);
    if (0 != pthread_create(&gs_IspPid, &attr, (void* (*)(void*))Test_ISP_Run, NULL))
    {
        printf("%s: create isp running thread failed!\n", __FUNCTION__);
        pthread_attr_destroy(&attr);
        return HI_FAILURE;
    }
    usleep(1000);
    pthread_attr_destroy(&attr);
#endif
    return HI_SUCCESS;
}



版权声明:本文为qq_42024067原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。