Example #1
0
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MBOOL
AAOBufMgr::
init(MINT32 const i4SensorIdx)
{    
    char value[PROPERTY_VALUE_MAX] = {'\0'};
    property_get("debug.aao_buf_mgr.enable", value, "0");
    m_bDebugEnable = atoi(value);

    // sensor index
    m_i4SensorIdx = i4SensorIdx;    

	MY_LOG("[%s()] m_eSensorDev: %d, m_i4SensorIdx: %d, m_Users: %d \n", __FUNCTION__, m_eSensorDev, m_i4SensorIdx, m_Users);

	Mutex::Autolock lock(m_Lock);

	if (m_Users > 0)
	{
		MY_LOG("%d has created \n", m_Users);
		android_atomic_inc(&m_Users);
		return MTRUE;
	}

    // AAO statistics init
    AWB_STAT_PARAM_T rAWBStatParam;

    switch (m_eSensorDev)
    {   
    case ESensorDev_Main: //  Main Sensor
        rAWBStatParam = getAWBStatParam<ESensorDev_Main>();
        break;
    case ESensorDev_MainSecond: //  Main Second Sensor
        rAWBStatParam = getAWBStatParam<ESensorDev_MainSecond>();        
        break;
    case ESensorDev_Sub: //  Sub Sensor
        rAWBStatParam = getAWBStatParam<ESensorDev_Sub>();             
        break;
    default:
        MY_ERR("m_eSensorDev = %d", m_eSensorDev);
        rAWBStatParam = getAWBStatParam<ESensorDev_Main>();
        break;
    }  

    m_u4AEStateSize = static_cast<MUINT32>(((rAWBStatParam.i4WindowNumX + 3) / 4) * 4 * rAWBStatParam.i4WindowNumY);
    m_u4AEHistSize = 4 * 256;
    m_u4AWBStateSize = static_cast<MUINT32>(rAWBStatParam.i4WindowNumX * rAWBStatParam.i4WindowNumY * 4);
    m_u4AAOBufSize = m_u4AEStateSize + m_u4AEHistSize + m_u4AWBStateSize;
    m_u4AAOXSize = m_u4AAOBufSize - 1;

    MY_LOG("m_u4AEStateSize = %d", m_u4AEStateSize);
    MY_LOG("m_u4AEHistSize = %d", m_u4AEHistSize);
    MY_LOG("m_u4AWBStateSize = %d", m_u4AWBStateSize);
    MY_LOG("m_u4AAOBufSize = %d", m_u4AAOBufSize);
    MY_LOG("m_u4AAOXSize = %d", m_u4AAOXSize);

    // Normal pipe
    //m_pPipe = INormalPipe::createInstance(m_i4SensorIdx,"aao_buf_mgr");
    
    // imem driver init
    m_pIMemDrv->init();

    // AAO DMA buffer init

    // removes all elements from the list container 
    m_rHwBufList.clear();

    // allocate and enqueue HW buffer
    for (MINT32 i = 0; i < MAX_AAO_BUFFER_CNT; i++) {
        m_rAAOBufInfo[i].useNoncache = 0;   // improve the performance
        allocateBuf(m_rAAOBufInfo[i], m_u4AAOBufSize);
        enqueueHwBuf(m_rAAOBufInfo[i]);
    }

    //DMAInit();

    // Enable AA stat
    //AAStatEnable(MTRUE);

    debugPrint();

    android_atomic_inc(&m_Users);

    return MTRUE;
}
Example #2
0
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MBOOL
AEBufMgr::
init(MINT32 const i4SensorIdx)
{    
#if ENABLE_AE_MVHDR_STAT
    char value[PROPERTY_VALUE_MAX] = {'\0'};
    property_get("debug.aao_buf_mgr.enable", value, "0");
    m_bDebugEnable = atoi(value);
    MINT32 cam_isp_addr = 0x15000000;

    // sensor index
    m_i4SensorIdx = i4SensorIdx;    

	MY_LOG("[%s()] m_eSensorDev: %d, m_i4SensorIdx: %d, m_Users: %d \n", __FUNCTION__, m_eSensorDev, m_i4SensorIdx, m_Users);

	Mutex::Autolock lock(m_Lock);

	if (m_Users > 0)
	{
		MY_LOG("%d has created \n", m_Users);
		android_atomic_inc(&m_Users);
		return MTRUE;
	}

    // AAO statistics init
    AWB_STAT_PARAM_T rAWBStatParam;

    switch (m_eSensorDev)
    {   
    case ESensorDev_Main: //  Main Sensor
        rAWBStatParam = getAWBStatParam<ESensorDev_Main>();
        break;
    case ESensorDev_MainSecond: //  Main Second Sensor
        rAWBStatParam = getAWBStatParam<ESensorDev_MainSecond>();        
        break;
    case ESensorDev_Sub: //  Sub Sensor
        rAWBStatParam = getAWBStatParam<ESensorDev_Sub>();             
        break;
    default:
        MY_ERR("m_eSensorDev = %d", m_eSensorDev);
        rAWBStatParam = getAWBStatParam<ESensorDev_Main>();
        break;
    }  

    m_u4AAOBufSize = 0x280; //m_u4AEStateSize + m_u4AEHistSize + m_u4AWBStateSize;
    m_u4AAOXSize = m_u4AAOBufSize - 1;

    MY_LOG("m_u4AEStateSize = %d", m_u4AEStateSize);
    MY_LOG("m_u4AEHistSize = %d", m_u4AEHistSize);
    MY_LOG("m_u4AWBStateSize = %d", m_u4AWBStateSize);
    MY_LOG("m_u4AAOBufSize = %d", m_u4AAOBufSize);
    MY_LOG("m_u4AAOXSize = %d", m_u4AAOXSize);

    // Normal pipe
    //m_pPipe = INormalPipe::createInstance(m_i4SensorIdx,"aao_buf_mgr");
    
    // imem driver init
    m_pIMemDrv->init();

    // AAO DMA buffer init

    // removes all elements from the list container 
    m_rHwBufList.clear();

    // allocate and enqueue HW buffer
    for (MINT32 i = 0; i < MAX_AAO_BUFFER_CNT; i++) {
        m_rAAOBufInfo[i].useNoncache = 0;   // improve the performance
        allocateBuf(m_rAAOBufInfo[i], m_u4AAOBufSize);
        enqueueHwBuf(m_rAAOBufInfo[i]);
    }

    // Open isp driver
    mfd = open(ISP_DEV_NAME, O_RDWR);
    if (mfd < 0) {
        MY_ERR("error open kernel driver, %d, %s\n", errno, strerror(errno));
        return -1;
    }

    mpIspHwRegAddr = (unsigned long *) mmap(0, CAM_ISP_RANGE, (PROT_READ | PROT_WRITE), MAP_SHARED, mfd, cam_isp_addr);
    if (mpIspHwRegAddr == MAP_FAILED) {
        MY_ERR("mmap err(1), %d, %s \n", errno, strerror(errno));
        return -4;
    }
    MY_LOG("%s() m_eSensorDev(%d) ISPAddr:0x%0x\n", __FUNCTION__, m_eSensorDev, mpIspHwRegAddr);

    //DMAInit();

    // Enable AA stat
    //AAStatEnable(MTRUE);
    debugPrint();

    android_atomic_inc(&m_Users);
#endif
    return MTRUE;
}