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;
}
コード例 #3
0
ファイル: ModelBinder.cpp プロジェクト: OPRoS/TaskEngine
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;
}
コード例 #5
0
ファイル: ModelBinder.cpp プロジェクト: OPRoS/TaskEngine
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);
}
コード例 #6
0
ファイル: ExeTask.cpp プロジェクト: OPRoS/TaskEngine
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);
}
コード例 #7
0
ファイル: ExeTask.cpp プロジェクト: OPRoS/TaskEngine
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();
	}
}
コード例 #8
0
ファイル: ExeTask.cpp プロジェクト: OPRoS/TaskEngine
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);
	
}
コード例 #9
0
ファイル: ExeTask.cpp プロジェクト: OPRoS/TaskEngine
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();
}