//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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; }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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; }