diff --git a/dualcamgrabber.cpp b/dualcamgrabber.cpp new file mode 100644 index 0000000..3f073a1 --- /dev/null +++ b/dualcamgrabber.cpp @@ -0,0 +1,29 @@ +#include "dualcamgrabber.h" +#include +#include + +void DualcamGrabber::run() { + stop_request = false; + size_t framecount = 0; + if (wrapper->isOpen()) { + Pylon::CInstantCameraArray &cameras = wrapper->getCameraArray(); + wrapper->frameRate(static_cast(framerate)); + wrapper->exposureTime(exposure); + wrapper->gain(gain); + cameras.StartGrabbing(); + Pylon::CGrabResultPtr frame0, frame1; + + while (cameras.IsGrabbing() && !stop_request) { + MyImage *img = new MyImage(); + cameras.RetrieveResult( 5000, framecount % 2 == 0 ? frame0 : frame1, Pylon::TimeoutHandling_ThrowException ); + img->setFrame(framecount % 2 == 0 ? frame0 : frame1); + if (framecount % 2 == 0) { + buffer0->push(img); + } else { + buffer1->push(img); + } + framecount += 1; + } + cameras.StopGrabbing(); + } +} diff --git a/dualcamgrabber.h b/dualcamgrabber.h new file mode 100644 index 0000000..aef1afa --- /dev/null +++ b/dualcamgrabber.h @@ -0,0 +1,58 @@ +#ifndef DUALCAMGRABBER_H +#define DUALCAMGRABBER_H + +#include +#include +#include "dualcamwrapper.h" +#include "imagebuffer.h" + +class DualcamGrabber : public QThread +{ + Q_OBJECT +public: + DualcamGrabber(DualcamWrapper *wrapper, ImageBuffer *buffer0, ImageBuffer * buffer1, int framerate, QObject *parent = nullptr) : + QThread(parent), wrapper(wrapper), buffer0(buffer0), buffer1(buffer1), framerate(framerate) {} + + void run() override; + void stop(); + int currentFramerate() { + return framerate; + } + + double currentExposureTime() { + return exposure; + } + + double currentGain() { + return gain; + } + +private: + bool stop_request = false; + DualcamWrapper *wrapper; + ImageBuffer *buffer0, *buffer1; + int framerate; + double exposure, gain; + +public slots: + void requestStop() { + stop_request=true; + } + + void setFrameRate(int newFramerate) { + framerate = newFramerate; + } + + void setExposureTime(double newExposureTime) { + exposure = newExposureTime; + } + + void setGain(double gain_db) { + gain = gain_db; + } + +signals: + void terminated(); +}; + +#endif // DUALCAMGRABBER_H