Compare commits
6 Commits
fe20326953
...
softwaretr
| Author | SHA1 | Date | |
|---|---|---|---|
| d20ea22beb | |||
| ec3844ba9c | |||
| 2bed70b971 | |||
| dadce69944 | |||
| d78b9d8b02 | |||
| 23b0a9afcd |
@@ -65,7 +65,7 @@ void CameraPreview::setCamera(QString &device){
|
||||
delete camera;
|
||||
camera = nullptr;
|
||||
}
|
||||
camera = new PylonWrapper(cameraname.toStdString());
|
||||
camera = new SingleCamWrapper(cameraname.toStdString());
|
||||
std::string message;
|
||||
bool success = camera->openCamera(message);
|
||||
if (!success) {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
#include <QPainter>
|
||||
#include <pylon/PylonIncludes.h>
|
||||
|
||||
#include "pylonwrapper.h"
|
||||
#include "singlecamwrapper.h"
|
||||
#include "util.h"
|
||||
namespace Ui {
|
||||
class CameraPreview;
|
||||
@@ -53,7 +53,7 @@ private:
|
||||
void setImage(const QPixmap &img);
|
||||
void validate(QSpinBox *origin, QSpinBox *dest, int limit);
|
||||
|
||||
PylonWrapper *camera;
|
||||
SingleCamWrapper *camera;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -2,6 +2,11 @@
|
||||
#include <iostream>
|
||||
#include <pylon/PylonIncludes.h>
|
||||
#include <stitchimage.h>
|
||||
#include <chrono>
|
||||
using namespace std::chrono;
|
||||
typedef high_resolution_clock Time;
|
||||
typedef milliseconds ms;
|
||||
typedef duration<float> fsec;
|
||||
|
||||
void DualcamGrabber::run() {
|
||||
stop_request = false;
|
||||
@@ -9,9 +14,10 @@ void DualcamGrabber::run() {
|
||||
|
||||
if (wrapper->isOpen()) {
|
||||
Pylon::CInstantCameraArray &cameras = wrapper->getCameraArray();
|
||||
wrapper->frameRate(static_cast<uint>(framerate));
|
||||
wrapper->frameRate(static_cast<uint>(framerate), -1);
|
||||
wrapper->exposureTime(exposure);
|
||||
wrapper->gain(gain);
|
||||
|
||||
cameras.StartGrabbing();
|
||||
Pylon::CGrabResultPtr frame0, frame1;
|
||||
Pylon::CPylonImage leftImage;
|
||||
@@ -19,14 +25,27 @@ void DualcamGrabber::run() {
|
||||
Pylon::CPylonImage stitchedImage;
|
||||
std::string errorMessage = "";
|
||||
|
||||
// int ifi = 0;
|
||||
// int deviation = 0;
|
||||
// std::cerr << wrapper->frameRate(0) << "\t" << wrapper->frameRate(1) << "\t" << framerate << std::endl;
|
||||
// int desired_ifi = (1./wrapper->frameRate(0) * 1000000);
|
||||
// auto framestart = high_resolution_clock::now();
|
||||
while (cameras.IsGrabbing() && !stop_request) {
|
||||
// if (counter > 0) {
|
||||
// deviation = desired_ifi - ifi;
|
||||
// if (deviation > 0)
|
||||
// // usleep(deviation);
|
||||
// std::cerr << desired_ifi << "\t" << deviation << std::endl;
|
||||
// }
|
||||
// auto start = high_resolution_clock::now();
|
||||
MyImage *img = new MyImage();
|
||||
// auto stop1 = high_resolution_clock::now();
|
||||
cameras[0].RetrieveResult( 5000, frame0, Pylon::TimeoutHandling_ThrowException );
|
||||
// auto stop2 = high_resolution_clock::now();
|
||||
cameras[1].RetrieveResult( 5000, frame1, Pylon::TimeoutHandling_ThrowException );
|
||||
|
||||
// auto stop3 = high_resolution_clock::now();
|
||||
leftImage.AttachGrabResultBuffer( frame0 );
|
||||
rightImage.AttachGrabResultBuffer( frame1 );
|
||||
|
||||
if (leftImage.IsValid() && rightImage.IsValid()) {
|
||||
try {
|
||||
StitchImage::StitchToRight(leftImage, rightImage, &stitchedImage, errorMessage);
|
||||
@@ -36,6 +55,17 @@ void DualcamGrabber::run() {
|
||||
std::cerr << e.what() << '\n';
|
||||
}
|
||||
}
|
||||
// auto stop4 = high_resolution_clock::now();
|
||||
// auto duration1 = duration_cast<microseconds>(stop1 - start);
|
||||
// auto duration2 = duration_cast<microseconds>(stop2 - stop1);
|
||||
// auto duration3 = duration_cast<microseconds>(stop3 - stop2);
|
||||
// auto duration4 = duration_cast<microseconds>(stop4 - stop3);
|
||||
// std::cerr << "framecount: " << counter << " image constr: " << duration1.count() << "\t" << " retrieve1: " << duration2.count() << "\t" << " retrieve2: " << duration3.count() << "\t" << "conversion: " << duration4.count() << std::endl;
|
||||
// ifi = duration_cast<microseconds>(stop4 - framestart).count();
|
||||
// framestart = stop4;
|
||||
// if (counter > 0) {
|
||||
// std::cerr << "frame " << counter << " inter frame interval: " << ifi << "microseconds" << std::endl;
|
||||
// }
|
||||
counter += 1;
|
||||
}
|
||||
cameras.StopGrabbing();
|
||||
|
||||
@@ -54,8 +54,8 @@ bool DualcamWrapper::frameRate(uint new_framerate, int camindex) {
|
||||
frameRate(new_framerate, 0);
|
||||
frameRate(new_framerate, 1);
|
||||
return true;
|
||||
} else if (camindex == 0 && camindex ==1) {
|
||||
GenApi::INodeMap& nodemap = getNodemap(0);
|
||||
} else if (camindex >= 0 && camindex < 2) {
|
||||
GenApi::INodeMap& nodemap = getNodemap(camindex);
|
||||
GenApi::INode* n = nodemap.GetNode( "AcquisitionFrameRateEnable" );
|
||||
Pylon::CBooleanParameter enableframerate(n);
|
||||
enableframerate.SetValue(true);
|
||||
@@ -72,7 +72,7 @@ bool DualcamWrapper::frameRate(uint new_framerate, int camindex) {
|
||||
|
||||
|
||||
double DualcamWrapper::frameRate(int camindex) {
|
||||
assert(camindex > 0 && camindex < 2);
|
||||
assert(camindex >= 0 && camindex < 2);
|
||||
double rate = -1.;
|
||||
if (valid) {
|
||||
GenApi::INodeMap& nodemap = getNodemap(camindex);
|
||||
@@ -173,14 +173,14 @@ bool DualcamWrapper::grabFrame(MyImage &img, int camindex) {
|
||||
qDebug() << "grabFrame from camera " << camindex;
|
||||
if (valid) {
|
||||
GenApi::INodeMap &nodemap = getNodemap(camindex);
|
||||
qDebug() << "Setting width" << layout.rois[0].width;
|
||||
Pylon::CIntegerParameter(nodemap, "Width").SetValue(layout.rois[0].width);
|
||||
qDebug() << "Setting width" << layout.rois[camindex].width;
|
||||
Pylon::CIntegerParameter(nodemap, "Width").SetValue(layout.rois[camindex].width);
|
||||
qDebug() << "Setting height" << layout.rois[0].height;
|
||||
Pylon::CIntegerParameter(nodemap, "Height").SetValue(layout.rois[0].height);
|
||||
qDebug() << "Setting xoffset" << layout.rois[0].x;
|
||||
Pylon::CIntegerParameter(nodemap, "OffsetX").SetValue(layout.rois[0].x);
|
||||
qDebug() << "Setting yoffset" << layout.rois[0].y;
|
||||
Pylon::CIntegerParameter(nodemap, "OffsetY").SetValue(layout.rois[0].y);
|
||||
Pylon::CIntegerParameter(nodemap, "Height").SetValue(layout.rois[camindex].height);
|
||||
qDebug() << "Setting xoffset" << layout.rois[camindex].x;
|
||||
Pylon::CIntegerParameter(nodemap, "OffsetX").SetValue(layout.rois[camindex].x);
|
||||
qDebug() << "Setting yoffset" << layout.rois[camindex].y;
|
||||
Pylon::CIntegerParameter(nodemap, "OffsetY").SetValue(layout.rois[camindex].y);
|
||||
|
||||
camera->StartGrabbing();
|
||||
camera->RetrieveResult( 5000, frame, Pylon::TimeoutHandling_ThrowException);
|
||||
@@ -191,15 +191,25 @@ bool DualcamWrapper::grabFrame(MyImage &img, int camindex) {
|
||||
}
|
||||
|
||||
|
||||
void DualcamWrapper::setROI() {
|
||||
for (int camindex = 0; camindex < 2; camindex++){
|
||||
qDebug() << "Setting ROI: w" << layout.rois[camindex].width << " h: "<< layout.rois[camindex].height << " x " << layout.rois[camindex].x << " y " << layout.rois[camindex].y;
|
||||
GenApi::INodeMap &nodemap = getNodemap(camindex);
|
||||
Pylon::CIntegerParameter(nodemap, "Width").SetValue(layout.rois[camindex].width);
|
||||
Pylon::CIntegerParameter(nodemap, "Height").SetValue(layout.rois[camindex].height);
|
||||
Pylon::CIntegerParameter(nodemap, "OffsetX").SetValue(layout.rois[camindex].x);
|
||||
Pylon::CIntegerParameter(nodemap, "OffsetY").SetValue(layout.rois[camindex].y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DualcamWrapper::resetCamera(int camindex) {
|
||||
GenApi::INodeMap &nodemap = getNodemap( camindex );
|
||||
int64_t dfltWidth = 2048;
|
||||
int64_t dfltHeight = 1536;
|
||||
qDebug() << "resetting camera to default ROI (" << dfltWidth << ", " << dfltHeight << ")";
|
||||
try {
|
||||
// std::cerr << "MaxWidth: " << Pylon::CIntegerParameter(nodemap, "WidthMax").GetValue() << std::endl;
|
||||
Pylon::CIntegerParameter(nodemap, "Width").SetValue(dfltWidth, false);
|
||||
// std::cerr << "MaxHeight: " << Pylon::CIntegerParameter(nodemap, "HeightMax").GetValue() << std::endl;
|
||||
Pylon::CIntegerParameter(nodemap, "Height").SetValue(dfltHeight, false);
|
||||
Pylon::CIntegerParameter(nodemap, "OffsetX").SetValue(0);
|
||||
Pylon::CIntegerParameter(nodemap, "OffsetY").SetValue(0);
|
||||
@@ -229,8 +239,9 @@ bool DualcamWrapper::openCameras(std::string &message) {
|
||||
valid = false;
|
||||
return valid;
|
||||
}
|
||||
resetCamera(0);
|
||||
resetCamera(1);
|
||||
// resetCamera(0);
|
||||
// resetCamera(1);
|
||||
setROI();
|
||||
return valid;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ public:
|
||||
DualcamWrapper(const CameraLayout &layout);
|
||||
~DualcamWrapper();
|
||||
|
||||
|
||||
ImageSettings getImageSettings(int camindex);
|
||||
bool isOpen();
|
||||
void terminate();
|
||||
@@ -35,6 +34,7 @@ private:
|
||||
void resetCamera(int camindex);
|
||||
Pylon::CInstantCameraArray cameras;
|
||||
GenApi::INodeMap& getNodemap(int camindex);
|
||||
void setROI();
|
||||
bool valid, withLayout;
|
||||
CameraLayout layout;
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@ bool MyImage::setFrame( Pylon::CPylonImage &img) {
|
||||
img_width = img.GetWidth();
|
||||
img_height = img.GetHeight();
|
||||
memcpy(&buffer, img.GetBuffer(), img.GetImageSize());
|
||||
auto t = std::chrono::system_clock::now();
|
||||
img_timestamp = std::chrono::system_clock::to_time_t(t);
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
|
||||
@@ -652,7 +652,7 @@ void PylonRecorder::connectCamera() {
|
||||
std::string cname = layout.devices[0];
|
||||
std::string message;
|
||||
qDebug() << "connecting to camera " << cname.c_str();
|
||||
singlecam = new PylonWrapper(layout);
|
||||
singlecam = new SingleCamWrapper(layout);
|
||||
bool success = singlecam->openCamera(message);
|
||||
if (success) {
|
||||
cameraConnectedLabel->setText("connected");
|
||||
@@ -762,7 +762,7 @@ void PylonRecorder::startSinglecamRecording() {
|
||||
delete singlecamgrabber;
|
||||
singlecamgrabber = nullptr;
|
||||
}
|
||||
singlecamgrabber = new Grabber(singlecam, buffer, defaultFrameRate);
|
||||
singlecamgrabber = new SinglecamGrabber(singlecam, buffer, defaultFrameRate);
|
||||
|
||||
if (framerateSpinner->value() != singlecamgrabber->currentFramerate())
|
||||
singlecamgrabber->setFrameRate(framerateSpinner->value());
|
||||
@@ -776,8 +776,8 @@ void PylonRecorder::startSinglecamRecording() {
|
||||
delete writer;
|
||||
writer = nullptr;
|
||||
}
|
||||
writer = new Writer(buffer, 0);
|
||||
connect(writer, SLOT(writingDone()), this, SLOT(writerDone()));
|
||||
writer = new Writer(buffer);
|
||||
connect(writer, SIGNAL(writingDone()), this, SLOT(writerDone()));
|
||||
writer->setVideoSpecs(specs);
|
||||
|
||||
QSettings s;
|
||||
@@ -807,7 +807,7 @@ void PylonRecorder::startDualcamRecording() {
|
||||
VideoSpecs specs = getVideoSpecs(settings);
|
||||
specs.filename = filename;
|
||||
specs.format = VideoFormat::mp4;
|
||||
qDebug() << "got video specifications";
|
||||
qDebug() << "got video specifications " << specs.fps;
|
||||
if (buffer != nullptr) {
|
||||
buffer->clear();
|
||||
delete buffer;
|
||||
@@ -839,7 +839,7 @@ void PylonRecorder::startDualcamRecording() {
|
||||
delete writer;
|
||||
writer = nullptr;
|
||||
}
|
||||
writer = new Writer(buffer, 0);
|
||||
writer = new Writer(buffer);
|
||||
connect(writer, SIGNAL(writingDone()), this, SLOT(writerDone()));
|
||||
writer->setVideoSpecs(specs);
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
#include <QCheckBox>
|
||||
#include <QSettings>
|
||||
#include <pylon/PylonIncludes.h>
|
||||
#include "pylonwrapper.h"
|
||||
#include "singlecamwrapper.h"
|
||||
#include "dualcamwrapper.h"
|
||||
#include "imagebuffer.h"
|
||||
#include "grabber.h"
|
||||
#include "singlecamgrabber.h"
|
||||
#include "dualcamgrabber.h"
|
||||
#include "writer.h"
|
||||
#include "projectsettings.h"
|
||||
@@ -105,10 +105,10 @@ private:
|
||||
QProgressBar *loadBar;
|
||||
QScrollArea *scrollArea;
|
||||
double scaleFactor = 1;
|
||||
PylonWrapper *singlecam;
|
||||
SingleCamWrapper *singlecam;
|
||||
DualcamWrapper *dualcam;
|
||||
ImageBuffer *buffer;
|
||||
Grabber *singlecamgrabber;
|
||||
SinglecamGrabber *singlecamgrabber;
|
||||
DualcamGrabber *dualcamgrabber;
|
||||
Writer *writer;
|
||||
CameraLayout layout;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#include "grabber.h"
|
||||
#include "singlecamgrabber.h"
|
||||
#include <iostream>
|
||||
#include <pylon/PylonIncludes.h>
|
||||
|
||||
void Grabber::run() {
|
||||
void SinglecamGrabber::run() {
|
||||
stop_request = false;
|
||||
int count = 0;
|
||||
if (camera->isOpen()) {
|
||||
@@ -1,16 +1,16 @@
|
||||
#ifndef GRABBER_H
|
||||
#define GRABBER_H
|
||||
#ifndef SINGLECAMGRABBER_H
|
||||
#define SINGLECAMGRABBER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QThread>
|
||||
#include "pylonwrapper.h"
|
||||
#include "singlecamwrapper.h"
|
||||
#include "imagebuffer.h"
|
||||
|
||||
class Grabber : public QThread
|
||||
class SinglecamGrabber : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Grabber(PylonWrapper *camera, ImageBuffer*buffer, int framerate, QObject *parent = nullptr) :
|
||||
SinglecamGrabber(SingleCamWrapper *camera, ImageBuffer*buffer, int framerate, QObject *parent = nullptr) :
|
||||
QThread(parent), camera(camera), buffer(buffer), framerate(framerate) {}
|
||||
|
||||
void run() override;
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
|
||||
private:
|
||||
bool stop_request = false;
|
||||
PylonWrapper *camera;
|
||||
SingleCamWrapper *camera;
|
||||
ImageBuffer *buffer;
|
||||
int framerate;
|
||||
double exposure, gain;
|
||||
@@ -51,4 +51,4 @@ signals:
|
||||
void terminated();
|
||||
};
|
||||
|
||||
#endif // GRABBER_H
|
||||
#endif // SINGLECAMGRABBER_H
|
||||
@@ -1,19 +1,19 @@
|
||||
#include "pylonwrapper.h"
|
||||
#include "singlecamwrapper.h"
|
||||
|
||||
PylonWrapper::PylonWrapper(const std::string &fullName):
|
||||
SingleCamWrapper::SingleCamWrapper(const std::string &fullName):
|
||||
valid(false), fullName(fullName), camera(nullptr), withLayout(false) {
|
||||
qDebug() << "Constructor with name";
|
||||
Pylon::PylonInitialize();
|
||||
}
|
||||
|
||||
PylonWrapper::PylonWrapper(const CameraLayout &layout): valid(false), withLayout(true), camera(nullptr) {
|
||||
SingleCamWrapper::SingleCamWrapper(const CameraLayout &layout): valid(false), withLayout(true), camera(nullptr) {
|
||||
qDebug() << "Constructor with layout";
|
||||
this->fullName = layout.devices[0];
|
||||
this->layout = layout;
|
||||
Pylon::PylonInitialize();
|
||||
}
|
||||
|
||||
PylonWrapper::~PylonWrapper() {
|
||||
SingleCamWrapper::~SingleCamWrapper() {
|
||||
qDebug() << "wrapper destructor";
|
||||
if (camera != nullptr){
|
||||
if (camera->IsOpen()) {
|
||||
@@ -27,7 +27,7 @@ PylonWrapper::~PylonWrapper() {
|
||||
qDebug() << "Successfully deleted camera";
|
||||
}
|
||||
|
||||
void PylonWrapper::terminate() {
|
||||
void SingleCamWrapper::terminate() {
|
||||
qDebug() << "Terminate";
|
||||
try {
|
||||
Pylon::PylonTerminate();
|
||||
@@ -36,11 +36,11 @@ void PylonWrapper::terminate() {
|
||||
}
|
||||
}
|
||||
|
||||
bool PylonWrapper::isOpen() {
|
||||
bool SingleCamWrapper::isOpen() {
|
||||
return valid;
|
||||
}
|
||||
|
||||
double PylonWrapper::maxFrameRate() {
|
||||
double SingleCamWrapper::maxFrameRate() {
|
||||
double max_rate = -1;
|
||||
if (valid) {
|
||||
GenApi::INodeMap& nodemap = camera->GetNodeMap();
|
||||
@@ -51,7 +51,7 @@ double PylonWrapper::maxFrameRate() {
|
||||
return max_rate;
|
||||
}
|
||||
|
||||
bool PylonWrapper::frameRate(uint new_framerate) {
|
||||
bool SingleCamWrapper::frameRate(uint new_framerate) {
|
||||
if (valid) {
|
||||
GenApi::INodeMap& nodemap = camera->GetNodeMap();
|
||||
GenApi::INode* n = nodemap.GetNode( "AcquisitionFrameRateEnable" );
|
||||
@@ -66,7 +66,7 @@ bool PylonWrapper::frameRate(uint new_framerate) {
|
||||
return false;
|
||||
}
|
||||
|
||||
double PylonWrapper::frameRate() {
|
||||
double SingleCamWrapper::frameRate() {
|
||||
double rate = -1.;
|
||||
if (valid) {
|
||||
GenApi::INodeMap& nodemap = camera->GetNodeMap();
|
||||
@@ -77,7 +77,7 @@ double PylonWrapper::frameRate() {
|
||||
return rate;
|
||||
}
|
||||
|
||||
double PylonWrapper::exposureTime() {
|
||||
double SingleCamWrapper::exposureTime() {
|
||||
double time = -1.;
|
||||
if (valid) {
|
||||
GenApi::INodeMap& nodemap = camera->GetNodeMap();
|
||||
@@ -88,7 +88,7 @@ double PylonWrapper::exposureTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
bool PylonWrapper::exposureTime(double exposure_time) {
|
||||
bool SingleCamWrapper::exposureTime(double exposure_time) {
|
||||
if (valid) {
|
||||
GenApi::INodeMap& nodemap = camera->GetNodeMap();
|
||||
double d = GenApi::CFloatPtr(nodemap.GetNode("ExposureTime"))->GetValue();
|
||||
@@ -105,7 +105,7 @@ bool PylonWrapper::exposureTime(double exposure_time) {
|
||||
return false;
|
||||
}
|
||||
|
||||
double PylonWrapper::gain() {
|
||||
double SingleCamWrapper::gain() {
|
||||
double gain = -1.;
|
||||
if (valid) {
|
||||
GenApi::INodeMap& nodemap = camera->GetNodeMap();
|
||||
@@ -116,7 +116,7 @@ double PylonWrapper::gain() {
|
||||
return gain;
|
||||
}
|
||||
|
||||
bool PylonWrapper::gain(double gain_db) {
|
||||
bool SingleCamWrapper::gain(double gain_db) {
|
||||
if (valid) {
|
||||
GenApi::INodeMap& nodemap = camera->GetNodeMap();
|
||||
GenApi::CFloatPtr(nodemap.GetNode("Gain"))->SetValue(gain_db);
|
||||
@@ -125,7 +125,7 @@ bool PylonWrapper::gain(double gain_db) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ImageSettings PylonWrapper::getImageSettings() {
|
||||
ImageSettings SingleCamWrapper::getImageSettings() {
|
||||
ImageSettings settings;
|
||||
if (valid) {
|
||||
Pylon::CEnumParameter pixelFormat( camera->GetNodeMap(), "PixelFormat" );
|
||||
@@ -141,7 +141,7 @@ ImageSettings PylonWrapper::getImageSettings() {
|
||||
return settings;
|
||||
}
|
||||
|
||||
bool PylonWrapper::grabFrame(MyImage &img) {
|
||||
bool SingleCamWrapper::grabFrame(MyImage &img) {
|
||||
Pylon::CGrabResultPtr frame;
|
||||
qDebug() << "grabFrame";
|
||||
if (valid) {
|
||||
@@ -162,7 +162,7 @@ bool PylonWrapper::grabFrame(MyImage &img) {
|
||||
return frame.IsValid();
|
||||
}
|
||||
|
||||
void PylonWrapper::resetCamera() {
|
||||
void SingleCamWrapper::resetCamera() {
|
||||
int64_t dfltWidth = 2048;
|
||||
int64_t dfltHeight = 1536;
|
||||
qDebug() << "resetting camera to default ROI (" << dfltWidth << ", " << dfltHeight << ")";
|
||||
@@ -181,7 +181,7 @@ void PylonWrapper::resetCamera() {
|
||||
}
|
||||
}
|
||||
|
||||
bool PylonWrapper::openCamera(std::string &message) {
|
||||
bool SingleCamWrapper::openCamera(std::string &message) {
|
||||
qDebug() << "opening camera";
|
||||
try {
|
||||
camera = new Pylon::CInstantCamera();
|
||||
@@ -215,7 +215,7 @@ bool PylonWrapper::openCamera(std::string &message) {
|
||||
return valid;
|
||||
}
|
||||
|
||||
void PylonWrapper::closeCamera() {
|
||||
void SingleCamWrapper::closeCamera() {
|
||||
qDebug() << "Close camera!";
|
||||
if (camera->IsOpen()) {
|
||||
try {
|
||||
@@ -229,11 +229,11 @@ void PylonWrapper::closeCamera() {
|
||||
}
|
||||
}
|
||||
|
||||
Pylon::CInstantCamera *PylonWrapper::getCamera() {
|
||||
Pylon::CInstantCamera *SingleCamWrapper::getCamera() {
|
||||
return camera;
|
||||
}
|
||||
|
||||
QString PylonWrapper::userName() {
|
||||
QString SingleCamWrapper::userName() {
|
||||
GenApi::INodeMap& nodemap = camera->GetNodeMap();
|
||||
QString username = Pylon::CStringParameter(nodemap, "DeviceUserID").GetValue().c_str();
|
||||
return username;
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef PYLONWRAPPER_H
|
||||
#define PYLONWRAPPER_H
|
||||
#ifndef SINGLECAMWRAPPER_H
|
||||
#define SINGLECAMWRAPPER_H
|
||||
|
||||
#include <pylon/PylonIncludes.h>
|
||||
#include <pylon/BaslerUniversalInstantCamera.h>
|
||||
@@ -7,12 +7,12 @@
|
||||
#include "util.h"
|
||||
#include "myimage.h"
|
||||
|
||||
class PylonWrapper
|
||||
class SingleCamWrapper
|
||||
{
|
||||
public:
|
||||
PylonWrapper(const std::string &name);
|
||||
PylonWrapper(const CameraLayout &layout);
|
||||
~PylonWrapper();
|
||||
SingleCamWrapper(const std::string &name);
|
||||
SingleCamWrapper(const CameraLayout &layout);
|
||||
~SingleCamWrapper();
|
||||
|
||||
ImageSettings getImageSettings();
|
||||
bool isOpen();
|
||||
@@ -41,4 +41,4 @@ private:
|
||||
|
||||
};
|
||||
|
||||
#endif // PYLONWRAPPER_H
|
||||
#endif // SINGLECAMWRAPPER_H
|
||||
15
writer.cpp
15
writer.cpp
@@ -1,9 +1,7 @@
|
||||
#include "writer.h"
|
||||
#include <chrono>
|
||||
#include <fstream>
|
||||
|
||||
#include <pylon/VideoWriter.h>
|
||||
using namespace std::chrono;
|
||||
|
||||
void Writer::setVideoSpecs(VideoSpecs specs) {
|
||||
videoSpecs = specs;
|
||||
@@ -37,7 +35,7 @@ void Writer::run() {
|
||||
// Releases all pylon resources.
|
||||
// PylonTerminate();
|
||||
// Return with error code 1.
|
||||
emit writingDone(this->cam_number);
|
||||
emit writingDone();
|
||||
return;
|
||||
}
|
||||
qDebug() << "checks done!";
|
||||
@@ -114,7 +112,12 @@ void Writer::run() {
|
||||
}
|
||||
}
|
||||
if (count < chunksize) {
|
||||
stamps_buffer[count] = nix::util::timeToStr(img->timestamp());
|
||||
try {
|
||||
stamps_buffer[count] = nix::util::timeToStr(img->timestamp());
|
||||
} catch (...) {
|
||||
std::cerr << "Bad time to string conversion " << img->timestamp() << std::endl;
|
||||
stamps_buffer[count] = "invalid";
|
||||
}
|
||||
ids_buffer[count] = img->index();
|
||||
count ++;
|
||||
} else {
|
||||
@@ -138,11 +141,11 @@ void Writer::run() {
|
||||
frametimes.setData(nix::DataType::String, stamps_buffer.data(), chunk_shape, offset);
|
||||
frameindices.setData(nix::DataType::Int64, ids_buffer.data(), chunk_shape, offset);
|
||||
}
|
||||
// videoWriter.Close();
|
||||
videoWriter.Close();
|
||||
myFile.close();
|
||||
nix_file.close();
|
||||
} else {
|
||||
std::cerr << "Got no video specifications, not writing!" << std::endl;
|
||||
}
|
||||
emit writingDone(cam_number);
|
||||
emit writingDone();
|
||||
}
|
||||
|
||||
9
writer.h
9
writer.h
@@ -6,7 +6,7 @@
|
||||
#include <pylon/PylonIncludes.h>
|
||||
#include <nix.hpp>
|
||||
|
||||
#include "pylonwrapper.h"
|
||||
#include "singlecamwrapper.h"
|
||||
#include "imagebuffer.h"
|
||||
#include "projectsettings.h"
|
||||
#include "util.h"
|
||||
@@ -15,8 +15,8 @@ class Writer : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Writer(ImageBuffer*buffer, int number, QObject *parent = nullptr) :
|
||||
QThread(parent), buffer(buffer), cam_number(number) {}
|
||||
explicit Writer(ImageBuffer*buffer, QObject *parent = nullptr) :
|
||||
QThread(parent), buffer(buffer) {}
|
||||
|
||||
void setVideoSpecs(VideoSpecs specs);
|
||||
void setProjectMetadata(ProjectMetadata mdata);
|
||||
@@ -25,10 +25,9 @@ public:
|
||||
|
||||
signals:
|
||||
void terminated();
|
||||
void writingDone(int cam);
|
||||
void writingDone();
|
||||
|
||||
private:
|
||||
int cam_number;
|
||||
ImageBuffer *buffer;
|
||||
VideoSpecs videoSpecs;
|
||||
ProjectMetadata metadata;
|
||||
|
||||
Reference in New Issue
Block a user