add support for per camera bayer mode
This commit is contained in:
@ -238,6 +238,14 @@ void Cameras::imageRecived(Camera::Image img)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Cameras::setSetup(const std::vector<CameraSetup>& setups)
|
||||||
|
{
|
||||||
|
for(auto& camera : cameras_)
|
||||||
|
for(auto& setup : setups)
|
||||||
|
if(camera->id() == setup.id)
|
||||||
|
camera->cam()->setBayerMode(setup.bayerMode);
|
||||||
|
}
|
||||||
|
|
||||||
void Cameras::store(QSettings &settings)
|
void Cameras::store(QSettings &settings)
|
||||||
{
|
{
|
||||||
std::vector<cam::Camera::Description> available = cam::Camera::getAvailableCameras();
|
std::vector<cam::Camera::Description> available = cam::Camera::getAvailableCameras();
|
||||||
|
@ -57,6 +57,7 @@ public:
|
|||||||
~Cameras();
|
~Cameras();
|
||||||
bool setCameras(const std::vector<cam::Camera::Description>& descriptions);
|
bool setCameras(const std::vector<cam::Camera::Description>& descriptions);
|
||||||
bool addCamera(const cam::Camera::Description& desc);
|
bool addCamera(const cam::Camera::Description& desc);
|
||||||
|
void setSetup(const std::vector<CameraSetup>& setups);
|
||||||
std::vector<cam::Camera::Description> getCameras();
|
std::vector<cam::Camera::Description> getCameras();
|
||||||
std::shared_ptr<Camera> getCamera(size_t id);
|
std::shared_ptr<Camera> getCamera(size_t id);
|
||||||
size_t numCameras(){return cameras_.size();}
|
size_t numCameras(){return cameras_.size();}
|
||||||
|
@ -128,6 +128,7 @@ void ImagePipeline::setProfile(const Profile& profile)
|
|||||||
profile_ = profile;
|
profile_ = profile;
|
||||||
cameras_->setExposureTime(profile_.exposureTime);
|
cameras_->setExposureTime(profile_.exposureTime);
|
||||||
cameras_->setLighting(profile_.lighting);
|
cameras_->setLighting(profile_.lighting);
|
||||||
|
cameras_->setSetup(profile_.cameras);
|
||||||
qDebug()<<"setting profile "<<profile_.getName();
|
qDebug()<<"setting profile "<<profile_.getName();
|
||||||
for(CameraSetup& setup : profile_.cameras)
|
for(CameraSetup& setup : profile_.cameras)
|
||||||
{
|
{
|
||||||
|
@ -22,6 +22,7 @@ void CameraSetup::store(const QString &filename) const
|
|||||||
{
|
{
|
||||||
matf<<("_"+QString::number(id)+"_bgmask").toStdString()<<bgmask;
|
matf<<("_"+QString::number(id)+"_bgmask").toStdString()<<bgmask;
|
||||||
}
|
}
|
||||||
|
matf<<("_"+QString::number(id)+"_bayermode").toStdString()<<bayerMode;
|
||||||
matf.release();
|
matf.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ void CameraSetup::load(const QString &filename, size_t cameraId)
|
|||||||
matf[("_"+QString::number(id)+"_xmat").toStdString()]>>remapMap.xMat;
|
matf[("_"+QString::number(id)+"_xmat").toStdString()]>>remapMap.xMat;
|
||||||
matf[("_"+QString::number(id)+"_ymat").toStdString()]>>remapMap.yMat;
|
matf[("_"+QString::number(id)+"_ymat").toStdString()]>>remapMap.yMat;
|
||||||
matf[("_"+QString::number(id)+"_origin").toStdString()]>>remapMap.topLeftCoordinate;
|
matf[("_"+QString::number(id)+"_origin").toStdString()]>>remapMap.topLeftCoordinate;
|
||||||
|
matf[("_"+QString::number(id)+"_bayermode").toStdString()]>>bayerMode;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <QRandomGenerator>
|
#include <QRandomGenerator>
|
||||||
#include <opencv2/core/mat.hpp>
|
#include <opencv2/core/mat.hpp>
|
||||||
|
#include <uvoscam.h>
|
||||||
#include <uvosunwrap/unwrap.h>
|
#include <uvosunwrap/unwrap.h>
|
||||||
|
|
||||||
#include "camera.h"
|
#include "camera.h"
|
||||||
@ -16,6 +17,7 @@ public:
|
|||||||
RemapMap remapMap;
|
RemapMap remapMap;
|
||||||
cv::Mat darkmap;
|
cv::Mat darkmap;
|
||||||
cv::Mat bgmask;
|
cv::Mat bgmask;
|
||||||
|
cam::Camera::BayerMode bayerMode = cam::Camera::BAYER_BLUE;
|
||||||
void store(const QString& filename) const;
|
void store(const QString& filename) const;
|
||||||
void load(const QString& name, size_t cameraId);
|
void load(const QString& name, size_t cameraId);
|
||||||
};
|
};
|
||||||
|
@ -21,6 +21,29 @@ ConfigureCameraDialog::ConfigureCameraDialog(const CameraSetup& setup, std::shar
|
|||||||
ui->doubleSpinBox->setValue(profileExposure_);
|
ui->doubleSpinBox->setValue(profileExposure_);
|
||||||
setExposure(profileExposure_);
|
setExposure(profileExposure_);
|
||||||
|
|
||||||
|
switch(setup.bayerMode)
|
||||||
|
{
|
||||||
|
case cam::Camera::BAYER_BLUE:
|
||||||
|
ui->comboBox_bayer->setCurrentIndex(0);
|
||||||
|
break;
|
||||||
|
case cam::Camera::BAYER_GREEN:
|
||||||
|
ui->comboBox_bayer->setCurrentIndex(1);
|
||||||
|
break;
|
||||||
|
case cam::Camera::BAYER_RED:
|
||||||
|
ui->comboBox_bayer->setCurrentIndex(2);
|
||||||
|
break;
|
||||||
|
case cam::Camera::BAYER_PASSTHOUGH:
|
||||||
|
ui->comboBox_bayer->setCurrentIndex(3);
|
||||||
|
break;
|
||||||
|
case cam::Camera::BAYER_DEBAYER:
|
||||||
|
ui->comboBox_bayer->setCurrentIndex(4);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
camera_->cam()->setBayerMode(setup_.bayerMode);
|
||||||
|
|
||||||
uint64_t min, max;
|
uint64_t min, max;
|
||||||
camera_->cam()->getExposureTimeLimits(min, max);
|
camera_->cam()->getExposureTimeLimits(min, max);
|
||||||
ui->doubleSpinBox->setMaximum(max/1000000.0);
|
ui->doubleSpinBox->setMaximum(max/1000000.0);
|
||||||
@ -37,6 +60,7 @@ ConfigureCameraDialog::ConfigureCameraDialog(const CameraSetup& setup, std::shar
|
|||||||
connect(camera_.get(), &Camera::newImage, this, &ConfigureCameraDialog::gotImage);
|
connect(camera_.get(), &Camera::newImage, this, &ConfigureCameraDialog::gotImage);
|
||||||
connect(ui->pushButtonBgShow, &QPushButton::clicked, [this](){if(setup_.bgmask.data) ui->widget_4->setImage(Camera::Image(setup_.bgmask, 0));});
|
connect(ui->pushButtonBgShow, &QPushButton::clicked, [this](){if(setup_.bgmask.data) ui->widget_4->setImage(Camera::Image(setup_.bgmask, 0));});
|
||||||
connect(ui->pushButtonDarkImageShow, &QPushButton::clicked, [this](){if(setup_.darkmap.data) ui->widget_4->setImage(Camera::Image(setup_.darkmap, 0));});
|
connect(ui->pushButtonDarkImageShow, &QPushButton::clicked, [this](){if(setup_.darkmap.data) ui->widget_4->setImage(Camera::Image(setup_.darkmap, 0));});
|
||||||
|
connect(ui->comboBox_bayer, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ConfigureCameraDialog::bayerIndexChanged);
|
||||||
|
|
||||||
checkConfig();
|
checkConfig();
|
||||||
}
|
}
|
||||||
@ -54,6 +78,32 @@ void ConfigureCameraDialog::setExposure(double value)
|
|||||||
qDebug()<<"set exposure to "<<value*1000000.0;
|
qDebug()<<"set exposure to "<<value*1000000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConfigureCameraDialog::bayerIndexChanged(int index)
|
||||||
|
{
|
||||||
|
switch(index)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
setup_.bayerMode = cam::Camera::BAYER_BLUE;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
setup_.bayerMode = cam::Camera::BAYER_RED;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
setup_.bayerMode = cam::Camera::BAYER_GREEN;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
setup_.bayerMode = cam::Camera::BAYER_PASSTHOUGH;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
setup_.bayerMode = cam::Camera::BAYER_DEBAYER;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
camera_->cam()->setBayerMode(setup_.bayerMode);
|
||||||
|
qDebug()<<"set bayer mode to "<<setup_.bayerMode;
|
||||||
|
}
|
||||||
|
|
||||||
void ConfigureCameraDialog::gotImage(Camera::Image img)
|
void ConfigureCameraDialog::gotImage(Camera::Image img)
|
||||||
{
|
{
|
||||||
switch(mode_)
|
switch(mode_)
|
||||||
@ -70,20 +120,21 @@ void ConfigureCameraDialog::gotImage(Camera::Image img)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
mode_ = MODE_IDLE;
|
||||||
if(!createMask(img.mat, setup_.bgmask, fgImage))
|
if(!createMask(img.mat, setup_.bgmask, fgImage))
|
||||||
QMessageBox::warning(this, "Failed", "Unable to create mask from captured images");
|
QMessageBox::warning(this, "Failed", "Unable to create mask from captured images");
|
||||||
else
|
else
|
||||||
ui->widget_4->setImage(Camera::Image(setup_.bgmask, camera_->id()));
|
ui->widget_4->setImage(Camera::Image(setup_.bgmask, camera_->id()));
|
||||||
fgImage.release();
|
fgImage.release();
|
||||||
mode_ = MODE_IDLE;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MODE_DARK_GET:
|
case MODE_DARK_GET:
|
||||||
|
mode_ = MODE_IDLE;
|
||||||
setup_.darkmap = img.mat;
|
setup_.darkmap = img.mat;
|
||||||
ui->widget_4->setImage(Camera::Image(setup_.darkmap, camera_->id()));
|
ui->widget_4->setImage(Camera::Image(setup_.darkmap, camera_->id()));
|
||||||
mode_ = MODE_IDLE;
|
|
||||||
break;
|
break;
|
||||||
case MODE_REMAP_GET:
|
case MODE_REMAP_GET:
|
||||||
|
mode_ = MODE_IDLE;
|
||||||
cv::Mat masked;
|
cv::Mat masked;
|
||||||
if(setup_.bgmask.data)
|
if(setup_.bgmask.data)
|
||||||
img.mat.copyTo(masked, setup_.bgmask);
|
img.mat.copyTo(masked, setup_.bgmask);
|
||||||
@ -93,7 +144,6 @@ void ConfigureCameraDialog::gotImage(Camera::Image img)
|
|||||||
if(points.size() < 8)
|
if(points.size() < 8)
|
||||||
{
|
{
|
||||||
QMessageBox::warning(this, "Failed", "Error creating map, insufficant points detected.");
|
QMessageBox::warning(this, "Failed", "Error creating map, insufficant points detected.");
|
||||||
mode_ = MODE_IDLE;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
RemapMap map;
|
RemapMap map;
|
||||||
@ -104,7 +154,6 @@ void ConfigureCameraDialog::gotImage(Camera::Image img)
|
|||||||
for(size_t i = 0; i < points.size(); ++i)
|
for(size_t i = 0; i < points.size(); ++i)
|
||||||
cv::circle(img.mat, points[i].point, img.mat.cols/50, cv::Scalar(255,255,255), img.mat.cols/200);
|
cv::circle(img.mat, points[i].point, img.mat.cols/50, cv::Scalar(255,255,255), img.mat.cols/200);
|
||||||
ui->widget_4->setImage(Camera::Image(img.mat, camera_->id()));
|
ui->widget_4->setImage(Camera::Image(img.mat, camera_->id()));
|
||||||
mode_ = MODE_IDLE;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
checkConfig();
|
checkConfig();
|
||||||
|
@ -34,6 +34,7 @@ private slots:
|
|||||||
void captureDark();
|
void captureDark();
|
||||||
void takeImage();
|
void takeImage();
|
||||||
void setExposure(double value);
|
void setExposure(double value);
|
||||||
|
void bayerIndexChanged(int index);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void accept() override;
|
void accept() override;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Configure Camera</string>
|
<string>Configure Camera</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,0,0,0">
|
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,0,0,0,0">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox">
|
<widget class="QGroupBox" name="groupBox">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
@ -31,6 +31,16 @@
|
|||||||
<property name="horizontalSpacing">
|
<property name="horizontalSpacing">
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
|
<item row="1" column="4">
|
||||||
|
<widget class="QPushButton" name="pushButtonRemapClear">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Clear</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="Led" name="ledBg" native="true">
|
<widget class="Led" name="ledBg" native="true">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -47,20 +57,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="3">
|
|
||||||
<widget class="QPushButton" name="pushButtonBgCreate">
|
|
||||||
<property name="text">
|
|
||||||
<string>Create</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Dark image</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="4">
|
<item row="2" column="4">
|
||||||
<widget class="QPushButton" name="pushButtonDarkImageClear">
|
<widget class="QPushButton" name="pushButtonDarkImageClear">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
@ -71,73 +67,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="3">
|
|
||||||
<widget class="QPushButton" name="pushButtonDarkImageCreate">
|
|
||||||
<property name="text">
|
|
||||||
<string>Create</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="4">
|
|
||||||
<widget class="QPushButton" name="pushButtonRemapClear">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Clear</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>Background image</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="2">
|
|
||||||
<widget class="QPushButton" name="pushButtonDarkImageShow">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Show</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="Led" name="ledRemap" native="true">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="2">
|
|
||||||
<widget class="QPushButton" name="pushButtonBgShow">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Show</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="3">
|
|
||||||
<widget class="QPushButton" name="pushButtonRemapCreate">
|
|
||||||
<property name="text">
|
|
||||||
<string>Create</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="Led" name="ledDark" native="true">
|
<widget class="Led" name="ledDark" native="true">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -154,6 +83,44 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Background image</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="3">
|
||||||
|
<widget class="QPushButton" name="pushButtonBgCreate">
|
||||||
|
<property name="text">
|
||||||
|
<string>Create</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="3">
|
||||||
|
<widget class="QPushButton" name="pushButtonRemapCreate">
|
||||||
|
<property name="text">
|
||||||
|
<string>Create</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Dark image</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QPushButton" name="pushButtonBgShow">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Show</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -161,6 +128,39 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="3">
|
||||||
|
<widget class="QPushButton" name="pushButtonDarkImageCreate">
|
||||||
|
<property name="text">
|
||||||
|
<string>Create</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="Led" name="ledRemap" native="true">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QPushButton" name="pushButtonDarkImageShow">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Show</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="3" column="4">
|
<item row="3" column="4">
|
||||||
<widget class="QPushButton" name="pushButtonBgClear">
|
<widget class="QPushButton" name="pushButtonBgClear">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
@ -173,6 +173,49 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Bayer mode</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="comboBox_bayer">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Blue</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Green</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Red</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passthrough</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Debayer</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
|
Reference in New Issue
Block a user