diff options
Diffstat (limited to 'src/multimedia/camera')
-rw-r--r-- | src/multimedia/camera/qcamera.cpp | 6 | ||||
-rw-r--r-- | src/multimedia/camera/qcameraexposure.cpp | 39 | ||||
-rw-r--r-- | src/multimedia/camera/qcameraexposure.h | 6 | ||||
-rw-r--r-- | src/multimedia/camera/qcamerafocus.cpp | 85 | ||||
-rw-r--r-- | src/multimedia/camera/qcamerafocus.h | 3 | ||||
-rw-r--r-- | src/multimedia/camera/qcameraimageprocessing.cpp | 134 | ||||
-rw-r--r-- | src/multimedia/camera/qcameraimageprocessing.h | 6 |
7 files changed, 132 insertions, 147 deletions
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) |