예제 #1
0
int startIsp(void)
{
    HI_S32 s32Ret;
    ISP_IMAGE_ATTR_S stImageAttr;
    ISP_INPUT_TIMING_S stInputTiming;

    /* 1. isp init */
    s32Ret = ISP_SensorInit();
    if (s32Ret != HI_SUCCESS)
    {
        printf("%s: HI_MPI_ISP_Init failed!\n", __FUNCTION__);
        return s32Ret;
    }

    /* 2. isp set image attributes */
    /* note : different sensor, different ISP_IMAGE_ATTR_S define.
              if the sensor you used is different, you can change
              ISP_IMAGE_ATTR_S definition */
//        case OMNI_OV9712_DC_720P_30FPS:
            stImageAttr.enBayer      = 1;//BAYER_BGGR;
            stImageAttr.u16FrameRate = 30;
            stImageAttr.u16Width     = 1280;
            stImageAttr.u16Height    = 720;

    s32Ret = HI_MPI_ISP_SetImageAttr(&stImageAttr);
    if (s32Ret != HI_SUCCESS)
    {
        printf("%s: HI_MPI_ISP_SetImageAttr failed with %#x!\n", __FUNCTION__, s32Ret);
        return s32Ret;
    }

    /* 3. isp set timing */
    stInputTiming.enWndMode = 0;
    s32Ret = HI_MPI_ISP_SetInputTiming(&stInputTiming);
    if (s32Ret != HI_SUCCESS)
    {
        printf("%s: HI_MPI_ISP_SetInputTiming failed with %#x!\n", __FUNCTION__, s32Ret);
        return s32Ret;
    }

    return HI_SUCCESS;
}
예제 #2
0
/*****************************************************************************
 Prototype       : HI_MPI_ISP_Init
 Description     : isp initial process, include extent memory, top structure,
                    default value, etc.
 Input           : I_VOID  **
 Output          : None
 Return Value    :
 Process         :
 Note             :

  History
  1.Date         : 2011/1/13
    Author       : x00100808
    Modification : Created function

*****************************************************************************/
HI_S32 HI_MPI_ISP_Init(ISP_DEV IspDev)
{
    HI_S32 s32Ret;
    ISP_CTX_S *pstIspCtx = HI_NULL;

    HI_U8 u8WDRMode;
    HI_U32 u32Value = 0;
    HI_VOID *pValue = HI_NULL;
    ISP_CMOS_SENSOR_IMAGE_MODE_S stSnsImageMode;

    /* 1. check status */
    ISP_CHECK_DEV(IspDev);
    ISP_GET_CTX(IspDev, pstIspCtx);
    ISP_CHECK_POINTER(pstIspCtx);
    ISP_CHECK_OPEN(IspDev);
    ISP_CHECK_SENSOR_REGISTER(IspDev);
    ISP_CHECK_MEM_INIT(IspDev);

    pstIspCtx->stIspParaRec.bWDRCfg = hi_ext_top_wdr_cfg_read();
    ISP_CHECK_ISP_WDR_CFG(IspDev);

    pstIspCtx->stIspParaRec.bPubCfg = hi_ext_top_pub_attr_cfg_read();
    ISP_CHECK_ISP_PUB_ATTR_CFG(IspDev);

    if (HI_TRUE == pstIspCtx->stIspParaRec.bInit)
    {
        return HI_SUCCESS;
    }

    /* 2. init statistics bufs. */
    s32Ret = ISP_StatisticsInit(IspDev);
    if (HI_SUCCESS != s32Ret)
    {
        printf("ISP[%d] Init statistics failed\n", IspDev);
        goto fail0;
    }

    /* 3. init proc bufs. */
    s32Ret = ISP_ProcInit(IspDev);
    if (HI_SUCCESS != s32Ret)
    {
        goto fail1;
    }

    /* 4. init ispupdate bufs. */
    s32Ret = ISP_UpdateInfoInit(IspDev, &pstIspCtx->stUpdateInfoCtrl);
    if (HI_SUCCESS != s32Ret)
    {
        goto fail2;
    }

    /* 5. set WDR mode to sensor and update isp param from sensor and sensor init */
    u8WDRMode = hi_ext_top_sensor_wdr_mode_read();
    s32Ret = ISP_SensorSetWDRMode(IspDev, u8WDRMode);
    if (HI_SUCCESS != s32Ret)
    {
        printf("ISP[%d] set sensor WDR mode failed!\n", IspDev);
        s32Ret = HI_ERR_ISP_NOT_INIT;
        goto fail3;
    }

    stSnsImageMode.u16Width = hi_ext_sync_total_width_read();
    stSnsImageMode.u16Height = hi_ext_sync_total_height_read();
    u32Value = hi_ext_system_fps_base_read();
    pValue = (HI_VOID *)&u32Value;
    stSnsImageMode.f32Fps = *(HI_FLOAT *)pValue;
    s32Ret = ISP_SensorSetImageMode(IspDev, &stSnsImageMode);
    if (HI_SUCCESS != s32Ret)
    {
        printf("ISP[%d] set sensor image mode failed!\n", IspDev);
        s32Ret = HI_ERR_ISP_NOT_INIT;
        goto fail3;
    }

    s32Ret = ISP_SensorInit(IspDev);
    if (HI_SUCCESS != s32Ret)
    {
        printf("ISP[%d] init sensor failed!\n", IspDev);
        s32Ret = HI_ERR_ISP_NOT_INIT;
        goto fail3;
    }

    s32Ret = ISP_SensorUpdateAll(IspDev);
    if (HI_SUCCESS != s32Ret)
    {
        printf("ISP[%d] update sensor all failed!\n", IspDev);
        s32Ret = HI_ERR_ISP_NOT_INIT;
        goto fail3;
    }

    /* 6. init the common part of extern registers and real registers */
    ISP_ExtRegsDefault();
    ISP_RegsDefault();
    ISP_ExtRegsInitialize(IspDev);
    ISP_RegsInitialize(IspDev);

    /* 7. isp algs global variable initialize */
    ISP_GlobalInitialize(IspDev);
    /* 8. register all algorithm to isp, and init them. */
    ISP_AlgsRegister(IspDev);
    ISP_AlgsInit(pstIspCtx->astAlgs, IspDev);
    /* 9. set WDR mode to kernel. */
    s32Ret = ISP_WDRCfgSet(IspDev);
    if (HI_SUCCESS != s32Ret)
    {
        printf("ISP[%d] set WDR mode to kernel failed!\n", IspDev);
        goto fail3;
    }
    /* 10. init isp global variables */
    if (pthread_mutex_init(&pstIspCtx->stLock, HI_NULL) != 0)
    {
        s32Ret = HI_FAILURE;
        goto fail3;
    }

    if (ioctl(g_as32IspFd[IspDev], ISP_SET_REGNEWER) < 0)
    {
        perror("Set ISP Regnewer failed!\n");
        goto fail4;;
    }

    MUTEX_LOCK(pstIspCtx->stLock);
    pstIspCtx->stIspParaRec.bInit = HI_TRUE;
    pstIspCtx->stIspParaRec.bRunEn = HI_TRUE;
    MUTEX_UNLOCK(pstIspCtx->stLock);

    return HI_SUCCESS;
fail4:
    pthread_mutex_destroy(&pstIspCtx->stLock);
fail3:
    ISP_UpdateInfoExit(IspDev, &pstIspCtx->stUpdateInfoCtrl);
fail2:
    ISP_ProcExit(IspDev);
fail1:
    ISP_StatisticsExit(IspDev);
fail0:
    //VReg_Exit(ISP_VREG_BASE, ISP_VREG_SIZE);

    return s32Ret;
}