#include "zm_analysis_thread.h" AnalysisThread::AnalysisThread(Monitor *p_monitor) { monitor = p_monitor; terminate = false; sigemptyset(&block_set); } AnalysisThread::~AnalysisThread() { } int AnalysisThread::run() { useconds_t analysis_rate = monitor->GetAnalysisRate(); unsigned int analysis_update_delay = monitor->GetAnalysisUpdateDelay(); time_t last_analysis_update_time, cur_time; monitor->UpdateAdaptiveSkip(); last_analysis_update_time = time(0); while( !terminate ) { // Process the next image sigprocmask(SIG_BLOCK, &block_set, 0); // Some periodic updates are required for variable capturing framerate if ( analysis_update_delay ) { cur_time = time( 0 ); if ( (unsigned int)( cur_time - last_analysis_update_time ) > analysis_update_delay ) { analysis_rate = monitor->GetAnalysisRate(); monitor->UpdateAdaptiveSkip(); last_analysis_update_time = cur_time; } } if ( !monitor->Analyse() ) { usleep(monitor->Active()?ZM_SAMPLE_RATE:ZM_SUSPENDED_RATE); } else if ( analysis_rate ) { usleep(analysis_rate); } sigprocmask(SIG_UNBLOCK, &block_set, 0); } return 0; } // end in AnalysisThread::run()