[camerasetup] setup uis for single or dual camera use

This commit is contained in:
Jan Grewe 2023-11-24 15:42:07 +01:00
parent b322bfdb47
commit 2ed9b22123
2 changed files with 187 additions and 0 deletions

93
camerasetup.cpp Normal file
View File

@ -0,0 +1,93 @@
#include <QVBoxLayout>
#include "camerasetup.h"
SingleCamera::SingleCamera (QWidget *parent) :
CameraSetup(parent),
camera1Preview(nullptr) {
this->setLayout(new QVBoxLayout(this));
camera1Preview = new CameraPreview();
this->layout()->addWidget(camera1Preview);
}
CameraLayout SingleCamera::cameraLayout(){
CameraLayout l;
qDebug() << "Request layout";
l.mode = CameraMode::single;
l.layout = Layout::horizontal;
l.devices.push_back(camera1Preview->device().toStdString());
l.rois.push_back(camera1Preview->getRoi());
return l;
}
SingleCamera::~SingleCamera(){
if (camera1Preview != nullptr) {
delete camera1Preview;
camera1Preview = nullptr;
}
}
DualCamera::DualCamera (QWidget *parent) :
CameraSetup(parent),
camera1Preview(nullptr),
camera2Preview(nullptr),
primary_device("") {
qDebug() << "DualCamera View ... ";
this->setLayout(new QHBoxLayout(this));
camera1Preview = new CameraPreview();
camera2Preview = new CameraPreview();
this->layout()->addWidget(camera1Preview);
this->layout()->addWidget(camera2Preview);
connect(camera1Preview, SIGNAL(roiUpdated(int, int, int, int)), this, SLOT(updateROI1(int, int, int, int)));
connect(camera2Preview, SIGNAL(roiUpdated(int, int, int, int)), SLOT(updateROI2(int, int, int, int)));
qDebug() << "... created";
}
void DualCamera::updateROI1(int x, int y, int w, int h) {
camera2Preview->setSize(w, h);
}
void DualCamera::updateROI2(int x, int y, int w, int h) {
camera1Preview->setSize(w, h);
}
void DualCamera::switchArrangement() {
qDebug() << "switch camera arrangement";
QHBoxLayout *hbox = (QHBoxLayout*)this->layout();
if (hbox->direction() == QBoxLayout::LeftToRight) {
hbox->setDirection(QBoxLayout::RightToLeft);
primary_device = camera2Preview->device();
} else {
hbox->setDirection(QBoxLayout::LeftToRight);
primary_device = camera1Preview->device();
}
}
CameraLayout DualCamera::cameraLayout() {
CameraLayout l;
qDebug() << "Request layout";
l.mode = CameraMode::dual;
l.layout = Layout::horizontal;
if (camera1Preview->device() == primary_device) {
l.rois.push_back(camera1Preview->getRoi());
l.rois.push_back(camera2Preview->getRoi());
} else {
l.rois.push_back(camera2Preview->getRoi());
l.rois.push_back(camera1Preview->getRoi());
}
return l;
}
DualCamera::~DualCamera(){
if (camera1Preview != nullptr) {
delete camera1Preview;
camera1Preview = nullptr;
}
if (camera2Preview != nullptr) {
delete camera2Preview;
camera2Preview = nullptr;
}
}

94
camerasetup.h Normal file
View File

@ -0,0 +1,94 @@
#ifndef CAMERASETUP_H
#define CAMERASETUP_H
#include <QWidget>
#include "camerapreview.h"
#include "mylogger.h"
namespace Ui {
class SingleCamera;
}
class CameraSetup : public QWidget {
Q_OBJECT
public:
CameraSetup(QWidget *parent=0): QWidget(parent){};
// virtual ROI getRoi() = 0;
virtual CameraLayout cameraLayout() = 0;
virtual void setPrimaryCamera(QString &device) = 0;
virtual void setSecondaryCamera(QString &device) = 0;
virtual void switchArrangement() = 0;
};
class SingleCamera : public CameraSetup {
Q_OBJECT
public:
explicit SingleCamera(QWidget *parent = 0);
~SingleCamera();
void setPrimaryCamera(QString &devive) {
qDebug() << "Update primary camera";
camera1Preview->setCamera(devive);
}
void setSecondaryCamera(QString &devive) {
qDebug()<< "Update secondary camera not supported on SingleCamera";
}
CameraLayout cameraLayout();
void switchArrangement() {
qDebug() << "switch orientation does nothing on SingleCamera";
}
private:
CameraPreview *camera1Preview;
};
class DualCamera : public CameraSetup {
Q_OBJECT
public:
explicit DualCamera(QWidget *parent = 0);
~DualCamera();
void setPrimaryCamera(QString &device) {
qDebug() << "Update primary camera";
if (camera1Preview != nullptr) {
camera1Preview->setCamera(device);
primary_device = device;
}
}
void setSecondaryCamera(QString &device) {
qDebug()<< "Update secondary camera";
if (camera2Preview != nullptr) {
camera2Preview->setCamera(device);
}
}
CameraLayout cameraLayout();
void switchArrangement();
public slots:
void updateROI1(int x, int y, int width, int height);
void updateROI2(int x, int y, int width, int height);
private:
QString primary_device;
CameraPreview *camera1Preview;
CameraPreview *camera2Preview;
};
#endif //CAMERASETUP_H