diff --git a/src/cameramanager.cpp b/src/cameramanager.cpp index 8c52d20..5cfbc2d 100644 --- a/src/cameramanager.cpp +++ b/src/cameramanager.cpp @@ -49,10 +49,12 @@ void CameraManager::connectCamera(unsigned int index) { // The capture callback is a wrapper to emit the frameCaptured signal. void CameraManager::captureCallback(FlyCapture2::Image* image, const void *camManager) { + lock.lock(); if(camManager) { static_cast(camManager)->frameCaptured(image); } qDebug() << "here"; + lock.unlock(); return; } diff --git a/src/cameramanager.h b/src/cameramanager.h index d0ce2c0..4325681 100644 --- a/src/cameramanager.h +++ b/src/cameramanager.h @@ -11,6 +11,7 @@ // TODO: implement camera arrival removal #include #include "FlyCapture2.h" +#include class CameraManager : public QObject { @@ -24,7 +25,7 @@ public: // Throws FlyCapture2::Error void startCapture(); void stopCapture(); - + //TODO remove, if not needed const FlyCapture2::Camera* getCamera() const { return &camera; @@ -67,6 +68,9 @@ private: // State Variable bool is_capturing; + // Make captureCallback thread safe + static QMutex lock; + signals: void frameCaptured(FlyCapture2::Image* image) const; }; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 47843fa..837bea5 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -126,12 +126,10 @@ void MainWindow::toggle_preview(bool checked) { } void MainWindow::frame_captured(FlyCapture2::Image* image) { - test.lock(); qDebug() << "Image Captured!"; - // If preview is activated... -// if(ui->preview_widget->isVisible()) -// displayPreview(image); - test.unlock(); + If preview is activated... + if(ui->preview_widget->isVisible()) + displayPreview(image); return; } diff --git a/src/recorder.cpp b/src/recorder.cpp index a51388e..9955301 100644 --- a/src/recorder.cpp +++ b/src/recorder.cpp @@ -135,7 +135,7 @@ void Recorder::cleanup() { void Recorder::appendFrame(FlyCapture2::Image *image) { write_lock.lock(); - // If not recording, just stop. + // If not recording, just stop. if(!is_recording) return;