summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-02-08 10:53:45 +0100
committerLars Knoll <lars.knoll@qt.io>2021-02-09 19:08:25 +0000
commitf8512bcafadef8d71244f78ce7f4bc88e06698f3 (patch)
treec6912d9d904799d6650b137b8dce899cbd42ae3f
parent2b21a66eed67c30d83e4ca088c59e3ca88a20fde (diff)
Don't use QMediaService anymore to get the camera controls
Instead retrieve them from the camera control. Change-Id: Ic996a672f102f7dc3fc5e3b73f977d3864e9a129 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
-rw-r--r--src/imports/multimedia/qmldir1
-rw-r--r--src/multimedia/camera/qcamera.cpp6
-rw-r--r--src/multimedia/camera/qcameraexposure.cpp39
-rw-r--r--src/multimedia/camera/qcameraexposure.h6
-rw-r--r--src/multimedia/camera/qcamerafocus.cpp85
-rw-r--r--src/multimedia/camera/qcamerafocus.h3
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.cpp134
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.h6
-rw-r--r--src/multimedia/controls/qcameracontrol.h7
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp18
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h4
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp11
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h11
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp21
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h7
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameracontrol.mm18
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameracontrol_p.h4
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraservice.mm6
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraservice_p.h6
19 files changed, 208 insertions, 185 deletions
diff --git a/src/imports/multimedia/qmldir b/src/imports/multimedia/qmldir
index e7dcc3dd6..d68049f63 100644
--- a/src/imports/multimedia/qmldir
+++ b/src/imports/multimedia/qmldir
@@ -4,4 +4,3 @@ classname QMultimediaDeclarativeModule
typeinfo plugins.qmltypes
typeinfo plugins.qmltypes
Video 5.0 Video.qml
-
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index a418704e5..7276f9fdd 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -157,9 +157,9 @@ void QCameraPrivate::init()
{
Q_Q(QCamera);
initControls();
- cameraExposure = new QCameraExposure(q);
- cameraFocus = new QCameraFocus(q);
- imageProcessing = new QCameraImageProcessing(q);
+ cameraExposure = new QCameraExposure(q, control);
+ cameraFocus = new QCameraFocus(q, control);
+ imageProcessing = new QCameraImageProcessing(q, control);
}
void QCameraPrivate::initControls()
diff --git a/src/multimedia/camera/qcameraexposure.cpp b/src/multimedia/camera/qcameraexposure.cpp
index 693f2bb55..9acaf7d3a 100644
--- a/src/multimedia/camera/qcameraexposure.cpp
+++ b/src/multimedia/camera/qcameraexposure.cpp
@@ -42,6 +42,7 @@
#include <qcamera.h>
#include <qcameraexposurecontrol.h>
+#include <qcameracontrol.h>
#include <QtCore/QMetaObject>
#include <QtCore/QDebug>
@@ -62,20 +63,12 @@ QT_BEGIN_NAMESPACE
//#define DEBUG_EXPOSURE_CHANGES 1
-static void qRegisterCameraExposureMetaTypes()
-{
- qRegisterMetaType<QCameraExposure::ExposureMode>("QCameraExposure::ExposureMode");
- qRegisterMetaType<QCameraExposure::FlashModes>("QCameraExposure::FlashModes");
-}
-
-Q_CONSTRUCTOR_FUNCTION(qRegisterCameraExposureMetaTypes)
-
class QCameraExposurePrivate
{
Q_DECLARE_NON_CONST_PUBLIC(QCameraExposure)
public:
- void initControls();
+ void init(QCameraControl *cameraControl);
QCameraExposure *q_ptr;
template<typename T> T actualExposureParameter(QCameraExposureControl::ExposureParameter parameter, const T &defaultValue) const;
@@ -90,22 +83,20 @@ public:
void _q_exposureParameterRangeChanged(int parameter);
};
-void QCameraExposurePrivate::initControls()
+void QCameraExposurePrivate::init(QCameraControl *cameraControl)
{
Q_Q(QCameraExposure);
- QMediaService *service = camera->service();
- exposureControl = nullptr;
- if (service) {
- exposureControl = qobject_cast<QCameraExposureControl *>(service->requestControl(QCameraExposureControl_iid));
- }
- if (exposureControl) {
- q->connect(exposureControl, SIGNAL(actualValueChanged(int)),
- q, SLOT(_q_exposureParameterChanged(int)));
- q->connect(exposureControl, SIGNAL(parameterRangeChanged(int)),
- q, SLOT(_q_exposureParameterRangeChanged(int)));
- q->connect(exposureControl, SIGNAL(flashReady(bool)), q, SIGNAL(flashReady(bool)));
- }
+ exposureControl = cameraControl->exposureControl();
+
+ if (!exposureControl)
+ return;
+
+ q->connect(exposureControl, SIGNAL(actualValueChanged(int)),
+ q, SLOT(_q_exposureParameterChanged(int)));
+ q->connect(exposureControl, SIGNAL(parameterRangeChanged(int)),
+ q, SLOT(_q_exposureParameterRangeChanged(int)));
+ q->connect(exposureControl, SIGNAL(flashReady(bool)), q, SIGNAL(flashReady(bool)));
}
template<typename T>
@@ -182,13 +173,13 @@ void QCameraExposurePrivate::_q_exposureParameterRangeChanged(int parameter)
Construct a QCameraExposure from service \a provider and \a parent.
*/
-QCameraExposure::QCameraExposure(QCamera *parent):
+QCameraExposure::QCameraExposure(QCamera *parent, QCameraControl *cameraControl):
QObject(parent), d_ptr(new QCameraExposurePrivate)
{
Q_D(QCameraExposure);
d->camera = parent;
d->q_ptr = this;
- d->initControls();
+ d->init(cameraControl);
}
diff --git a/src/multimedia/camera/qcameraexposure.h b/src/multimedia/camera/qcameraexposure.h
index 78be56e21..d6550c6e3 100644
--- a/src/multimedia/camera/qcameraexposure.h
+++ b/src/multimedia/camera/qcameraexposure.h
@@ -47,6 +47,7 @@ QT_BEGIN_NAMESPACE
class QCamera;
+class QCameraControl;
class QCameraExposurePrivate;
class Q_MULTIMEDIA_EXPORT QCameraExposure : public QObject
@@ -156,7 +157,7 @@ protected:
private:
friend class QCamera;
friend class QCameraPrivate;
- explicit QCameraExposure(QCamera *parent = nullptr);
+ explicit QCameraExposure(QCamera *parent, QCameraControl *cameraControl);
Q_DISABLE_COPY(QCameraExposure)
Q_DECLARE_PRIVATE(QCameraExposure)
@@ -169,9 +170,6 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QCameraExposure::FlashModes)
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QCameraExposure::ExposureMode)
-Q_DECLARE_METATYPE(QCameraExposure::FlashModes)
-
Q_MEDIA_ENUM_DEBUG(QCameraExposure, ExposureMode)
Q_MEDIA_ENUM_DEBUG(QCameraExposure, FlashMode)
diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp
index 7fa30a859..7c07669f6 100644
--- a/src/multimedia/camera/qcamerafocus.cpp
+++ b/src/multimedia/camera/qcamerafocus.cpp
@@ -50,33 +50,6 @@
QT_BEGIN_NAMESPACE
-class QCameraFocusFakeFocusControl : public QCameraFocusControl
-{
-public:
- QCameraFocusFakeFocusControl(QObject *parent) :
- QCameraFocusControl(parent) {}
-
- [[nodiscard]] QCameraFocus::FocusModes focusMode() const override { return QCameraFocus::AutoFocus; }
- void setFocusMode(QCameraFocus::FocusModes) override { qWarning("Focus mode selection is not supported"); }
- [[nodiscard]] bool isFocusModeSupported(QCameraFocus::FocusModes) const override { return false; }
-
- [[nodiscard]] QCameraFocus::FocusPointMode focusPointMode() const override { return QCameraFocus::FocusPointAuto; }
- void setFocusPointMode(QCameraFocus::FocusPointMode) override { qWarning("Focus points mode selection is not supported"); }
- [[nodiscard]] bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const override { return false; }
- [[nodiscard]] QPointF customFocusPoint() const override { return QPointF(0.5,0.5); }
- void setCustomFocusPoint(const QPointF &) override { qWarning("Focus points selection is not supported"); }
-
- [[nodiscard]] QCameraFocusZoneList focusZones() const override { return QCameraFocusZoneList(); }
-
- ZoomRange zoomFactorRange() const override { return {1., 1.}; };
- void zoomTo(float, float) override
- {
- qWarning("The camera doesn't support zooming.");
- }
-};
-
-
-
class QCameraFocusZoneData : public QSharedData
{
public:
@@ -279,7 +252,7 @@ class QCameraFocusPrivate : public QMediaSourcePrivate
{
Q_DECLARE_NON_CONST_PUBLIC(QCameraFocus)
public:
- void initControls();
+ void init(QCameraControl *cameraControl);
QCamera *camera;
@@ -289,21 +262,15 @@ public:
};
-void QCameraFocusPrivate::initControls()
+void QCameraFocusPrivate::init(QCameraControl *cameraControl)
{
Q_Q(QCameraFocus);
- focusControl = nullptr;
-
- QMediaService *service = camera->service();
- if (service) {
- focusControl = qobject_cast<QCameraFocusControl *>(service->requestControl(QCameraFocusControl_iid));
- }
-
+ focusControl = cameraControl->focusControl();
available = focusControl != nullptr;
if (!focusControl)
- focusControl = new QCameraFocusFakeFocusControl(q);
+ return;
q->connect(focusControl, SIGNAL(focusZonesChanged()), q, SIGNAL(focusZonesChanged()));
@@ -322,12 +289,12 @@ void QCameraFocusPrivate::initControls()
Construct a QCameraFocus for \a camera.
*/
-QCameraFocus::QCameraFocus(QCamera *camera)
+QCameraFocus::QCameraFocus(QCamera *camera, QCameraControl *cameraControl)
: QObject(*new QCameraFocusPrivate, camera)
{
Q_D(QCameraFocus);
d->camera = camera;
- d->initControls();
+ d->init(cameraControl);
}
@@ -361,12 +328,15 @@ bool QCameraFocus::isAvailable() const
QCameraFocus::FocusModes QCameraFocus::focusMode() const
{
- return d_func()->focusControl->focusMode();
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->focusMode() : QCameraFocus::AutoFocus;
}
void QCameraFocus::setFocusMode(QCameraFocus::FocusModes mode)
{
- d_func()->focusControl->setFocusMode(mode);
+ Q_D(QCameraFocus);
+ if (d->focusControl)
+ d->focusControl->setFocusMode(mode);
}
/*!
@@ -375,7 +345,8 @@ void QCameraFocus::setFocusMode(QCameraFocus::FocusModes mode)
bool QCameraFocus::isFocusModeSupported(FocusModes mode) const
{
- return d_func()->focusControl->isFocusModeSupported(mode);
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->isFocusModeSupported(mode) : false;
}
/*!
@@ -391,12 +362,15 @@ bool QCameraFocus::isFocusModeSupported(FocusModes mode) const
QCameraFocus::FocusPointMode QCameraFocus::focusPointMode() const
{
- return d_func()->focusControl->focusPointMode();
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->focusPointMode() : QCameraFocus::FocusPointAuto;
}
void QCameraFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode)
{
- d_func()->focusControl->setFocusPointMode(mode);
+ Q_D(QCameraFocus);
+ if (d->focusControl)
+ d->focusControl->setFocusPointMode(mode);
}
/*!
@@ -404,7 +378,8 @@ void QCameraFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode)
*/
bool QCameraFocus::isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const
{
- return d_func()->focusControl->isFocusPointModeSupported(mode);
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->isFocusPointModeSupported(mode) : false;
}
/*!
@@ -418,12 +393,15 @@ bool QCameraFocus::isFocusPointModeSupported(QCameraFocus::FocusPointMode mode)
QPointF QCameraFocus::customFocusPoint() const
{
- return d_func()->focusControl->customFocusPoint();
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->customFocusPoint() : QPointF(0.5,0.5);
}
void QCameraFocus::setCustomFocusPoint(const QPointF &point)
{
- d_func()->focusControl->setCustomFocusPoint(point);
+ Q_D(QCameraFocus);
+ if (d->focusControl)
+ d->focusControl->setCustomFocusPoint(point);
}
/*!
@@ -439,7 +417,8 @@ void QCameraFocus::setCustomFocusPoint(const QPointF &point)
*/
QCameraFocusZoneList QCameraFocus::focusZones() const
{
- return d_func()->focusControl->focusZones();
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->focusZones() : QCameraFocusZoneList();
}
/*!
@@ -450,7 +429,8 @@ QCameraFocusZoneList QCameraFocus::focusZones() const
float QCameraFocus::maximumZoomFactor() const
{
- return d_func()->focusControl->zoomFactorRange().max;
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->zoomFactorRange().max : 1.;
}
/*!
@@ -461,7 +441,8 @@ float QCameraFocus::maximumZoomFactor() const
float QCameraFocus::minimumZoomFactor() const
{
- return d_func()->focusControl->zoomFactorRange().min;
+ Q_D(const QCameraFocus);
+ return d->focusControl ? d->focusControl->zoomFactorRange().min : 1.;
}
/*!
@@ -476,6 +457,7 @@ float QCameraFocus::zoomFactor() const
void QCameraFocus::setZoomFactor(float factor)
{
Q_D(QCameraFocus);
+ factor = qBound(minimumZoomFactor(), factor, maximumZoomFactor());
d->zoomFactor = factor;
d->focusControl->zoomTo(factor, -1);
}
@@ -488,7 +470,10 @@ void QCameraFocus::setZoomFactor(float factor)
*/
void QCameraFocus::zoomTo(float factor, float rate)
{
+ Q_ASSERT(rate > 0);
+
Q_D(QCameraFocus);
+ factor = qBound(minimumZoomFactor(), factor, maximumZoomFactor());
d->zoomFactor = factor;
d->focusControl->zoomTo(factor, rate);
}
diff --git a/src/multimedia/camera/qcamerafocus.h b/src/multimedia/camera/qcamerafocus.h
index 1b8d69628..ecdb7b623 100644
--- a/src/multimedia/camera/qcamerafocus.h
+++ b/src/multimedia/camera/qcamerafocus.h
@@ -54,6 +54,7 @@ QT_BEGIN_NAMESPACE
class QCamera;
+class QCameraControl;
class QCameraFocusZoneData;
@@ -152,7 +153,7 @@ protected:
private:
friend class QCamera;
friend class QCameraPrivate;
- QCameraFocus(QCamera *camera);
+ QCameraFocus(QCamera *camera, QCameraControl *cameraControl);
Q_DISABLE_COPY(QCameraFocus)
Q_DECLARE_PRIVATE(QCameraFocus)
diff --git a/src/multimedia/camera/qcameraimageprocessing.cpp b/src/multimedia/camera/qcameraimageprocessing.cpp
index e7e53d491..502bcf07a 100644
--- a/src/multimedia/camera/qcameraimageprocessing.cpp
+++ b/src/multimedia/camera/qcameraimageprocessing.cpp
@@ -41,23 +41,12 @@
#include "qmediasource_p.h"
#include <qcameracontrol.h>
-#include <qcameraexposurecontrol.h>
-#include <qcamerafocuscontrol.h>
#include <qcameraimageprocessingcontrol.h>
#include <QtCore/QDebug>
QT_BEGIN_NAMESPACE
-static void qRegisterCameraImageProcessingMetaTypes()
- {
- qRegisterMetaType<QCameraImageProcessing::WhiteBalanceMode>();
- qRegisterMetaType<QCameraImageProcessing::ColorFilter>();
- }
-
-Q_CONSTRUCTOR_FUNCTION(qRegisterCameraImageProcessingMetaTypes)
-
-
/*!
\class QCameraImageProcessing
@@ -92,55 +81,31 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterCameraImageProcessingMetaTypes)
\sa QCameraImageProcessingControl
*/
-class QCameraImageProcessingFakeControl : public QCameraImageProcessingControl {
-public:
- QCameraImageProcessingFakeControl(QObject *parent) :
- QCameraImageProcessingControl(parent)
- {}
-
- [[nodiscard]] bool isParameterSupported(ProcessingParameter) const override { return false; }
- [[nodiscard]] bool isParameterValueSupported(ProcessingParameter, const QVariant &) const override { return false; }
- [[nodiscard]] QVariant parameter(ProcessingParameter) const override { return QVariant(); }
- void setParameter(ProcessingParameter, const QVariant &) override {}
-};
-
-
class QCameraImageProcessingPrivate : public QMediaSourcePrivate
{
- Q_DECLARE_NON_CONST_PUBLIC(QCameraImageProcessing)
public:
- void initControls();
+ void init(QCameraControl *cameraControl);
QCamera *camera;
QCameraImageProcessingControl *imageControl;
- bool available;
};
-void QCameraImageProcessingPrivate::initControls()
+void QCameraImageProcessingPrivate::init(QCameraControl *cameraControl)
{
- imageControl = nullptr;
-
- QMediaService *service = camera->service();
- if (service)
- imageControl = qobject_cast<QCameraImageProcessingControl *>(service->requestControl(QCameraImageProcessingControl_iid));
-
- available = (imageControl != nullptr);
-
- if (!imageControl)
- imageControl = new QCameraImageProcessingFakeControl(q_ptr);
+ imageControl = cameraControl->imageProcessingControl();
}
/*!
Construct a QCameraImageProcessing for \a camera.
*/
-QCameraImageProcessing::QCameraImageProcessing(QCamera *camera)
+QCameraImageProcessing::QCameraImageProcessing(QCamera *camera, QCameraControl *cameraControl)
: QObject(*new QCameraImageProcessingPrivate, camera)
{
Q_D(QCameraImageProcessing);
d->camera = camera;
- d->initControls();
+ d->init(cameraControl);
}
@@ -158,7 +123,7 @@ QCameraImageProcessing::~QCameraImageProcessing()
*/
bool QCameraImageProcessing::isAvailable() const
{
- return d_func()->available;
+ return d_func()->imageControl;
}
@@ -168,7 +133,10 @@ bool QCameraImageProcessing::isAvailable() const
QCameraImageProcessing::WhiteBalanceMode QCameraImageProcessing::whiteBalanceMode() const
{
- return d_func()->imageControl->parameter(QCameraImageProcessingControl::WhiteBalancePreset)
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return WhiteBalanceAuto;
+ return d->imageControl->parameter(QCameraImageProcessingControl::WhiteBalancePreset)
.value<QCameraImageProcessing::WhiteBalanceMode>();
}
@@ -178,7 +146,9 @@ QCameraImageProcessing::WhiteBalanceMode QCameraImageProcessing::whiteBalanceMod
void QCameraImageProcessing::setWhiteBalanceMode(QCameraImageProcessing::WhiteBalanceMode mode)
{
- d_func()->imageControl->setParameter(
+ Q_D(QCameraImageProcessing);
+ if (d->imageControl)
+ d->imageControl->setParameter(
QCameraImageProcessingControl::WhiteBalancePreset,
QVariant::fromValue<QCameraImageProcessing::WhiteBalanceMode>(mode));
}
@@ -189,7 +159,10 @@ void QCameraImageProcessing::setWhiteBalanceMode(QCameraImageProcessing::WhiteBa
bool QCameraImageProcessing::isWhiteBalanceModeSupported(QCameraImageProcessing::WhiteBalanceMode mode) const
{
- return d_func()->imageControl->isParameterValueSupported(
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return false;
+ return d->imageControl->isParameterValueSupported(
QCameraImageProcessingControl::WhiteBalancePreset,
QVariant::fromValue<QCameraImageProcessing::WhiteBalanceMode>(mode));
@@ -203,7 +176,11 @@ bool QCameraImageProcessing::isWhiteBalanceModeSupported(QCameraImageProcessing:
qreal QCameraImageProcessing::manualWhiteBalance() const
{
- return d_func()->imageControl->parameter(QCameraImageProcessingControl::ColorTemperature).toReal();
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return 0.;
+
+ return d->imageControl->parameter(QCameraImageProcessingControl::ColorTemperature).toReal();
}
/*!
@@ -213,7 +190,9 @@ qreal QCameraImageProcessing::manualWhiteBalance() const
void QCameraImageProcessing::setManualWhiteBalance(qreal colorTemperature)
{
- d_func()->imageControl->setParameter(
+ Q_D(QCameraImageProcessing);
+ if (d->imageControl)
+ d->imageControl->setParameter(
QCameraImageProcessingControl::ColorTemperature,
QVariant(colorTemperature));
}
@@ -223,7 +202,10 @@ void QCameraImageProcessing::setManualWhiteBalance(qreal colorTemperature)
*/
qreal QCameraImageProcessing::brightness() const
{
- return d_func()->imageControl->parameter(QCameraImageProcessingControl::BrightnessAdjustment).toReal();
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return 0.;
+ return d->imageControl->parameter(QCameraImageProcessingControl::BrightnessAdjustment).toReal();
}
/*!
@@ -233,7 +215,9 @@ qreal QCameraImageProcessing::brightness() const
*/
void QCameraImageProcessing::setBrightness(qreal value)
{
- d_func()->imageControl->setParameter(QCameraImageProcessingControl::BrightnessAdjustment,
+ Q_D(QCameraImageProcessing);
+ if (d->imageControl)
+ d->imageControl->setParameter(QCameraImageProcessingControl::BrightnessAdjustment,
QVariant(value));
}
@@ -242,7 +226,10 @@ void QCameraImageProcessing::setBrightness(qreal value)
*/
qreal QCameraImageProcessing::contrast() const
{
- return d_func()->imageControl->parameter(QCameraImageProcessingControl::ContrastAdjustment).toReal();
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return 0.;
+ return d->imageControl->parameter(QCameraImageProcessingControl::ContrastAdjustment).toReal();
}
/*!
@@ -252,7 +239,9 @@ qreal QCameraImageProcessing::contrast() const
*/
void QCameraImageProcessing::setContrast(qreal value)
{
- d_func()->imageControl->setParameter(QCameraImageProcessingControl::ContrastAdjustment,
+ Q_D(QCameraImageProcessing);
+ if (d->imageControl)
+ d->imageControl->setParameter(QCameraImageProcessingControl::ContrastAdjustment,
QVariant(value));
}
@@ -261,7 +250,10 @@ void QCameraImageProcessing::setContrast(qreal value)
*/
qreal QCameraImageProcessing::saturation() const
{
- return d_func()->imageControl->parameter(QCameraImageProcessingControl::SaturationAdjustment).toReal();
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return 0.;
+ return d->imageControl->parameter(QCameraImageProcessingControl::SaturationAdjustment).toReal();
}
/*!
@@ -272,7 +264,9 @@ qreal QCameraImageProcessing::saturation() const
void QCameraImageProcessing::setSaturation(qreal value)
{
- d_func()->imageControl->setParameter(QCameraImageProcessingControl::SaturationAdjustment,
+ Q_D(QCameraImageProcessing);
+ if (d->imageControl)
+ d->imageControl->setParameter(QCameraImageProcessingControl::SaturationAdjustment,
QVariant(value));
}
@@ -281,7 +275,10 @@ void QCameraImageProcessing::setSaturation(qreal value)
*/
qreal QCameraImageProcessing::sharpeningLevel() const
{
- return d_func()->imageControl->parameter(QCameraImageProcessingControl::SharpeningAdjustment).toReal();
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return 0.;
+ return d->imageControl->parameter(QCameraImageProcessingControl::SharpeningAdjustment).toReal();
}
/*!
@@ -292,7 +289,9 @@ qreal QCameraImageProcessing::sharpeningLevel() const
void QCameraImageProcessing::setSharpeningLevel(qreal level)
{
- d_func()->imageControl->setParameter(QCameraImageProcessingControl::SharpeningAdjustment,
+ Q_D(QCameraImageProcessing);
+ if (d->imageControl)
+ d->imageControl->setParameter(QCameraImageProcessingControl::SharpeningAdjustment,
QVariant(level));
}
@@ -301,7 +300,10 @@ void QCameraImageProcessing::setSharpeningLevel(qreal level)
*/
qreal QCameraImageProcessing::denoisingLevel() const
{
- return d_func()->imageControl->parameter(QCameraImageProcessingControl::DenoisingAdjustment).toReal();
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return 0.;
+ return d->imageControl->parameter(QCameraImageProcessingControl::DenoisingAdjustment).toReal();
}
/*!
@@ -316,7 +318,9 @@ qreal QCameraImageProcessing::denoisingLevel() const
*/
void QCameraImageProcessing::setDenoisingLevel(qreal level)
{
- d_func()->imageControl->setParameter(QCameraImageProcessingControl::DenoisingAdjustment,
+ Q_D(QCameraImageProcessing);
+ if (d->imageControl)
+ d->imageControl->setParameter(QCameraImageProcessingControl::DenoisingAdjustment,
QVariant(level));
}
@@ -361,7 +365,10 @@ void QCameraImageProcessing::setDenoisingLevel(qreal level)
QCameraImageProcessing::ColorFilter QCameraImageProcessing::colorFilter() const
{
- return d_func()->imageControl->parameter(QCameraImageProcessingControl::ColorFilter)
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return ColorFilterNone;
+ return d->imageControl->parameter(QCameraImageProcessingControl::ColorFilter)
.value<QCameraImageProcessing::ColorFilter>();
}
@@ -374,9 +381,11 @@ QCameraImageProcessing::ColorFilter QCameraImageProcessing::colorFilter() const
void QCameraImageProcessing::setColorFilter(QCameraImageProcessing::ColorFilter filter)
{
- d_func()->imageControl->setParameter(
- QCameraImageProcessingControl::ColorFilter,
- QVariant::fromValue<QCameraImageProcessing::ColorFilter>(filter));
+ Q_D(QCameraImageProcessing);
+ if (d->imageControl)
+ d->imageControl->setParameter(
+ QCameraImageProcessingControl::ColorFilter,
+ QVariant::fromValue<QCameraImageProcessing::ColorFilter>(filter));
}
/*!
@@ -387,7 +396,10 @@ void QCameraImageProcessing::setColorFilter(QCameraImageProcessing::ColorFilter
bool QCameraImageProcessing::isColorFilterSupported(QCameraImageProcessing::ColorFilter filter) const
{
- return d_func()->imageControl->isParameterValueSupported(
+ Q_D(const QCameraImageProcessing);
+ if (!d->imageControl)
+ return false;
+ return d->imageControl->isParameterValueSupported(
QCameraImageProcessingControl::ColorFilter,
QVariant::fromValue<QCameraImageProcessing::ColorFilter>(filter));
diff --git a/src/multimedia/camera/qcameraimageprocessing.h b/src/multimedia/camera/qcameraimageprocessing.h
index 6f26adf5a..d77e9a694 100644
--- a/src/multimedia/camera/qcameraimageprocessing.h
+++ b/src/multimedia/camera/qcameraimageprocessing.h
@@ -55,6 +55,7 @@ QT_BEGIN_NAMESPACE
class QCamera;
+class QCameraControl;
class QCameraImageProcessingPrivate;
class Q_MULTIMEDIA_EXPORT QCameraImageProcessing : public QObject
@@ -122,7 +123,7 @@ protected:
private:
friend class QCamera;
friend class QCameraPrivate;
- QCameraImageProcessing(QCamera *camera);
+ QCameraImageProcessing(QCamera *camera, QCameraControl *cameraControl);
Q_DISABLE_COPY(QCameraImageProcessing)
Q_DECLARE_PRIVATE(QCameraImageProcessing)
@@ -130,9 +131,6 @@ private:
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QCameraImageProcessing::WhiteBalanceMode)
-Q_DECLARE_METATYPE(QCameraImageProcessing::ColorFilter)
-
Q_MEDIA_ENUM_DEBUG(QCameraImageProcessing, WhiteBalanceMode)
Q_MEDIA_ENUM_DEBUG(QCameraImageProcessing, ColorFilter)
diff --git a/src/multimedia/controls/qcameracontrol.h b/src/multimedia/controls/qcameracontrol.h
index fd557a734..8074381f0 100644
--- a/src/multimedia/controls/qcameracontrol.h
+++ b/src/multimedia/controls/qcameracontrol.h
@@ -49,6 +49,9 @@ QT_BEGIN_NAMESPACE
// Required for QDoc workaround
class QString;
+class QCameraFocusControl;
+class QCameraExposureControl;
+class QCameraImageProcessingControl;
class Q_MULTIMEDIA_EXPORT QCameraControl : public QObject
{
@@ -82,6 +85,10 @@ public:
virtual void searchAndLock(QCamera::LockTypes locks) = 0;
virtual void unlock(QCamera::LockTypes locks) = 0;
+ virtual QCameraFocusControl *focusControl() { return nullptr; }
+ virtual QCameraExposureControl *exposureControl() { return nullptr; }
+ virtual QCameraImageProcessingControl *imageProcessingControl() { return nullptr; }
+
Q_SIGNALS:
void stateChanged(QCamera::State);
void statusChanged(QCamera::Status);
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp
index 62a548830..700ce2928 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp
@@ -39,6 +39,9 @@
#include "qandroidcameracontrol_p.h"
#include "qandroidcamerasession_p.h"
+#include "qandroidcameraexposurecontrol_p.h"
+#include "qandroidcamerafocuscontrol_p.h"
+#include "qandroidcameraimageprocessingcontrol_p.h"
#include <qmediadevicemanager.h>
#include <qcamerainfo.h>
#include <qtimer.h>
@@ -235,6 +238,21 @@ void QAndroidCameraControl::unlock(QCamera::LockTypes locks)
}
}
+QCameraFocusControl *QAndroidCameraControl::focusControl()
+{
+ return m_cameraSession->focusControl();
+}
+
+QCameraExposureControl *QAndroidCameraControl::exposureControl()
+{
+ return m_cameraSession->exposureControl();
+}
+
+QCameraImageProcessingControl *QAndroidCameraControl::imageProcessingControl()
+{
+ return m_cameraSession->imageProcessingControl();
+}
+
void QAndroidCameraControl::onCameraOpened()
{
m_supportedLocks = QCamera::NoLock;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h
index 77bcbf7ff..d313db9fd 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h
@@ -83,6 +83,10 @@ public:
void searchAndLock(QCamera::LockTypes locks) override;
void unlock(QCamera::LockTypes locks) override;
+ QCameraFocusControl *focusControl() override;
+ QCameraExposureControl *exposureControl() override;
+ QCameraImageProcessingControl *imageProcessingControl() override;
+
private Q_SLOTS:
void onCameraOpened();
void onCameraAutoFocusComplete(bool success);
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
index fdf791f85..042f66078 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
@@ -45,6 +45,9 @@
#include "qandroidvideooutput_p.h"
#include "qandroidmultimediautils_p.h"
#include "qandroidcameravideorenderercontrol_p.h"
+#include "qandroidcameraexposurecontrol_p.h"
+#include "qandroidcamerafocuscontrol_p.h"
+#include "qandroidcameraimageprocessingcontrol_p.h"
#include <qabstractvideosurface.h>
#include <QtConcurrent/qtconcurrentrun.h>
#include <qfile.h>
@@ -82,6 +85,10 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent)
QMediaStorageLocation::Pictures,
AndroidMultimediaUtils::getDefaultMediaDirectory(AndroidMultimediaUtils::DCIM));
+ m_cameraExposureControl = new QAndroidCameraExposureControl(this);
+ m_cameraFocusControl = new QAndroidCameraFocusControl(this);
+ m_cameraImageProcessingControl = new QAndroidCameraImageProcessingControl(this);
+
if (qApp) {
connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)),
this, SLOT(onApplicationStateChanged(Qt::ApplicationState)));
@@ -90,6 +97,10 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent)
QAndroidCameraSession::~QAndroidCameraSession()
{
+ delete m_cameraExposureControl;
+ delete m_cameraFocusControl;
+ delete m_cameraImageProcessingControl;
+
close();
}
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
index ea0176a6f..c2278434b 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
@@ -63,6 +63,9 @@
QT_BEGIN_NAMESPACE
class QAndroidVideoOutput;
+class QAndroidCameraExposureControl;
+class QAndroidCameraFocusControl;
+class QAndroidCameraImageProcessingControl;
class QAndroidCameraSession : public QObject
{
@@ -117,6 +120,10 @@ public:
void setPreviewCallback(PreviewCallback *callback);
bool requestRecordingPermission();
+ QAndroidCameraFocusControl *focusControl() { return m_cameraFocusControl; }
+ QAndroidCameraExposureControl *exposureControl() { return m_cameraExposureControl; }
+ QAndroidCameraImageProcessingControl *imageProcessingControl() { return m_cameraImageProcessingControl; }
+
Q_SIGNALS:
void statusChanged(QCamera::Status status);
void stateChanged(QCamera::State);
@@ -182,6 +189,10 @@ private:
QCamera::Status m_status;
bool m_previewStarted;
+ QAndroidCameraExposureControl *m_cameraExposureControl;
+ QAndroidCameraFocusControl *m_cameraFocusControl;
+ QAndroidCameraImageProcessingControl *m_cameraImageProcessingControl;
+
QImageEncoderSettings m_requestedImageSettings;
QImageEncoderSettings m_actualImageSettings;
QCameraImageCapture::CaptureDestinations m_captureDestination;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp
index 26095fd36..9721229a6 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp
@@ -45,9 +45,6 @@
#include "qandroidcameracontrol_p.h"
#include "qandroidcamerasession_p.h"
#include "qandroidcameravideorenderercontrol_p.h"
-#include "qandroidcameraexposurecontrol_p.h"
-#include "qandroidcamerafocuscontrol_p.h"
-#include "qandroidcameraimageprocessingcontrol_p.h"
#include "qandroidimageencodercontrol_p.h"
#include "qandroidcameraimagecapturecontrol_p.h"
@@ -60,17 +57,11 @@ QAndroidCaptureService::QAndroidCaptureService(QMediaRecorder::CaptureMode mode)
if (m_videoEnabled) {
m_cameraSession = new QAndroidCameraSession;
m_cameraControl = new QAndroidCameraControl(m_cameraSession);
- m_cameraExposureControl = new QAndroidCameraExposureControl(m_cameraSession);
- m_cameraFocusControl = new QAndroidCameraFocusControl(m_cameraSession);
- m_cameraImageProcessingControl = new QAndroidCameraImageProcessingControl(m_cameraSession);
m_imageEncoderControl = new QAndroidImageEncoderControl(m_cameraSession);
m_imageCaptureControl = new QAndroidCameraImageCaptureControl(m_cameraSession);
} else {
m_cameraSession = 0;
m_cameraControl = 0;
- m_cameraExposureControl = 0;
- m_cameraFocusControl = 0;
- m_cameraImageProcessingControl = 0;
m_imageEncoderControl = 0;
m_imageCaptureControl = 0;
}
@@ -85,9 +76,6 @@ QAndroidCaptureService::~QAndroidCaptureService()
delete m_captureSession;
delete m_cameraControl;
delete m_videoRendererControl;
- delete m_cameraExposureControl;
- delete m_cameraFocusControl;
- delete m_cameraImageProcessingControl;
delete m_imageEncoderControl;
delete m_imageCaptureControl;
delete m_cameraSession;
@@ -101,15 +89,6 @@ QObject *QAndroidCaptureService::requestControl(const char *name)
if (qstrcmp(name, QCameraControl_iid) == 0)
return m_cameraControl;
- if (qstrcmp(name, QCameraExposureControl_iid) == 0)
- return m_cameraExposureControl;
-
- if (qstrcmp(name, QCameraFocusControl_iid) == 0)
- return m_cameraFocusControl;
-
- if (qstrcmp(name, QCameraImageProcessingControl_iid) == 0)
- return m_cameraImageProcessingControl;
-
if (qstrcmp(name, QImageEncoderControl_iid) == 0)
return m_imageEncoderControl;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h
index b9d7bb685..0f0892a24 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h
@@ -63,9 +63,6 @@ class QAndroidCaptureSession;
class QAndroidCameraControl;
class QAndroidCameraSession;
class QAndroidCameraVideoRendererControl;
-class QAndroidCameraExposureControl;
-class QAndroidCameraFocusControl;
-class QAndroidCameraImageProcessingControl;
class QAndroidImageEncoderControl;
class QAndroidCameraImageCaptureControl;
@@ -80,7 +77,6 @@ public:
QObject *requestControl(const char *name);
void releaseControl(QObject *);
-private:
bool m_videoEnabled = false;
QAndroidMediaRecorderControl *m_recorderControl;
@@ -88,9 +84,6 @@ private:
QAndroidCameraControl *m_cameraControl;
QAndroidCameraSession *m_cameraSession;
QAndroidCameraVideoRendererControl *m_videoRendererControl;
- QAndroidCameraExposureControl *m_cameraExposureControl;
- QAndroidCameraFocusControl *m_cameraFocusControl;
- QAndroidCameraImageProcessingControl *m_cameraImageProcessingControl;
QAndroidImageEncoderControl *m_imageEncoderControl;
QAndroidCameraImageCaptureControl *m_imageCaptureControl;
};
diff --git a/src/multimedia/platform/darwin/camera/avfcameracontrol.mm b/src/multimedia/platform/darwin/camera/avfcameracontrol.mm
index 1a8051c46..ae492257e 100644
--- a/src/multimedia/platform/darwin/camera/avfcameracontrol.mm
+++ b/src/multimedia/platform/darwin/camera/avfcameracontrol.mm
@@ -43,6 +43,8 @@
#include "avfcameraservice_p.h"
#include "avfcamerautility_p.h"
#include "avfcamerarenderercontrol_p.h"
+#include "avfcameraexposurecontrol_p.h"
+#include "avfcamerafocuscontrol_p.h"
#include "qabstractvideosurface.h"
QT_USE_NAMESPACE
@@ -230,4 +232,20 @@ AVCaptureConnection *AVFCameraControl::videoConnection() const
return [m_service->videoOutput()->videoDataOutput() connectionWithMediaType:AVMediaTypeVideo];
}
+
+QCameraFocusControl *AVFCameraControl::focusControl()
+{
+ return m_service->cameraFocusControl();
+}
+
+QCameraExposureControl *AVFCameraControl::exposureControl()
+{
+ return m_service->cameraExposureControl();
+}
+
+QCameraImageProcessingControl *AVFCameraControl::imageProcessingControl()
+{
+ return nullptr;
+}
+
#include "moc_avfcameracontrol_p.cpp"
diff --git a/src/multimedia/platform/darwin/camera/avfcameracontrol_p.h b/src/multimedia/platform/darwin/camera/avfcameracontrol_p.h
index 8a66e0579..d0a7bba01 100644
--- a/src/multimedia/platform/darwin/camera/avfcameracontrol_p.h
+++ b/src/multimedia/platform/darwin/camera/avfcameracontrol_p.h
@@ -89,6 +89,10 @@ public:
void searchAndLock(QCamera::LockTypes locks) override;
void unlock(QCamera::LockTypes locks) override;
+ QCameraFocusControl *focusControl() override;
+ QCameraExposureControl *exposureControl() override;
+ QCameraImageProcessingControl *imageProcessingControl() override;
+
// "Converters":
static QVideoFrame::PixelFormat QtPixelFormatFromCVFormat(unsigned avPixelFormat);
static bool CVPixelFormatFromQtFormat(QVideoFrame::PixelFormat qtFormat, unsigned &conv);
diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice.mm b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
index a811cc746..5a4a2b2de 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraservice.mm
+++ b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
@@ -128,12 +128,6 @@ QObject *AVFCameraService::requestControl(const char *name)
if (qstrcmp(name, QCameraImageCaptureControl_iid) == 0)
return m_imageCaptureControl;
- if (qstrcmp(name, QCameraExposureControl_iid) == 0)
- return m_cameraExposureControl;
-
- if (qstrcmp(name, QCameraFocusControl_iid) == 0)
- return m_cameraFocusControl;
-
if (qstrcmp(name, QImageEncoderControl_iid) == 0)
return m_imageEncoderControl;
diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice_p.h b/src/multimedia/platform/darwin/camera/avfcameraservice_p.h
index 5bcde87c3..a848725b7 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraservice_p.h
+++ b/src/multimedia/platform/darwin/camera/avfcameraservice_p.h
@@ -87,9 +87,9 @@ public:
QMediaRecorderControl *recorderControl() const { return m_recorderControl; }
AVFImageCaptureControl *imageCaptureControl() const { return m_imageCaptureControl; }
AVFCameraFocusControl *cameraFocusControl() const { return m_cameraFocusControl; }
- AVFCameraExposureControl *cameraExposureControl() const {return m_cameraExposureControl; }
- AVFCameraRendererControl *videoOutput() const {return m_videoOutput; }
- AVFImageEncoderControl *imageEncoderControl() const {return m_imageEncoderControl; }
+ AVFCameraExposureControl *cameraExposureControl() const { return m_cameraExposureControl; }
+ AVFCameraRendererControl *videoOutput() const { return m_videoOutput; }
+ AVFImageEncoderControl *imageEncoderControl() const { return m_imageEncoderControl; }
private:
AVFCameraSession *m_session;