grabbing still in single camera mode works again

This commit is contained in:
Jan Grewe 2024-03-04 18:13:45 +01:00
parent 203063d83d
commit 6a82c8d640
2 changed files with 60 additions and 48 deletions

View File

@ -21,7 +21,6 @@
#include <iostream>
#include <chrono>
#include <cmath>
#include "util.h"
#if defined(QT_PRINTSUPPORT_LIB)
# include <QtPrintSupport/qtprintsupportglobal.h>
@ -120,33 +119,39 @@ PylonRecorder::PylonRecorder(QWidget *parent)
applySettings();
}
void PylonRecorder::setupCameras(){
for (auto dev : deviceList) {
std::cout << dev.GetFullName() << " " << dev.GetFriendlyName() << std::endl;
}
std::cout << "peng\n";
std::cout << deviceList.size() << std::endl;
std::cout << "peng\n";
if (deviceList.size() == 0) {
qWarning() << "device list is empty!";
QErrorMessage message(this);
message.showMessage("No camera detected!");
} else {
std::cout << "peng\n";
// std::string cname = (std::string)deviceList[0].GetFullName();
// pyloncam = new PylonWrapper(cname);
qDebug() << "Creating buffer, grabber, and writer";
buffer = new ImageBuffer(defaultBufferSize);
grabber = new Grabber(pyloncam, buffer, defaultFrameRate);
writer = new Writer(buffer);
connect(writer, &Writer::writingDone, this, &PylonRecorder::writerDone);
}
}
// void PylonRecorder::setupCameras(){
// std::cerr << "Setting up cameras!" << std::endl;
// qDebug() << "setting up cameras";
// for (auto dev : deviceList) {
// std::cout << dev.GetFullName() << " " << dev.GetFriendlyName() << std::endl;
// }
// std::string s = "detected ";
// s += deviceList.size();
// s += " devices";
// qDebug() << s.c_str();
// if (deviceList.size() == 0) {
// qWarning() << "device list is empty!";
// QErrorMessage message(this);
// message.showMessage("No camera detected!");
// } else {
// std::cout << "peng\n";
// std::string cname = (std::string)deviceList[0].GetFullName();
// // qDebug() <<
// // pyloncam = new PylonWrapper(cname);
// qDebug() << "Creating buffer, grabber, and writer";
// buffer = new ImageBuffer(defaultBufferSize);
// grabber = new Grabber(pyloncam, buffer, defaultFrameRate);
// writer = new Writer(buffer);
// connect(writer, &Writer::writingDone, this, &PylonRecorder::writerDone);
// }
// }
void PylonRecorder::detectCameras() {
qDebug() << "Detecting devices!";
Pylon::CTlFactory& TlFactory = Pylon::CTlFactory::GetInstance();
TlFactory.EnumerateDevices(deviceList);
qDebug() << "Found devices!" << deviceList.size();
}
PylonRecorder::~PylonRecorder(){
@ -607,17 +612,14 @@ void PylonRecorder::cameraConfiguration(){
}
void PylonRecorder::camerasetup() {
std::cerr << "camera settings accepted1" << std::endl;
std::cerr << d->result() << std::endl;
std::cerr << "camera settings accepted2" << std::endl;
CameraLayout l = d->layout();
std::cerr << l.rois.size() << l.devices.size() << std::endl;
std::cerr << "camera settings accepted3" << std::endl;
qDebug() << "Cameras setting " << ((d->result()) ? "Accepted" : "Dicarded");
this->layout = d->layout();
delete d;
}
void PylonRecorder::connectCamera() {
this->layout = CameraLayout();
qDebug() << "connecting camera(s)";
if (deviceList.size() == 0) {
detectCameras();
QMessageBox msgBox;
@ -625,23 +627,29 @@ void PylonRecorder::connectCamera() {
msgBox.setText(msg);
msgBox.exec();
} else {
// std::string cname = (std::string)deviceList[0].GetFullName();
// pyloncam = new PylonWrapper(cname);
// std::string message;
// bool success = pyloncam->openCamera(message);
// if (success) {
// cameraConnectedLabel->setText("connected");
// cameraConnectedLabel->setStyleSheet("QLabel { font-size: 10px;font-family: Arial;color: green;}");
// } else {
// QMessageBox msgBox;
// QString msg = "<p><b>Could not open camera device!</b><p><p>" + QString::fromStdString(message) + "</p>";
// msgBox.setText(msg);
// msgBox.exec();
// }
// statusBar()->showMessage(QString::fromStdString(message));
// updateActions();
cameraConfiguration();
if (layout.mode == CameraMode::single) {
qDebug() << "single camera mode";
assert(layout.devices.size() == 1);
std::string cname = layout.devices[0];
std::string message;
qDebug() << "connecting to camera " << cname.c_str();
pyloncam = new PylonWrapper(cname);
bool success = pyloncam->openCamera(message);
if (success) {
cameraConnectedLabel->setText("connected");
cameraConnectedLabel->setStyleSheet("QLabel { font-size: 10px;font-family: Arial;color: green;}");
} else {
QMessageBox msgBox;
QString msg = "<p><b>Could not open camera device!</b><p><p>" + QString::fromStdString(message) + "</p>";
msgBox.setText(msg);
msgBox.exec();
}
statusBar()->showMessage(QString::fromStdString(message));
updateActions();
}
}
qDebug() << "connecting cam(s) done!";
}
@ -803,7 +811,8 @@ void PylonRecorder::displayBufferPressure() {
void PylonRecorder::grabStillFromPylon() {
if (pyloncam->isOpen()) {
qDebug() << "Grab still image form camera!";
if (pyloncam != nullptr && pyloncam->isOpen()) {
MyImage img;
bool valid = pyloncam->grabFrame(img);
if (valid) {
@ -814,6 +823,7 @@ void PylonRecorder::grabStillFromPylon() {
} else {
statusBar()->showMessage(tr("Camera is not open! Connect to camera first!"));
}
qDebug() << "grabbing still image done!";
}

View File

@ -13,6 +13,7 @@
#include "writer.h"
#include "projectsettings.h"
#include "camconfig.h"
#include "util.h"
#include <QImage>
#if defined(QT_PRINTSUPPORT_LIB)
@ -86,7 +87,7 @@ private:
void applyScaling();
void adjustScrollBar(QScrollBar *scrollBar, double factor);
void detectCameras();
void setupCameras();
// void setupCameras();
int defaultBufferSize = 3000, defaultFrameRate = 30, movieCount = 0, defaultExposureTime = 6000, defaultGain=13;
QSettings *settings = new QSettings;
QImage image;
@ -101,6 +102,7 @@ private:
ImageBuffer *buffer;
Grabber *grabber;
Writer *writer;
CameraLayout layout;
bool grabbing, stopRequest, writing, labelSwitch, dryRun;
QPalette progressPalette;
QString activeLabelStyleHigh = "QLabel { font-size: 10pt;font-family: Arial; color : red; }";