//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MBOOL AAOBufMgr:: debugPrint() { BufInfoList_T::iterator it; for (it = m_rHwBufList.begin(); it != m_rHwBufList.end(); it++ ) { MY_LOG("m_rHwBufList.virtAddr:[0x%x]/phyAddr:[0x%x] \n",it->virtAddr,it->phyAddr); } return MTRUE; }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MUINT32 AAOBufMgr:: getCurrHwBuf() { if (m_rHwBufList.size() > 0) { return m_rHwBufList.front().phyAddr; } else { // No free buffer MY_ERR("No free buffer\n"); return 0; } }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MBOOL AEBufMgr:: dequeueHwBuf(BufInfo_T& rBufInfo) { #if ENABLE_AE_MVHDR_STAT MY_LOG_IF(m_bDebugEnable,"%s() m_eSensorDev(%d)\n", __FUNCTION__, m_eSensorDev); static MINT32 frameCnt = 0; char value[PROPERTY_VALUE_MAX] = {'\0'}; property_get("aae.dump.enable", value, "0"); MBOOL bEnable = atoi(value); if (m_rHwBufList.size()) { rBufInfo = m_rHwBufList.front(); m_rHwBufList.pop_front(); } if (bEnable) { char fileName[64]; sprintf(fileName, "/sdcard/ae/ae%d.raw", frameCnt++); FILE *fp = fopen(fileName, "w"); if (NULL == fp) { MY_ERR("fail to open file to save img: %s", fileName); MINT32 err = mkdir("/sdcard/ae", S_IRWXU | S_IRWXG | S_IRWXO); MY_LOG("err = %d", err); return MFALSE; } MY_LOG_IF(m_bDebugEnable,"%s\n", fileName); fwrite(reinterpret_cast<void *>(rBufInfo.virtAddr), 1, rBufInfo.size, fp); fclose(fp); isp_reg_t *pisp = (isp_reg_t *) mpIspHwRegAddr; MY_LOG("%s() m_eSensorDev(%d) ISPAddr:0x%0x 0x%0x\n", __FUNCTION__, m_eSensorDev, mpIspHwRegAddr, pisp); MY_LOG("%s() CAMSV_CAMSV_CLK_EN (0x9020):0x%0x\n", __FUNCTION__, ISP_REG(pisp, CAMSV_CAMSV_CLK_EN)); MY_LOG("%s() CAMSV_CAMSV_INT_EN(0x9008):0x%0x\n", __FUNCTION__, ISP_REG(pisp, CAMSV_CAMSV_INT_EN)); MY_LOG("%s() CAMSV_TG_VF_CON(0x9414):0x%0x\n", __FUNCTION__, ISP_REG(pisp, CAMSV_TG_VF_CON)); MY_LOG("%s() CAMSV_CAMSV_MODULE_EN(0x9000):0x%0x\n", __FUNCTION__, ISP_REG(pisp, CAMSV_CAMSV_MODULE_EN)); MY_LOG("%s() CAMSV_CAMSV_PAK(0x903C):0x%0x\n", __FUNCTION__, ISP_REG(pisp, CAMSV_CAMSV_PAK)); MY_LOG("%s() CAMSV_CAMSV_FMT_SEL(0x9004):0x%0x\n", __FUNCTION__, ISP_REG(pisp, CAMSV_CAMSV_FMT_SEL)); } else { frameCnt = 0; } MY_LOG_IF(m_bDebugEnable,"rBufInfo.virtAddr:[0x%x]/phyAddr:[0x%x] \n",rBufInfo.virtAddr,rBufInfo.phyAddr); #endif return MTRUE; }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MUINT32 AAOBufMgr:: getNextHwBuf() { BufInfoList_T::iterator it; if (m_rHwBufList.size() > 1) { it = m_rHwBufList.begin(); it++; return it->phyAddr; } else { // No free buffer MY_ERR("No free buffer\n"); return 0; } }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MUINT32 AEBufMgr:: getCurrHwBuf() { #if ENABLE_AE_MVHDR_STAT if (m_rHwBufList.size() > 0) { return m_rHwBufList.front().phyAddr; } else { // No free buffer MY_ERR("No free buffer\n"); return 0; } #else return 0; #endif }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MUINT32 AEBufMgr:: getNextHwBuf() { #if ENABLE_AE_MVHDR_STAT BufInfoList_T::iterator it; if (m_rHwBufList.size() > 1) { it = m_rHwBufList.begin(); it++; return it->phyAddr; } else { // No free buffer MY_ERR("No free buffer\n"); return 0; } #else return 0; #endif }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MBOOL AAOBufMgr:: dequeueHwBuf(BufInfo_T& rBufInfo) { MY_LOG_IF(m_bDebugEnable,"%s() m_eSensorDev(%d)\n", __FUNCTION__, m_eSensorDev); static MINT32 frameCnt = 0; char value[PROPERTY_VALUE_MAX] = {'\0'}; property_get("aao.dump.enable", value, "0"); MBOOL bEnable = atoi(value); if (m_rHwBufList.size()) { rBufInfo = m_rHwBufList.front(); m_rHwBufList.pop_front(); } if (bEnable) { char fileName[64]; sprintf(fileName, "/sdcard/aao/aao_%d.raw", frameCnt++); FILE *fp = fopen(fileName, "w"); if (NULL == fp) { MY_ERR("fail to open file to save img: %s", fileName); MINT32 err = mkdir("/sdcard/aao", S_IRWXU | S_IRWXG | S_IRWXO); MY_LOG("err = %d", err); return MFALSE; } MY_LOG_IF(m_bDebugEnable,"%s\n", fileName); fwrite(reinterpret_cast<void *>(rBufInfo.virtAddr), 1, rBufInfo.size, fp); fclose(fp); } else { frameCnt = 0; } MY_LOG_IF(m_bDebugEnable,"rBufInfo.virtAddr:[0x%x]/phyAddr:[0x%x] \n",rBufInfo.virtAddr,rBufInfo.phyAddr); return MTRUE; }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MBOOL AAOBufMgr:: enqueueHwBuf(BufInfo_T& rBufInfo) { MY_LOG_IF(m_bDebugEnable,"%s() m_eSensorDev(%d)\n", __FUNCTION__, m_eSensorDev); MY_LOG_IF(m_bDebugEnable,"rBufInfo.virtAddr:[0x%x]/phyAddr:[0x%x] \n",rBufInfo.virtAddr,rBufInfo.phyAddr); // add element at the end m_rHwBufList.push_back(rBufInfo); m_pIMemDrv->cacheSyncbyRange(IMEM_CACHECTRL_ENUM_INVALID, &rBufInfo); return MTRUE; }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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; }