int PreviewStream::configure(int fps, bool /*videoSnapshot*/) { FLOG_TRACE("PreviewStream %s running", __FUNCTION__); int ret = NO_ERROR; int errCode = 0; fAssert(mDeviceAdapter.get() != NULL); ret = mDeviceAdapter->setDeviceConfig(mWidth, mHeight, mFormat, fps); if (ret != NO_ERROR) { FLOGE("%s setDeviceConfig failed", __FUNCTION__); errCode = CAMERA2_MSG_ERROR_DEVICE; goto fail; } mDeviceAdapter->setCameraBufferProvide(this); ret = allocateBuffers(mWidth, mHeight, mFormat, mMaxProducerBuffers); if (ret != NO_ERROR) { FLOGE("%s allocateBuffers failed", __FUNCTION__); errCode = CAMERA2_MSG_ERROR_REQUEST; goto fail; } mPrepared = true; return NO_ERROR; fail: freeBuffers(); FLOGE("Error occurred, performing cleanup"); if (NULL != mErrorListener) { mErrorListener->handleError(errCode); } return BAD_VALUE; }
int PreviewStream::stop() { FLOG_TRACE("PreviewStream %s running", __FUNCTION__); if (mDeviceAdapter.get() != NULL) { mDeviceAdapter->stopPreview(); } StreamAdapter::stop(); return NO_ERROR; }
RFSMvalueEval ModelBinder::getGlobalValue(LogFile* lf, std::string name) { ValueMap::iterator it = m_gVarTAB.find(name); if(it != m_gVarTAB.end()){ RFSMvalueEval eval = it->second; FLOG_TRACE(lf, " (RUNNING:GVar, Read) %s, %s", name.c_str(), eval.getStrValue().c_str()); return eval; } else{ FLOG_ERROR(lf, " (RUNNING:GVar, Read) %s, Not initialized", name.c_str()); return RFSMvalueEval(); } }
int PreviewStream::start() { FLOG_TRACE("PreviewStream %s running", __FUNCTION__); int ret = 0; StreamAdapter::start(); fAssert(mDeviceAdapter.get() != NULL); ret = mDeviceAdapter->startPreview(); if (ret != NO_ERROR) { FLOGE("Couldn't start preview for DeviceAdapter"); return ret; } return NO_ERROR; }
void ModelBinder::setGlobalValue(LogFile* lf, std::string varName, RFSMvalueEval valueEval) { //-pthread_mutex_lock(m_mutexp); FLOG_TRACE(lf, " (RUNNING:GVar, Write) %s, %s", varName.c_str(), valueEval.getStrValue().c_str()); ValueMap::iterator it = m_gVarTAB.find(varName); if(it != m_gVarTAB.end()){ RFSMvalueEval eval = it->second; m_gVarTAB.erase(it); } m_gVarTAB.insert(ValuePair(varName, valueEval)); //-pthread_mutex_unlock(m_mutexp); }
void ExeTask::setWorkerVar(std::string varName, RFSMvalueEval valueEval) { pthread_mutex_lock(&m_lmu); FLOG_TRACE(m_logFile, " (RUNNING:WVAR, Write) %s, %s", varName.c_str(), valueEval.getStrValue().c_str()); ValueMap::iterator it = m_wVarTAB->find(varName); if(it != m_wVarTAB->end()){ RFSMvalueEval eval = it->second; //delete eval; m_wVarTAB->erase(it); } m_wVarTAB->insert(ValuePair(varName, valueEval)); pthread_mutex_unlock(&m_lmu); }
RFSMvalueEval ExeTask::getWorkerVar(std::string varName) { pthread_mutex_lock(&m_lmu); ValueMap::iterator it = m_wVarTAB->find(varName); if(it != m_wVarTAB->end()){ RFSMvalueEval eval = it->second; FLOG_TRACE(m_logFile, " (RUNNING:WVAR, Read) %s, %s", varName.c_str(), eval.getStrValue().c_str()); pthread_mutex_unlock(&m_lmu); return eval; } else{ FLOG_ERROR(m_logFile, " (RUNNING:WVAR, Read) %s, Not initialized", varName.c_str()); pthread_mutex_unlock(&m_lmu); return RFSMvalueEval(); } }
void ExeTask::cbackBy_Timerfunc(PVOID param, bool timerOrWaitFired) { QueryPerformanceFrequency(&liFrequency); // retrieves the frequency of the high-resolution performance counter QueryPerformanceCounter(&liCounter1); // Start litemp = (double)(liCounter1.QuadPart - liCounter0.QuadPart) / (double)liFrequency.QuadPart; liCounter0 = liCounter1; if(m_stop){ SetEvent(m_DoneEvent); //m_running = false; //이건 RThread에게 있는 멤버 데이터 return; } try{ if(m_runner->isDebugMode() && !m_isDbgCondCreated){ //디버깅인데 cond가 아직 생성이 안되면 아무것도 안한다. } else{ m_runner->enterTask(this, m_task); if(isCompleted()) { SetEvent(m_DoneEvent); return; } } } catch(RuntimeEH& runEH){ //runEH.printError(); FLOG_ERROR(m_logFile, " (RUNNING:%d) 값을 획득하는데 실패하였습니다.", runEH.getErrorCode()); //return runEH.getErrorCode(); } FLOG_TRACE(m_logFile, " (RUNNING:CYCLE) This is the end of a cycle.\n"); m_iterCount++; QueryPerformanceCounter(&liCounter2); PeRecord rec; rec.name = getInstanceName(); rec.cycle = litemp; rec.proc = (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart; PerformTable::addPeRecord(rec); //printf("<%s> Cycle Time : %f, Process Time : %f\n", getInstanceName().c_str(), litemp, (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart); }
void ExeTask::cbackBy_Thrfunc() { bool isWin = false; m_iterCount = 0; m_running = true; m_joining = false; setCompleted(false); if(m_task != NULL){ std::string performFile = getNodeName(); if(TaskConfig::isloggingTimePeriod()) { PerformTable::init(); } #ifdef _WIN32 isWin = true; QueryPerformanceCounter(&liCounter0); #else struct timespec tp0, tp1, tp2; double litemp; clock_gettime(CLOCK_MONOTONIC, &tp0); #endif if(isWin && TaskConfig::isUsingQueueTimer()){ this->start_que(m_TimerQueue, getNodeName()); if(TaskConfig::isloggingTimePeriod()) performFile.append("-Timer"); } else{ //2. run while(1){ #ifdef _WIN32 QueryPerformanceFrequency(&liFrequency); // retrieves the frequency of the high-resolution performance counter QueryPerformanceCounter(&liCounter1); // Start litemp = (double)(liCounter1.QuadPart - liCounter0.QuadPart) / (double)liFrequency.QuadPart; liCounter0 = liCounter1; #else clock_gettime(CLOCK_MONOTONIC, &tp1); litemp = ((double)(tp1.tv_sec*1000) + (double)(tp1.tv_nsec)/1000000)-((double)(tp0.tv_sec*1000) + (double)(tp0.tv_nsec)/1000000); tp0.tv_sec = tp1.tv_sec; tp0.tv_nsec = tp1.tv_nsec; #endif if(m_stop){ //외부로 부터 쓰레드 중지 명령 break; } try{ if(m_runner->isDebugMode() && !m_isDbgCondCreated){ //디버깅인데 cond가 아직 생성이 안되면 아무것도 안한다. } else{ m_runner->enterTask(this, m_task); if(isCompleted()) break; } } catch(RuntimeEH& runEH){ //runEH.printError(); FLOG_ERROR(m_logFile, " (RUNNING:%d) 값을 획득하는데 실패하였습니다.", runEH.getErrorCode()); //return runEH.getErrorCode(); } FLOG_TRACE(m_logFile, " (RUNNING:CYCLE) This is the end of a cycle.\n"); m_iterCount++; #ifdef _WIN32 QueryPerformanceCounter(&liCounter2); PeRecord rec; rec.name = getInstanceName(); rec.cycle = litemp; rec.proc = (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart; //printf("<%s> Cycle Time : %f, Process Time : %f\n", getInstanceName().c_str(), litemp, (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart); #else clock_gettime(CLOCK_MONOTONIC, &tp2); PeRecord rec; rec.name = getInstanceName(); rec.cycle = litemp; rec.proc = ((double)(tp2.tv_sec*1000) + (double)(tp2.tv_nsec)/1000000)-((double)(tp1.tv_sec*1000) + (double)(tp1.tv_nsec)/1000000); #endif if(TaskConfig::isloggingTimePeriod()){ PerformTable::addPeRecord(rec); } float sleeptime = m_timePeriod - rec.proc*1000; if(sleeptime<0) sleeptime = 0; thread_sleep(sleeptime); //timespec a; //a.tv_sec = 0; //a.tv_nsec = 5000000 - rec.proc * 1000000; //nanosleep(&a, NULL); } if(TaskConfig::isloggingTimePeriod()) performFile.append("-Thread"); } m_runner->enterDestruct(this); m_running = false; if(TaskConfig::isloggingTimePeriod()) PerformTable::makeFile(performFile); } if(m_runner->isDebugMode()||m_runner->isMonitorMode()){ m_runner->delCondMu4BP(getThreadNum()); m_isDbgCondCreated = false; this->sendThreadInfo("delete"); //Task 쓰레드 delete가 전송되면 종료임을 알 수 있다. this->sendMonitorMsg("RES-EOT"); DbgTable::clearTable(); } }
int PreviewStream::release() { FLOG_TRACE("PreviewStream %s running", __FUNCTION__); StreamAdapter::release(); return freeBuffers(); }