diff --git a/.gitignore b/.gitignore index 2e84c13..5cfcffa 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,25 @@ .travis.yml +*.o +aclocal.m4 +autom4te.cache/ +compile +config.guess +config.sub +configure +depcomp +install-sh +missing +config.log +INSTALL +Makefile +README +config.h +config.status +doc/Makefile +doc/freeture.1 +src/.deps/ +src/Makefile +stamp-h1 +src/freeture + + diff --git a/src/AcqThread.h b/src/AcqThread.h index 0dd662a..a5ea70a 100644 --- a/src/AcqThread.h +++ b/src/AcqThread.h @@ -74,7 +74,7 @@ class AcqThread { }initializer; bool mMustStop; // Signal to stop thread. - boost::mutex mMustStopMutex; + boost::mutex mMustStopMutex; boost::thread *mThread; // Acquisition thread. bool mThreadTerminated; // Terminated status of the thread. Device *mDevice; // Device used for acquisition. diff --git a/src/Camera.h b/src/Camera.h index 4d5bd55..604bac3 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -3,7 +3,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% * -* This file is part of: freeture +* This file is part of: freeture * * Copyright: (C) 2014-2015 Yoan Audureau -- FRIPON-GEOPS-UPSUD * @@ -231,7 +231,7 @@ class Camera { * @param value New exposure time value (us). * @return Success status to set new exposure time. */ - virtual bool setExposureTime(double value) {return false;}; + virtual bool setExposureTime(double value) {return false;}; /** * Set device's gain value. diff --git a/src/CameraFrames.h b/src/CameraFrames.h index 22480a0..96f9801 100644 --- a/src/CameraFrames.h +++ b/src/CameraFrames.h @@ -90,7 +90,7 @@ class CameraFrames: public Camera { public: - CameraFrames(vector locationList, int numPos, bool verbose); + CameraFrames(vector locationList, int numPos, bool verbose); ~CameraFrames(); diff --git a/src/CameraGigeAravis.cpp b/src/CameraGigeAravis.cpp index 24ad7a5..b0288d7 100644 --- a/src/CameraGigeAravis.cpp +++ b/src/CameraGigeAravis.cpp @@ -759,7 +759,7 @@ arv_stream_get_statistics(stream, &nbCompletedBuffers, &nbFailures, &nbUnderruns); - cout << ">> Completed buffers = " << (unsigned long long) nbCompletedBuffers << endl; + cout << ">> Completed buffers = " << (unsigned long long) nbCompletedBuffers << endl; cout << ">> Failures = " << (unsigned long long) nbFailures << endl; //cout << ">> Underruns = " << (unsigned long long) nbUnderruns << endl; diff --git a/src/CameraGigePylon.cpp b/src/CameraGigePylon.cpp index fe9617b..b3f30e1 100644 --- a/src/CameraGigePylon.cpp +++ b/src/CameraGigePylon.cpp @@ -50,7 +50,7 @@ CameraGigePylon::CameraGigePylon(){ mExposureAvailable = true; mGainAvailable = true; mInputDeviceType = CAMERA; - + // Enumerate GigE cameras pTlFactory = &CTlFactory::GetInstance(); pTl = pTlFactory->CreateTl(CBaslerGigECamera ::DeviceClass()); @@ -93,7 +93,7 @@ vector> CameraGigePylon::getCamerasList() { CameraGigePylon::~CameraGigePylon(void){ - if(pStreamGrabber != NULL){ + if(pStreamGrabber != NULL){ delete pStreamGrabber; } @@ -102,7 +102,7 @@ CameraGigePylon::~CameraGigePylon(void){ delete pCamera; } - if(pTlFactory != NULL) + if(pTlFactory != NULL) pTlFactory->ReleaseTl(pTl); } @@ -141,7 +141,7 @@ bool CameraGigePylon::listCameras() { bool CameraGigePylon::createDevice(int id){ try { - + if(!devices.empty()) { // Create a camera object @@ -177,7 +177,7 @@ bool CameraGigePylon::getDeviceNameById(int id, string &device) { cout << " Name : " << devices[id].GetModelName().c_str() << endl; return true; } - + return false; } @@ -369,11 +369,11 @@ void CameraGigePylon::grabCleanse(){ pCamera = NULL; } - if(pTlFactory != NULL) + if(pTlFactory != NULL) pTlFactory->ReleaseTl(pTl); pTlFactory = NULL; } - + }catch (GenICam::GenericException &e){ // Error handling. @@ -611,7 +611,7 @@ bool CameraGigePylon::grabSingleImage(Frame &frame, int camID){ ExposureTimeRaw->SetValue(ExposureTimeRaw->GetMin()); cout << ">> Exposure has been setted with the minimum available value." << endl; - cout << ">> The available exposure range is [" << ExposureTimeRaw->GetMin() << "-" << ExposureTimeRaw->GetMax() << "] (us)" << endl; + cout << ">> The available exposure range is [" << ExposureTimeRaw->GetMin() << "-" << ExposureTimeRaw->GetMax() << "] (us)" << endl; } }else { @@ -641,7 +641,7 @@ bool CameraGigePylon::grabSingleImage(Frame &frame, int camID){ gainRaw->SetValue(gainRaw->GetMin()); cout << ">> Gain has been setted to the minimum available value." << endl; - cout << ">> The available gain range is [" << gainRaw->GetMin() << "-" << gainRaw->GetMax() << "]" << endl; + cout << ">> The available gain range is [" << gainRaw->GetMin() << "-" << gainRaw->GetMax() << "]" << endl; } } diff --git a/src/CameraV4l2.cpp b/src/CameraV4l2.cpp index edef245..4a67bed 100644 --- a/src/CameraV4l2.cpp +++ b/src/CameraV4l2.cpp @@ -1276,7 +1276,7 @@ // ************************ DISABLE AUTO EXPOSURE ***************************** - struct v4l2_queryctrl queryctrl1; + struct v4l2_queryctrl queryctrl1; struct v4l2_control control1; memset(&queryctrl1, 0, sizeof(queryctrl1)); queryctrl1.id = V4L2_CID_EXPOSURE_AUTO; @@ -1315,7 +1315,7 @@ // ************************ SET AUTO EXPOSURE ***************************** - struct v4l2_queryctrl queryctrl; + struct v4l2_queryctrl queryctrl; struct v4l2_control control; memset(&queryctrl, 0, sizeof(queryctrl)); queryctrl.id = V4L2_CID_EXPOSURE_ABSOLUTE; @@ -1507,8 +1507,8 @@ if (!tpf->denominator || !tpf->numerator) printf("Invalid frame rate\n"); else - printf("Frame rate set to %.3f fps\n", - 1.0 * tpf->denominator / tpf->numerator); + printf("Frame rate set to %.3f fps\n", + 1.0 * tpf->denominator / tpf->numerator); } } diff --git a/src/CameraVideo.cpp b/src/CameraVideo.cpp index c600196..c2321b4 100644 --- a/src/CameraVideo.cpp +++ b/src/CameraVideo.cpp @@ -46,7 +46,7 @@ CameraVideo::CameraVideo(vector videoList, bool verbose):mVideoID(0), mF // Open the video file for reading. if(mVideoList.size()>0) mCap = VideoCapture(videoList.front()); - else + else throw "No video path in input."; mExposureAvailable = false; diff --git a/src/CfgParam.cpp b/src/CfgParam.cpp index ef85677..c509907 100644 --- a/src/CfgParam.cpp +++ b/src/CfgParam.cpp @@ -1374,6 +1374,12 @@ void CfgParam::loadDetParam() { } } + if(!cfg.Get("DET_EVENT_USER_ACTION", param.det.DET_EVENT_USER_ACTION)) { + e = true; + param.det.errormsg.push_back("- DET_EVENT_USER_ACTION : Fail to load value."); + } + + // -------------------------------------------------------------------------------------- if(!cfg.Get("DET_DOWNSAMPLE_ENABLED", param.det.DET_DOWNSAMPLE_ENABLED)) { diff --git a/src/Circle.h b/src/Circle.h index 0497d88..98f1266 100644 --- a/src/Circle.h +++ b/src/Circle.h @@ -50,20 +50,20 @@ class Circle { private : Point mPos; // Center position. - int mRadius; + int mRadius; public : Circle(Point center, int radius):mPos(center), mRadius(radius) { - + } Point getCenter() { return mPos;}; int getRadius() { return mRadius;}; - bool computeDiskSurfaceIntersection( Circle c2, - float &surfaceCircle1, - float &surfaceCircle2, + bool computeDiskSurfaceIntersection( Circle c2, + float &surfaceCircle1, + float &surfaceCircle2, float &intersectedSurface, bool enableDebug, string debugPath) { @@ -79,10 +79,10 @@ class Circle { if(enableDebug) circle(map, mPos, mRadius, Scalar(0,255,0)); if(enableDebug) circle(map, c2.getCenter(), c2.getRadius(), Scalar(0,0,255)); - + // Distance between two circles centers float distPcNc = sqrt(pow((mPos.x - c2.getCenter().x),2) + pow((mPos.y - c2.getCenter().y),2)); - + // No intersections. if(distPcNc > c2.getRadius() + mRadius) { @@ -102,7 +102,7 @@ class Circle { res = true; }else { - + surfaceCircle1 = M_PI * pow(mRadius,2); surfaceCircle2 = M_PI * pow(c2.getRadius(),2); @@ -112,7 +112,7 @@ class Circle { double y0 = mPos.y; double x1 = c2.getCenter().x; double y1 = c2.getCenter().y; - + if(mPos.y != c2.getCenter().y) { float N = (pow(R1,2) - pow(R0,2) - pow(x1,2) + pow(x0,2) - pow(y1,2) + pow(y0,2)) / (2 * (y0 - y1)); @@ -120,7 +120,7 @@ class Circle { float B = 2*y0*((x0-x1)/(y0-y1))-2*N*((x0-x1)/(y0-y1))-2*x0; float C = pow(x0,2) + pow(y0,2) + pow(N,2) - pow(R0,2) - 2* y0*N; double delta = std::sqrt(pow(B,2)-4*A*C); - + //cout << delta << endl; if(delta > 0) { @@ -130,9 +130,9 @@ class Circle { float resY1 = N - resX1 * ((x0-x1)/(y0-y1)); float resY2 = N - resX2 * ((x0-x1)/(y0-y1)); - + if(enableDebug) line(map, Point(resX1,resY1 ), Point(resX2,resY2 ), Scalar(255,255,255), 1, CV_AA); - + // Circle1 more inside the other if(distPcNc > abs(c2.getRadius() - mRadius) && distPcNc < c2.getRadius() && c2.getRadius() > mRadius) { @@ -144,16 +144,16 @@ class Circle { if(cc>1.0) cc = 1.0; double thetaCircle1 = 2.0* asin(cc); double areaCircle1 = (pow(R0,2)/2) * (thetaCircle1 - sin(thetaCircle1)); - + double ccc = c/(2.0*R1); if(ccc>1.0) ccc=1.0; double thetaCircle2 = 2* asin(ccc); double areaCircle2 = (pow(R1,2)/2) * (thetaCircle2 - sin(thetaCircle2)); - + intersectedSurface = surfaceCircle1 - areaCircle1 + areaCircle2; displayIntersectedSurface = true; - + // Circle2 more inside the other }else if(distPcNc > abs(c2.getRadius() - mRadius )&& distPcNc < mRadius && mRadius > c2.getRadius()) { @@ -161,21 +161,21 @@ class Circle { // Cord length. double c = sqrt(pow((resX1 - resX2),2) + pow((resY1 - resY2),2)); - + double cc = c/(2.0*R0); if(cc>1.0) cc = 1.0; double thetaPosCircle = 2.0* asin(cc); double areaPosCircle = (pow(R0,2)/2) * (thetaPosCircle - sin(thetaPosCircle)); - + double ccc = c/(2.0*R1); if(ccc>1.0) ccc=1.0; double thetaNegCircle = 2* asin(ccc); double areaNegCircle = (pow(R1,2)/2) * (thetaNegCircle - sin(thetaNegCircle)); - + intersectedSurface = surfaceCircle2 - areaNegCircle + areaPosCircle; displayIntersectedSurface = true; - + }else if(distPcNc == c2.getRadius() || distPcNc == mRadius ) { //cout << "Outskirt" << endl; @@ -183,23 +183,23 @@ class Circle { }else { double c = sqrt(pow((resX1 - resX2),2) + pow((resY1 - resY2),2)); - + double cc = c/(2.0*R0); if(cc>1.0) cc = 1.0; double thetaPosCircle = 2.0* asin(cc); double areaPosCircle = (pow(R0,2)/2) * (thetaPosCircle - sin(thetaPosCircle)); - + double ccc = c/(2.0*R1); if(ccc>1.0) ccc=1.0; double thetaNegCircle = 2* asin(ccc); double areaNegCircle = (pow(R1,2)/2) * (thetaNegCircle - sin(thetaNegCircle)); - + intersectedSurface = areaNegCircle + areaPosCircle; displayIntersectedSurface = true; } - + res = true; } @@ -212,7 +212,7 @@ class Circle { float C = pow(x1,2) + pow(x,2) - 2*x1*x + pow(y1,2) - pow(R1,2); double delta = std::sqrt(pow(B,2)-4*A*C); - + if(delta > 0) { float resY1 = (-B-delta) / (2*A); @@ -228,18 +228,18 @@ class Circle { // Cord length. double c = sqrt(pow((resX1 - resX2),2) + pow((resY1 - resY2),2)); - + double cc = c/(2.0*R0); if(cc>1.0) cc = 1.0; double thetaPosCircle = 2.0* asin(cc); - + double areaPosCircle = (pow(R0,2)/2) * (thetaPosCircle - sin(thetaPosCircle)); - + double ccc = c/(2.0*R1); if(ccc>1.0) ccc=1.0; double thetaNegCircle = 2* asin(ccc); double areaNegCircle = (pow(R1,2)/2) * (thetaNegCircle - sin(thetaNegCircle)); - + intersectedSurface = surfaceCircle1 - areaPosCircle + areaNegCircle; displayIntersectedSurface = true; @@ -254,34 +254,34 @@ class Circle { if(cc>1.0) cc = 1.0; double thetaPosCircle = 2.0* asin(cc); double areaPosCircle = (pow(R0,2)/2) * (thetaPosCircle - sin(thetaPosCircle)); - + double ccc = c/(2.0*R1); if(ccc>1.0) ccc=1.0; double thetaNegCircle = 2* asin(ccc); double areaNegCircle = (pow(R1,2)/2) * (thetaNegCircle - sin(thetaNegCircle)); - + intersectedSurface = surfaceCircle2 - areaNegCircle + areaPosCircle; displayIntersectedSurface = true; - + }else if(distPcNc == c2.getRadius() || distPcNc ==mRadius ) { //cout << "Le centre d'un des cercles est sur la périphérie de l'autre" << endl; - + }else { double c = sqrt(pow((resX1 - resX2),2) + pow((resY1 - resY2),2)); - + double cc = c/(2.0*R0); if(cc>1.0) cc = 1.0; double thetaPosCircle = 2.0* asin(cc); double areaPosCircle = (pow(R0,2)/2) * (thetaPosCircle - sin(thetaPosCircle)); - + double ccc = c/(2.0*R1); if(ccc>1.0) ccc=1.0; double thetaNegCircle = 2* asin(ccc); double areaNegCircle = (pow(R1,2)/2) * (thetaNegCircle - sin(thetaNegCircle)); - + intersectedSurface = areaNegCircle + areaPosCircle; displayIntersectedSurface = true; @@ -292,11 +292,11 @@ class Circle { res = true; } - + } } - + if(enableDebug && displayIntersectedSurface) { putText(map, "Intersected surface : " , cvPoint(15,15),FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(0,0,255), 1, CV_AA); @@ -308,9 +308,9 @@ class Circle { } if(enableDebug) SaveImg::saveBMP(map, debugPath); - + return res; } -}; \ No newline at end of file +}; diff --git a/src/DetThread.cpp b/src/DetThread.cpp index 9c90f9c..e96fa83 100644 --- a/src/DetThread.cpp +++ b/src/DetThread.cpp @@ -32,7 +32,8 @@ * \brief Detection thread. */ -#include "DetThread.h" +#include "DetThread.h" +#include boost::log::sources::severity_logger< LogSeverityLevel > DetThread::logger; @@ -766,6 +767,15 @@ bool DetThread::saveEventData(int firstEvPosInFB, int lastEvPosInFB){ } + // *********************************** USER COMMAND *********************************** + if(boost::filesystem::exists(mdtp.DET_EVENT_USER_ACTION) && (*pDetMthd).getEventStatus() ) { + string commandString = mdtp.DET_EVENT_USER_ACTION + " " + mEventPath; + BOOST_LOG_SEV(logger,notification) << "Executing user command : " << commandString; + std::thread t1([this,commandString](){ return system(commandString.c_str()); }); + t1.detach(); + BOOST_LOG_SEV(logger,notification) << "Script left running."; + } + // *********************************** SEND MAIL NOTIFICATION *********************************** BOOST_LOG_SEV(logger,notification) << "Prepare mail..." << mmp.MAIL_DETECTION_ENABLED; if(mmp.MAIL_DETECTION_ENABLED) { diff --git a/src/Detection.h b/src/Detection.h index fe8582a..f1d185d 100644 --- a/src/Detection.h +++ b/src/Detection.h @@ -93,6 +93,16 @@ class Detection { virtual ~Detection() {}; + /** + * Get the event analysis state. + * + * @return bool. + */ + virtual bool getEventStatus() { + return true; + + }; + /** * Run meteor detection method. * @@ -122,11 +132,11 @@ class Detection { * @return Frame number. */ virtual int getEventLastFrameNb() { - + return 0; - + }; - + /** * Get date of the detected event. * diff --git a/src/DetectionTemporal.cpp b/src/DetectionTemporal.cpp index fd7f340..1e26704 100644 --- a/src/DetectionTemporal.cpp +++ b/src/DetectionTemporal.cpp @@ -94,6 +94,17 @@ DetectionTemporal::~DetectionTemporal() { } +bool DetectionTemporal::getEventStatus(){ + bool status = true; + int i = 0; + for(; status && (i < (*mGeToSave).mainPtsValidity.size()); i++) + status &= (*mGeToSave).mainPtsValidity.at(i); + + // true where there are at least TWO tracked points... + return status && (i >= 2); +} + + void DetectionTemporal::resetDetection(bool loadNewDataSet){ BOOST_LOG_SEV(logger, notification) << "Clear global events list."; diff --git a/src/DetectionTemporal.h b/src/DetectionTemporal.h index db728ea..0513e04 100644 --- a/src/DetectionTemporal.h +++ b/src/DetectionTemporal.h @@ -129,6 +129,8 @@ class DetectionTemporal : public Detection { ~DetectionTemporal(); + bool getEventStatus(); + void initMethod(string cfgPath); bool runDetection(Frame &c); diff --git a/src/Doxyfile b/src/Doxyfile index 28c3f2f..8801584 100644 --- a/src/Doxyfile +++ b/src/Doxyfile @@ -44,7 +44,7 @@ PROJECT_NUMBER = 1.0 # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = +PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is included in # the documentation. The maximum height of the logo should not exceed 55 pixels @@ -58,7 +58,7 @@ PROJECT_LOGO = logoFripon.jpg # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = +OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and diff --git a/src/Fits2D.cpp b/src/Fits2D.cpp index 468d237..507d3e3 100644 --- a/src/Fits2D.cpp +++ b/src/Fits2D.cpp @@ -1452,7 +1452,7 @@ bool Fits2D::readFits16US(Mat &img){ nbuffer = npixels; //unsigned short buffer[npixels]; - unsigned short* buffer = new unsigned short[npixels]; + unsigned short* buffer = new unsigned short[npixels]; if(fits_read_img(fptr, TUSHORT, fpixel, nbuffer, &nullval,buffer, &anynull, &status)){ printerror(status); @@ -1480,7 +1480,7 @@ bool Fits2D::readFits16US(Mat &img){ } loadImg.copyTo(img); - delete buffer; + delete buffer; if(fits_close_file(fptr, &status)){ diff --git a/src/HistogramGray.cpp b/src/HistogramGray.cpp index 3cb68f0..9997f2b 100644 --- a/src/HistogramGray.cpp +++ b/src/HistogramGray.cpp @@ -37,7 +37,7 @@ HistogramGray::HistogramGray(){ - bins = Mat(1, 256, CV_32F, Scalar(0.f)); + bins = Mat(1, 256, CV_32F, Scalar(0.f)); } diff --git a/src/LocalEvent.h b/src/LocalEvent.h index 5e6953e..5418492 100644 --- a/src/LocalEvent.h +++ b/src/LocalEvent.h @@ -54,7 +54,7 @@ class LocalEvent { Mat mLeMap; // ROI map. Point mLeMassCenter; // Mass center. int mLeNumFrame; // Associated frame. - + Point mPosMassCenter; Point mNegMassCenter; float mPosRadius; diff --git a/src/OpenSSL.cpp b/src/OpenSSL.cpp index e190008..5f3ad92 100644 --- a/src/OpenSSL.cpp +++ b/src/OpenSSL.cpp @@ -45,21 +45,21 @@ OpenSSL::OpenSSL(int socket): ctx_(nullptr, SSL_CTX_free), ssl_(nullptr, SSL_fre ctx_ = decltype(ctx_ ) (SSL_CTX_new(SSLv23_client_method()), SSL_CTX_free); if(nullptr == ctx_) { BOOST_LOG_SEV(logger,fail) << "SSL_CTX_new failed : " << ERR_error_string(ERR_get_error(), errorBuf); - throw "SSL_CTX_new failed."; + throw "SSL_CTX_new failed."; //throw runtime_error(ERR_error_string(ERR_get_error(), errorBuf)); } ssl_ = decltype(ssl_ ) (SSL_new(ctx_.get()), SSL_free); if(nullptr == ssl_) { BOOST_LOG_SEV(logger,fail) << "SSL_new failed : " << ERR_error_string(ERR_get_error(), errorBuf); - throw "SSL_new failed."; + throw "SSL_new failed."; //throw runtime_error(ERR_error_string(ERR_get_error(), errorBuf)); } const int rstSetFd = SSL_set_fd(ssl_.get(), socket); if(0 == rstSetFd) { BOOST_LOG_SEV(logger,fail) << "SSL_set_fd failed : " << ERR_error_string(ERR_get_error(), errorBuf); - throw "SSL_set_fd failed."; + throw "SSL_set_fd failed."; //throw runtime_error(ERR_error_string(ERR_get_error(), errorBuf)); } @@ -78,7 +78,7 @@ OpenSSL::OpenSSL(int socket): ctx_(nullptr, SSL_CTX_free), ssl_(nullptr, SSL_fre OpenSSL::~OpenSSL() { int rstShutdown = SSL_shutdown(ssl_.get()); - if(0==rstShutdown) + if(0==rstShutdown) rstShutdown = SSL_shutdown(ssl_.get()); else if(-1 == rstShutdown && SSL_RECEIVED_SHUTDOWN != SSL_get_shutdown(ssl_.get())) { BOOST_LOG_SEV(logger,fail) << "Shutdown failed."; @@ -100,4 +100,4 @@ void OpenSSL::Write(const string &msg) { throw "Socket write failed due to unknown reason."; //throw runtime_error("socket write failed due to unknown reason."); } -} \ No newline at end of file +} diff --git a/src/SParam.h b/src/SParam.h index 29b7594..e6c8bcb 100644 --- a/src/SParam.h +++ b/src/SParam.h @@ -215,6 +215,7 @@ struct detectionParam { int DET_UPDATE_MASK_FREQUENCY; bool DET_DEBUG_UPDATE_MASK; bool DET_DOWNSAMPLE_ENABLED; + string DET_EVENT_USER_ACTION; struct detectionMethod1 { bool DET_SAVE_GEMAP; diff --git a/src/Stack.h b/src/Stack.h index 9d8e996..0b62be2 100644 --- a/src/Stack.h +++ b/src/Stack.h @@ -3,7 +3,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% * -* This file is part of: freeture +* This file is part of: freeture * * Copyright: (C) 2014-2015 Yoan Audureau -- FRIPON-GEOPS-UPSUD * diff --git a/src/StackThread.h b/src/StackThread.h index 4dfb18c..98ddea0 100644 --- a/src/StackThread.h +++ b/src/StackThread.h @@ -81,7 +81,7 @@ class StackThread { bool isRunning; bool interruptionStatus; boost::mutex interruptionStatusMutex; - + boost::condition_variable *frameBuffer_condition; boost::mutex *frameBuffer_mutex; boost::circular_buffer *frameBuffer;