diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-05-19 10:14:59 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-05-19 18:11:56 +0000 |
commit | 9f360934cb90b667ac9119ee93f67980b7b4e563 (patch) | |
tree | 753c9d78dcfc6b3739642ab3d43f7f3e31307854 | |
parent | 0c40d337ae107d5ab2fde5da022c071c64c67e0e (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.cpp | 13 | ||||
-rw-r--r-- | examples/multimediawidgets/camera/camera.ui | 103 | ||||
-rw-r--r-- | src/multimedia/camera/qcamera.cpp | 97 | ||||
-rw-r--r-- | src/multimedia/camera/qcamera.h | 14 | ||||
-rw-r--r-- | src/multimedia/camera/qcamera_p.h | 4 | ||||
-rw-r--r-- | src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing.cpp | 67 | ||||
-rw-r--r-- | src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimageprocessing_p.h | 25 | ||||
-rw-r--r-- | src/multimedia/platform/qplatformcameraimageprocessing_p.h | 4 | ||||
-rw-r--r-- | tests/auto/unit/mockbackend/qmockcameraimageprocessing.h | 15 | ||||
-rw-r--r-- | tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp | 34 |
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() |