summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-05-19 10:14:59 +0200
committerLars Knoll <lars.knoll@qt.io>2021-05-19 18:11:56 +0000
commit9f360934cb90b667ac9119ee93f67980b7b4e563 (patch)
tree753c9d78dcfc6b3739642ab3d43f7f3e31307854
parent0c40d337ae107d5ab2fde5da022c071c64c67e0e (diff)
Remove contrast/brightness/hue/saturation properties from QCamera
Those methods are only supported on gstreamer (they don't exist on macOS/iOS). They are probably better implemented as a postprocessing effect anyway, so remove the from QCamera to keep the API smaller and more manageable. Change-Id: Ic203b3cac3384cdb0b6648366d47f6254f299197 Reviewed-by: André de la Rocha <andre.rocha@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
-rw-r--r--examples/multimediawidgets/camera/camera.cpp13
-rw-r--r--examples/multimediawidgets/camera/camera.ui103
-rw-r--r--src/multimedia/camera/qcamera.cpp97
-rw-r--r--src/multimedia/camera/qcamera.h14
-rw-r--r--src/multimedia/camera/qcamera_p.h4
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing.cpp67
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing_p.h25
-rw-r--r--src/multimedia/platform/qplatformcameraimageprocessing_p.h4
-rw-r--r--tests/auto/unit/mockbackend/qmockcameraimageprocessing.h15
-rw-r--r--tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp34
10 files changed, 11 insertions, 365 deletions
diff --git a/examples/multimediawidgets/camera/camera.cpp b/examples/multimediawidgets/camera/camera.cpp
index 38f4427fa..61dc16baf 100644
--- a/examples/multimediawidgets/camera/camera.cpp
+++ b/examples/multimediawidgets/camera/camera.cpp
@@ -133,19 +133,6 @@ void Camera::setCamera(const QCameraInfo &cameraInfo)
connect(m_imageCapture, &QCameraImageCapture::errorOccurred, this, &Camera::displayCaptureError);
readyForCapture(m_imageCapture->isReadyForCapture());
- connect(ui->brightnessSlider, &QSlider::valueChanged, [this](int value) {
- m_camera->setBrightness(value/100.);
- });
- connect(ui->contrastSlider, &QSlider::valueChanged, [this](int value) {
- m_camera->setContrast(value/100.);
- });
- connect(ui->saturationSlider, &QSlider::valueChanged, [this](int value) {
- m_camera->setSaturation(value/100.);
- });
- connect(ui->hueSlider, &QSlider::valueChanged, [this](int value) {
- m_camera->setHue(value/100.);
- });
-
updateCaptureMode();
m_camera->start();
}
diff --git a/examples/multimediawidgets/camera/camera.ui b/examples/multimediawidgets/camera/camera.ui
index 926928719..560ee7fed 100644
--- a/examples/multimediawidgets/camera/camera.ui
+++ b/examples/multimediawidgets/camera/camera.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>668</width>
- <height>422</height>
+ <height>429</height>
</rect>
</property>
<property name="windowTitle">
@@ -25,23 +25,7 @@
<string>Image</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
- <item row="8" column="0">
- <widget class="QSlider" name="saturationSlider">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="value">
- <number>0</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="11" column="0">
+ <item row="3" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -54,60 +38,6 @@
</property>
</spacer>
</item>
- <item row="6" column="0">
- <widget class="QSlider" name="contrastSlider">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QSlider" name="brightnessSlider">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Brightness</string>
- </property>
- </widget>
- </item>
- <item row="7" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Saturation</string>
- </property>
- </widget>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Contrast</string>
- </property>
- </widget>
- </item>
- <item row="12" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Exposure Compensation:</string>
- </property>
- </widget>
- </item>
<item row="0" column="0">
<widget class="QPushButton" name="takeImageButton">
<property name="enabled">
@@ -117,19 +47,12 @@
<string>Capture Photo</string>
</property>
<property name="icon">
- <iconset>
+ <iconset resource="camera.qrc">
<normaloff>:/images/shutter.svg</normaloff>:/images/shutter.svg</iconset>
</property>
</widget>
</item>
- <item row="9" column="0">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Hue</string>
- </property>
- </widget>
- </item>
- <item row="13" column="0">
+ <item row="5" column="0">
<widget class="QSlider" name="exposureCompensation">
<property name="minimum">
<number>-4</number>
@@ -148,16 +71,10 @@
</property>
</widget>
</item>
- <item row="10" column="0">
- <widget class="QSlider" name="hueSlider">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Exposure Compensation:</string>
</property>
</widget>
</item>
@@ -390,7 +307,9 @@
<container>1</container>
</customwidget>
</customwidgets>
- <resources/>
+ <resources>
+ <include location="camera.qrc"/>
+ </resources>
<connections>
<connection>
<sender>recordButton</sender>
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index e69155666..000c591b6 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -1038,103 +1038,6 @@ void QCamera::setManualWhiteBalance(qreal colorTemperature)
}
/*!
- Returns the brightness adjustment setting.
- */
-qreal QCamera::brightness() const
-{
- Q_D(const QCamera);
- return d->brightness;
-}
-
-/*!
- Set the brightness adjustment to \a value.
-
- Valid brightness adjustment values range between -1.0 and 1.0, with a default of 0.
-*/
-void QCamera::setBrightness(qreal value)
-{
- Q_D(QCamera);
- if (!d->imageControl || d->brightness == value)
- return;
- d->brightness = value;
- d->imageControl->setParameter(QPlatformCameraImageProcessing::BrightnessAdjustment,
- QVariant(value));
- emit brightnessChanged();
-}
-
-/*!
- Returns the contrast adjustment setting.
-*/
-qreal QCamera::contrast() const
-{
- Q_D(const QCamera);
- return d->contrast;
-}
-
-/*!
- Set the contrast adjustment to \a value.
-
- Valid contrast adjustment values range between -1.0 and 1.0, with a default of 0.
-*/
-void QCamera::setContrast(qreal value)
-{
- Q_D(QCamera);
- if (!d->imageControl || d->contrast == value)
- return;
- d->contrast = value;
- d->imageControl->setParameter(QPlatformCameraImageProcessing::ContrastAdjustment,
- QVariant(value));
- emit contrastChanged();
-}
-
-/*!
- Returns the saturation adjustment value.
-*/
-qreal QCamera::saturation() const
-{
- Q_D(const QCamera);
- return d->saturation;
-}
-
-/*!
- Sets the saturation adjustment value to \a value.
-
- Valid saturation values range between -1.0 and 1.0, with a default of 0.
-*/
-void QCamera::setSaturation(qreal value)
-{
- Q_D(QCamera);
- if (!d->imageControl || d->saturation == value)
- return;
- d->saturation = value;
- d->imageControl->setParameter(QPlatformCameraImageProcessing::SaturationAdjustment,
- QVariant(value));
- emit saturationChanged();
-}
-
-qreal QCamera::hue() const
-{
- Q_D(const QCamera);
- return d->hue;
-}
-
-/*!
- Sets the hue adjustment value to \a value.
-
- Valid hue values range between -1.0 and 1.0, with a default of 0.
-*/
-void QCamera::setHue(qreal value)
-{
- Q_D(QCamera);
- if (!d->imageControl || d->hue == value)
- return;
- d->hue = value;
- d->imageControl->setParameter(QPlatformCameraImageProcessing::HueAdjustment,
- QVariant(value));
- emit hueChanged();
-}
-
-/*!
\enum QCamera::WhiteBalanceMode
\value WhiteBalanceAuto Auto white balance mode.
diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h
index a7c959124..7cbab533c 100644
--- a/src/multimedia/camera/qcamera.h
+++ b/src/multimedia/camera/qcamera.h
@@ -87,10 +87,6 @@ class Q_MULTIMEDIA_EXPORT QCamera : public QObject
Q_PROPERTY(WhiteBalanceMode whiteBalanceMode READ whiteBalanceMode WRITE setWhiteBalanceMode NOTIFY whiteBalanceModeChanged)
Q_PROPERTY(qreal manualWhiteBalance READ manualWhiteBalance WRITE setManualWhiteBalance NOTIFY manualWhiteBalanceChanged)
- Q_PROPERTY(qreal brightness READ brightness WRITE setBrightness NOTIFY brightnessChanged)
- Q_PROPERTY(qreal contrast READ contrast WRITE setContrast NOTIFY contrastChanged)
- Q_PROPERTY(qreal hue READ hue WRITE setHue NOTIFY hueChanged)
- Q_PROPERTY(qreal saturation READ saturation WRITE setSaturation NOTIFY saturationChanged)
Q_ENUMS(Status)
Q_ENUMS(Error)
@@ -238,11 +234,6 @@ public:
qreal manualWhiteBalance() const;
- qreal brightness() const;
- qreal contrast() const;
- qreal saturation() const;
- qreal hue() const;
-
public Q_SLOTS:
void setActive(bool active);
void start() { setActive(true); }
@@ -265,11 +256,6 @@ public Q_SLOTS:
void setWhiteBalanceMode(WhiteBalanceMode mode);
void setManualWhiteBalance(qreal colorTemperature);
- void setBrightness(qreal value);
- void setContrast(qreal value);
- void setSaturation(qreal value);
- void setHue(qreal value);
-
Q_SIGNALS:
void activeChanged(bool);
void statusChanged(QCamera::Status status);
diff --git a/src/multimedia/camera/qcamera_p.h b/src/multimedia/camera/qcamera_p.h
index add658454..eae660049 100644
--- a/src/multimedia/camera/qcamera_p.h
+++ b/src/multimedia/camera/qcamera_p.h
@@ -87,10 +87,6 @@ public:
QCamera::WhiteBalanceMode whiteBalance = QCamera::WhiteBalanceAuto;
qreal colorTemperature = 0;
- qreal brightness = 0;
- qreal contrast = 0;
- qreal saturation = 0;
- qreal hue = 0;
void _q_error(int error, const QString &errorString);
void unsetError() { error = QCamera::NoError; errorString.clear(); }
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing.cpp
index 1871ab590..8a692b866 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing.cpp
@@ -62,66 +62,12 @@ QGstreamerImageProcessing::QGstreamerImageProcessing(QGstreamerCamera *camera)
if (auto *photography = m_camera->photography())
gst_photography_set_white_balance_mode(photography, GST_PHOTOGRAPHY_WB_MODE_AUTO);
#endif
- updateColorBalanceValues();
}
QGstreamerImageProcessing::~QGstreamerImageProcessing()
{
}
-static bool isColorBalanceParameter(QPlatformCameraImageProcessing::ProcessingParameter param)
-{
- return param >= QPlatformCameraImageProcessing::ContrastAdjustment && param <= QPlatformCameraImageProcessing::BrightnessAdjustment;
-}
-
-void QGstreamerImageProcessing::updateColorBalanceValues()
-{
- for (int i = ContrastAdjustment; i <= BrightnessAdjustment; ++i)
- colorBalanceParameters[i] = {};
-
- GstColorBalance *balance = m_camera->colorBalance();
- if (!balance)
- return;
-
- const GList *controls = gst_color_balance_list_channels(balance);
-
- for (const GList *item = controls; item; item = g_list_next (item)) {
- GstColorBalanceChannel *channel = (GstColorBalanceChannel *)item->data;
- int cur_value = gst_color_balance_get_value (balance, channel);
-
- int index = -1;
- if (!g_ascii_strcasecmp (channel->label, "brightness")) {
- index = BrightnessAdjustment;
- } else if (!g_ascii_strcasecmp (channel->label, "contrast")) {
- index = ContrastAdjustment;
- } else if (!g_ascii_strcasecmp (channel->label, "saturation")) {
- index = SaturationAdjustment;
- } else if (!g_ascii_strcasecmp (channel->label, "hue")) {
- index = HueAdjustment;
- }
- if (index < 0)
- continue;
- colorBalanceParameters[index] = { channel, cur_value, channel->min_value, channel->max_value };
- }
-}
-
-bool QGstreamerImageProcessing::setColorBalanceValue(ProcessingParameter parameter, qreal value)
-{
- Q_ASSERT(isColorBalanceParameter(parameter));
-
- GstColorBalance *balance = m_camera->colorBalance();
- if (!balance)
- return false;
-
- auto &p = colorBalanceParameters[parameter];
- if (!p.channel)
- return false;
-
- p.setScaledValue(value);
- gst_color_balance_set_value (balance, p.channel, p.current);
- return true;
-}
-
bool QGstreamerImageProcessing::setWhiteBalanceMode(QCamera::WhiteBalanceMode mode)
{
if (!isWhiteBalanceModeSupported(mode))
@@ -197,9 +143,6 @@ bool QGstreamerImageProcessing::isWhiteBalanceModeSupported(QCamera::WhiteBalanc
bool QGstreamerImageProcessing::isParameterSupported(QPlatformCameraImageProcessing::ProcessingParameter parameter) const
{
- if (isColorBalanceParameter(parameter))
- return colorBalanceParameters[parameter].channel != nullptr;
-
#if QT_CONFIG(linux_v4l)
if (m_camera->isV4L2Camera()) {
switch (parameter) {
@@ -227,12 +170,6 @@ bool QGstreamerImageProcessing::isParameterSupported(QPlatformCameraImageProcess
bool QGstreamerImageProcessing::isParameterValueSupported(QPlatformCameraImageProcessing::ProcessingParameter parameter, const QVariant &value) const
{
switch (parameter) {
- case ContrastAdjustment:
- case BrightnessAdjustment:
- case SaturationAdjustment:
- if (qAbs(value.toReal()) > 1)
- return false;
- return isParameterSupported(parameter);
case ColorTemperature: {
#if QT_CONFIG(linux_v4l)
if (m_camera->isV4L2Camera()) {
@@ -253,9 +190,6 @@ bool QGstreamerImageProcessing::isParameterValueSupported(QPlatformCameraImagePr
void QGstreamerImageProcessing::setParameter(QPlatformCameraImageProcessing::ProcessingParameter parameter, const QVariant &value)
{
- if (isColorBalanceParameter(parameter))
- setColorBalanceValue(parameter, value.toDouble());
-
#if QT_CONFIG(linux_v4l)
if (m_camera->isV4L2Camera()) {
if (setV4L2Param(parameter, value))
@@ -276,7 +210,6 @@ void QGstreamerImageProcessing::setParameter(QPlatformCameraImageProcessing::Pro
void QGstreamerImageProcessing::update()
{
- updateColorBalanceValues();
#if QT_CONFIG(linux_v4l)
initV4L2Controls();
#endif
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing_p.h
index 61415548e..171cb060f 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing_p.h
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing_p.h
@@ -88,32 +88,7 @@ public:
void update();
private:
- bool setColorBalanceValue(ProcessingParameter param, qreal value);
- void updateColorBalanceValues();
-
-private:
QGstreamerCamera *m_camera;
- struct ColorBalanceParameter {
- GstColorBalanceChannel *channel = nullptr;
- int current = 0;
- int min = 0;
- int max = 0;
- double scaledValue() const {
- // map [min..max] to [-1.0 .. 1.0]
- if (min == max)
- return 0;
- return double(current - min) / double(max - min) * 2 - 1;
- }
- void setScaledValue(double value) {
- // map [-1.0 .. 1.0] to [min..max]
- if (min == max)
- current = min;
- value = qBound(-1., value, 1.);
- current = min + qRound((value + 1.)/2. * double(max - min));
- }
- };
- ColorBalanceParameter colorBalanceParameters[BrightnessAdjustment + 1];
-
QCamera::WhiteBalanceMode m_whiteBalanceMode = QCamera::WhiteBalanceAuto;
#if QT_CONFIG(linux_v4l)
diff --git a/src/multimedia/platform/qplatformcameraimageprocessing_p.h b/src/multimedia/platform/qplatformcameraimageprocessing_p.h
index 341bfca61..000939e95 100644
--- a/src/multimedia/platform/qplatformcameraimageprocessing_p.h
+++ b/src/multimedia/platform/qplatformcameraimageprocessing_p.h
@@ -69,10 +69,6 @@ class Q_MULTIMEDIA_EXPORT QPlatformCameraImageProcessing : public QObject
public:
enum ProcessingParameter {
- ContrastAdjustment,
- SaturationAdjustment,
- HueAdjustment,
- BrightnessAdjustment,
WhiteBalancePreset,
ColorTemperature
};
diff --git a/tests/auto/unit/mockbackend/qmockcameraimageprocessing.h b/tests/auto/unit/mockbackend/qmockcameraimageprocessing.h
index 38084ccd1..3de32002a 100644
--- a/tests/auto/unit/mockbackend/qmockcameraimageprocessing.h
+++ b/tests/auto/unit/mockbackend/qmockcameraimageprocessing.h
@@ -64,9 +64,6 @@ public:
{
switch (parameter)
{
- case ContrastAdjustment:
- case BrightnessAdjustment:
- case SaturationAdjustment:
case ColorTemperature:
case WhiteBalancePreset:
return true;
@@ -86,15 +83,6 @@ public:
void setParameter(ProcessingParameter parameter, const QVariant &value)
{
switch (parameter) {
- case ContrastAdjustment:
- m_contrast = value;
- break;
- case SaturationAdjustment:
- m_saturation = value;
- break;
- case BrightnessAdjustment:
- m_brightness = value;
- break;
case ColorTemperature:
m_manualWhiteBalance = value;
break;
@@ -111,9 +99,6 @@ private:
QCamera::WhiteBalanceMode m_whiteBalanceMode;
QSet<QCamera::WhiteBalanceMode> m_supportedWhiteBalance;
QVariant m_manualWhiteBalance;
- QVariant m_contrast;
- QVariant m_saturation;
- QVariant m_brightness;
};
#endif // MOCKCAMERAIMAGEPROCESSINGCONTROL_H
diff --git a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp
index 290ed8d1f..08202be51 100644
--- a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp
+++ b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp
@@ -89,10 +89,6 @@ private slots:
// Test cases for QPlatformCamera class.
void testCameraControl();
- // Test case for image processing
- void testContrast();
- void testSaturation();
-
void testSetVideoOutput();
void testSetVideoOutputDestruction();
@@ -802,36 +798,6 @@ void tst_QCamera::testStatus()
QVERIFY(camera.status() == QCamera::UnavailableStatus);
}
-void tst_QCamera::testContrast()
-{
- QMediaCaptureSession session;
- QCamera camera;
- session.setCamera(&camera);
-
- QVERIFY(camera.contrast() == 0);
-
- camera.setContrast(0.123);
- QCOMPARE(camera.contrast(), 0.123);
-
- camera.setContrast(4.56);
- QCOMPARE(camera.contrast(), 4.56);
-}
-
-void tst_QCamera::testSaturation()
-{
- QMediaCaptureSession session;
- QCamera camera;
- session.setCamera(&camera);
-
- QCOMPARE(camera.saturation()+1.0, 1.0);
-
- camera.setSaturation(0.5);
- QCOMPARE(camera.saturation(), 0.5);
-
- camera.setSaturation(-0.5);
- QCOMPARE(camera.saturation(), -0.5);
-}
-
//Added this code to cover QCamera::FocusModeHyperfocal and QCamera::FocusModeAutoNear
//As the FocusModeHyperfocal and FocusModeAutoNear are not supported we can not set the focus mode to these Focus Modes
void tst_QCamera::testFocusMode()