diff --git a/camerasetup.cpp b/camerasetup.cpp new file mode 100644 index 0000000..aca7885 --- /dev/null +++ b/camerasetup.cpp @@ -0,0 +1,93 @@ +#include +#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; + } +} diff --git a/camerasetup.h b/camerasetup.h new file mode 100644 index 0000000..de39834 --- /dev/null +++ b/camerasetup.h @@ -0,0 +1,94 @@ +#ifndef CAMERASETUP_H +#define CAMERASETUP_H + +#include +#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 \ No newline at end of file