add support for per camera bayer mode
This commit is contained in:
		
							parent
							
								
									0f1a6f1ba0
								
							
						
					
					
						commit
						635514159c
					
				
					 8 changed files with 193 additions and 86 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
{
 | 
			
		||||
	std::vector<cam::Camera::Description> available = cam::Camera::getAvailableCameras();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,6 +57,7 @@ public:
 | 
			
		|||
	~Cameras();
 | 
			
		||||
	bool setCameras(const std::vector<cam::Camera::Description>& descriptions);
 | 
			
		||||
	bool addCamera(const cam::Camera::Description& desc);
 | 
			
		||||
	void setSetup(const std::vector<CameraSetup>& setups);
 | 
			
		||||
	std::vector<cam::Camera::Description> getCameras();
 | 
			
		||||
	std::shared_ptr<Camera> getCamera(size_t id);
 | 
			
		||||
	size_t numCameras(){return cameras_.size();}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -128,6 +128,7 @@ void ImagePipeline::setProfile(const Profile& profile)
 | 
			
		|||
	profile_ = profile;
 | 
			
		||||
	cameras_->setExposureTime(profile_.exposureTime);
 | 
			
		||||
	cameras_->setLighting(profile_.lighting);
 | 
			
		||||
	cameras_->setSetup(profile_.cameras);
 | 
			
		||||
	qDebug()<<"setting profile "<<profile_.getName();
 | 
			
		||||
	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)+"_bayermode").toStdString()<<bayerMode;
 | 
			
		||||
	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)+"_ymat").toStdString()]>>remapMap.yMat;
 | 
			
		||||
		matf[("_"+QString::number(id)+"_origin").toStdString()]>>remapMap.topLeftCoordinate;
 | 
			
		||||
		matf[("_"+QString::number(id)+"_bayermode").toStdString()]>>bayerMode;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
#include <vector>
 | 
			
		||||
#include <QRandomGenerator>
 | 
			
		||||
#include <opencv2/core/mat.hpp>
 | 
			
		||||
#include <uvoscam.h>
 | 
			
		||||
#include <uvosunwrap/unwrap.h>
 | 
			
		||||
 | 
			
		||||
#include "camera.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +17,7 @@ public:
 | 
			
		|||
	RemapMap remapMap;
 | 
			
		||||
	cv::Mat darkmap;
 | 
			
		||||
	cv::Mat bgmask;
 | 
			
		||||
	cam::Camera::BayerMode bayerMode = cam::Camera::BAYER_BLUE;
 | 
			
		||||
	void store(const QString& filename) const;
 | 
			
		||||
	void load(const QString& name, size_t cameraId);
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,29 @@ ConfigureCameraDialog::ConfigureCameraDialog(const CameraSetup& setup, std::shar
 | 
			
		|||
	ui->doubleSpinBox->setValue(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;
 | 
			
		||||
	camera_->cam()->getExposureTimeLimits(min, max);
 | 
			
		||||
	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(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->comboBox_bayer, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ConfigureCameraDialog::bayerIndexChanged);
 | 
			
		||||
 | 
			
		||||
	checkConfig();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -54,6 +78,32 @@ void ConfigureCameraDialog::setExposure(double value)
 | 
			
		|||
		 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)
 | 
			
		||||
{
 | 
			
		||||
	switch(mode_)
 | 
			
		||||
| 
						 | 
				
			
			@ -70,20 +120,21 @@ void ConfigureCameraDialog::gotImage(Camera::Image img)
 | 
			
		|||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			mode_ = MODE_IDLE;
 | 
			
		||||
			if(!createMask(img.mat, setup_.bgmask, fgImage))
 | 
			
		||||
				QMessageBox::warning(this, "Failed", "Unable to create mask from captured images");
 | 
			
		||||
			else
 | 
			
		||||
				ui->widget_4->setImage(Camera::Image(setup_.bgmask, camera_->id()));
 | 
			
		||||
			fgImage.release();
 | 
			
		||||
			mode_ = MODE_IDLE;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case MODE_DARK_GET:
 | 
			
		||||
		mode_ = MODE_IDLE;
 | 
			
		||||
		setup_.darkmap = img.mat;
 | 
			
		||||
		ui->widget_4->setImage(Camera::Image(setup_.darkmap, camera_->id()));
 | 
			
		||||
		mode_ = MODE_IDLE;
 | 
			
		||||
		break;
 | 
			
		||||
	case MODE_REMAP_GET:
 | 
			
		||||
		mode_ = MODE_IDLE;
 | 
			
		||||
		cv::Mat masked;
 | 
			
		||||
		if(setup_.bgmask.data)
 | 
			
		||||
			img.mat.copyTo(masked, setup_.bgmask);
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +144,6 @@ void ConfigureCameraDialog::gotImage(Camera::Image img)
 | 
			
		|||
		if(points.size() < 8)
 | 
			
		||||
		{
 | 
			
		||||
			QMessageBox::warning(this, "Failed", "Error creating map, insufficant points detected.");
 | 
			
		||||
			mode_ = MODE_IDLE;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		RemapMap map;
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +154,6 @@ void ConfigureCameraDialog::gotImage(Camera::Image img)
 | 
			
		|||
		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);
 | 
			
		||||
		ui->widget_4->setImage(Camera::Image(img.mat, camera_->id()));
 | 
			
		||||
		mode_ = MODE_IDLE;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
	checkConfig();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,7 @@ private slots:
 | 
			
		|||
	void captureDark();
 | 
			
		||||
	void takeImage();
 | 
			
		||||
	void setExposure(double value);
 | 
			
		||||
	void bayerIndexChanged(int index);
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
	void accept() override;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@
 | 
			
		|||
  <property name="windowTitle">
 | 
			
		||||
   <string>Configure Camera</string>
 | 
			
		||||
  </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>
 | 
			
		||||
    <widget class="QGroupBox" name="groupBox">
 | 
			
		||||
     <property name="title">
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +31,16 @@
 | 
			
		|||
     <property name="horizontalSpacing">
 | 
			
		||||
      <number>6</number>
 | 
			
		||||
     </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">
 | 
			
		||||
      <widget class="Led" name="ledBg" native="true">
 | 
			
		||||
       <property name="sizePolicy">
 | 
			
		||||
| 
						 | 
				
			
			@ -47,20 +57,6 @@
 | 
			
		|||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
     </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">
 | 
			
		||||
      <widget class="QPushButton" name="pushButtonDarkImageClear">
 | 
			
		||||
       <property name="enabled">
 | 
			
		||||
| 
						 | 
				
			
			@ -71,73 +67,6 @@
 | 
			
		|||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
     </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">
 | 
			
		||||
      <widget class="Led" name="ledDark" native="true">
 | 
			
		||||
       <property name="sizePolicy">
 | 
			
		||||
| 
						 | 
				
			
			@ -154,6 +83,44 @@
 | 
			
		|||
       </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="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">
 | 
			
		||||
      <widget class="QLabel" name="label_2">
 | 
			
		||||
       <property name="text">
 | 
			
		||||
| 
						 | 
				
			
			@ -161,6 +128,39 @@
 | 
			
		|||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
     </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">
 | 
			
		||||
      <widget class="QPushButton" name="pushButtonBgClear">
 | 
			
		||||
       <property name="enabled">
 | 
			
		||||
| 
						 | 
				
			
			@ -173,6 +173,49 @@
 | 
			
		|||
     </item>
 | 
			
		||||
    </layout>
 | 
			
		||||
   </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>
 | 
			
		||||
    <layout class="QHBoxLayout" name="horizontalLayout">
 | 
			
		||||
     <property name="topMargin">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue