PylonRecorder/writer.h
2024-03-08 10:14:45 +01:00

62 lines
1.2 KiB
C++

#ifndef WRITER_H
#define WRITER_H
#include <QObject>
#include <QThread>
#include <pylon/PylonIncludes.h>
#include <nix.hpp>
#include "pylonwrapper.h"
#include "imagebuffer.h"
#include "projectsettings.h"
#include <opencv2/opencv.hpp>
#include "util.h"
struct VideoSpecs {
std::string filename;
uint32_t width, height, quality = 10;
uint32_t xoffset, yoffset = 0;
int fps;
double exposureTime;
double detectorGain;
Pylon::EPixelType pixelType;
Pylon::EImageOrientation orientation;
VideoFormat format = VideoFormat::raw;
};
class Writer : public QThread
{
Q_OBJECT
public:
explicit Writer(ImageBuffer*buffer, QObject *parent = nullptr) :
QThread(parent), buffer(buffer) {}
void setVideoSpecs(VideoSpecs specs);
void setProjectMetadata(ProjectMetadata mdata);
void run() override;
void stop();
signals:
void terminated();
void writingDone();
private:
ImageBuffer *buffer;
VideoSpecs videoSpecs;
ProjectMetadata metadata;
bool stop_request = false, stopNow = false;
bool specs_valid = false, metadata_valid = false;
void writeMetadata(nix::Section &s);
public slots:
void requestStop() {
stop_request=true;
}
void forceStop() {
stopNow = true;
}
};
#endif // WRITER_H