diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2012-01-25 16:24:55 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-02 02:37:33 +0100 |
commit | 6a88794db4b35128eeef1f3514203d375dbba280 (patch) | |
tree | de6c3e4cfa072216a02bff9be1f84239652399d4 /src/multimedia/camera | |
parent | 80eaaa21524d2f8ff8f3eb7b657936a27388d69f (diff) |
QCameraImageProcessingControl API fixes
Moved white balance preset from the separate methods to
QCameraImageProcessingControl::ProcessingParameter;
Separated absolute contrast/saturation/sharpening/denoising
settings with adjustments to backend decided values,
with QCameraImageProcessing using adjustments versions.
Changed type of parameters from int to qreal
with [0..1] range for absolute values and [-1..1] for adjustments.
Change-Id: I85c8781c046be6dd45bcf626c25908e1ce5f6bcb
Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com>
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Diffstat (limited to 'src/multimedia/camera')
-rw-r--r-- | src/multimedia/camera/qcameraimageprocessing.cpp | 181 | ||||
-rw-r--r-- | src/multimedia/camera/qcameraimageprocessing.h | 25 |
2 files changed, 78 insertions, 128 deletions
diff --git a/src/multimedia/camera/qcameraimageprocessing.cpp b/src/multimedia/camera/qcameraimageprocessing.cpp index ab004c34c..3d7812b00 100644 --- a/src/multimedia/camera/qcameraimageprocessing.cpp +++ b/src/multimedia/camera/qcameraimageprocessing.cpp @@ -101,6 +101,18 @@ QT_BEGIN_NAMESPACE \sa QCameraImageProcessingControl */ +class QCameraImageProcessingFakeControl : public QCameraImageProcessingControl { +public: + QCameraImageProcessingFakeControl(QObject *parent) : + QCameraImageProcessingControl(parent) + {} + + bool isParameterSupported(ProcessingParameter) const { return false; } + bool isParameterValueSupported(ProcessingParameter, const QVariant &) const { return false; } + QVariant parameter(ProcessingParameter) const { return QVariant(); } + void setParameter(ProcessingParameter, const QVariant &) {} +}; + class QCameraImageProcessingPrivate : public QMediaObjectPrivate { @@ -112,6 +124,7 @@ public: QCamera *camera; QCameraImageProcessingControl *imageControl; + bool available; }; @@ -122,6 +135,11 @@ void QCameraImageProcessingPrivate::initControls() QMediaService *service = camera->service(); if (service) imageControl = qobject_cast<QCameraImageProcessingControl *>(service->requestControl(QCameraImageProcessingControl_iid)); + + available = (imageControl != 0); + + if (!imageControl) + imageControl = new QCameraImageProcessingFakeControl(q_ptr); } /*! @@ -152,7 +170,7 @@ QCameraImageProcessing::~QCameraImageProcessing() */ bool QCameraImageProcessing::isAvailable() const { - return d_func()->imageControl != 0; + return d_func()->available; } @@ -162,7 +180,8 @@ bool QCameraImageProcessing::isAvailable() const QCameraImageProcessing::WhiteBalanceMode QCameraImageProcessing::whiteBalanceMode() const { - return d_func()->imageControl ? d_func()->imageControl->whiteBalanceMode() : QCameraImageProcessing::WhiteBalanceAuto; + return d_func()->imageControl->parameter(QCameraImageProcessingControl::WhiteBalancePreset) + .value<QCameraImageProcessing::WhiteBalanceMode>(); } /*! @@ -171,8 +190,9 @@ QCameraImageProcessing::WhiteBalanceMode QCameraImageProcessing::whiteBalanceMod void QCameraImageProcessing::setWhiteBalanceMode(QCameraImageProcessing::WhiteBalanceMode mode) { - if (d_func()->imageControl) - d_func()->imageControl->setWhiteBalanceMode(mode); + d_func()->imageControl->setParameter( + QCameraImageProcessingControl::WhiteBalancePreset, + QVariant::fromValue<QCameraImageProcessing::WhiteBalanceMode>(mode)); } /*! @@ -181,7 +201,10 @@ void QCameraImageProcessing::setWhiteBalanceMode(QCameraImageProcessing::WhiteBa bool QCameraImageProcessing::isWhiteBalanceModeSupported(QCameraImageProcessing::WhiteBalanceMode mode) const { - return d_func()->imageControl ? d_func()->imageControl->isWhiteBalanceModeSupported(mode) : false; + return d_func()->imageControl->isParameterValueSupported( + QCameraImageProcessingControl::WhiteBalancePreset, + QVariant::fromValue<QCameraImageProcessing::WhiteBalanceMode>(mode)); + } /*! @@ -190,14 +213,9 @@ bool QCameraImageProcessing::isWhiteBalanceModeSupported(QCameraImageProcessing: return value is undefined. */ -int QCameraImageProcessing::manualWhiteBalance() const +qreal QCameraImageProcessing::manualWhiteBalance() const { - QVariant value; - - if (d_func()->imageControl) - value = d_func()->imageControl->processingParameter(QCameraImageProcessingControl::ColorTemperature); - - return value.toInt(); + return d_func()->imageControl->parameter(QCameraImageProcessingControl::ColorTemperature).toReal(); } /*! @@ -205,161 +223,96 @@ int QCameraImageProcessing::manualWhiteBalance() const when whiteBalanceMode() is set to \c WhiteBalanceManual. The units are Kelvin. */ -void QCameraImageProcessing::setManualWhiteBalance(int colorTemperature) +void QCameraImageProcessing::setManualWhiteBalance(qreal colorTemperature) { - if (d_func()->imageControl) { - d_func()->imageControl->setProcessingParameter( - QCameraImageProcessingControl::ColorTemperature, - QVariant(colorTemperature)); - } + d_func()->imageControl->setParameter( + QCameraImageProcessingControl::ColorTemperature, + QVariant(colorTemperature)); } /*! Returns the contrast adjustment setting. */ -int QCameraImageProcessing::contrast() const +qreal QCameraImageProcessing::contrast() const { - QVariant value; - - if (d_func()->imageControl) - value = d_func()->imageControl->processingParameter(QCameraImageProcessingControl::Contrast); - - return value.toInt(); + return d_func()->imageControl->parameter(QCameraImageProcessingControl::ContrastAdjustment).toReal(); } /*! Set the contrast adjustment to \a value. - Valid contrast adjustment values range between -100 and 100, with a default of 0. + Valid contrast adjustment values range between -1.0 and 1.0, with a default of 0. */ -void QCameraImageProcessing::setContrast(int value) +void QCameraImageProcessing::setContrast(qreal value) { - if (d_func()->imageControl) - d_func()->imageControl->setProcessingParameter(QCameraImageProcessingControl::Contrast, - QVariant(value)); + d_func()->imageControl->setParameter(QCameraImageProcessingControl::ContrastAdjustment, + QVariant(value)); } /*! Returns the saturation adjustment value. */ -int QCameraImageProcessing::saturation() const +qreal QCameraImageProcessing::saturation() const { - QVariant value; - - if (d_func()->imageControl) - value = d_func()->imageControl->processingParameter(QCameraImageProcessingControl::Saturation); - - return value.toInt(); + return d_func()->imageControl->parameter(QCameraImageProcessingControl::SaturationAdjustment).toReal(); } /*! Sets the saturation adjustment value to \a value. - Valid saturation values range between -100 and 100, with a default of 0. + Valid saturation values range between -1.0 and 1.0, with a default of 0. */ -void QCameraImageProcessing::setSaturation(int value) -{ - if (d_func()->imageControl) - d_func()->imageControl->setProcessingParameter(QCameraImageProcessingControl::Saturation, - QVariant(value)); -} - -/*! - Identifies if sharpening is supported. - - Returns true if sharpening is supported; and false if it is not. -*/ -bool QCameraImageProcessing::isSharpeningSupported() const +void QCameraImageProcessing::setSaturation(qreal value) { - if (d_func()->imageControl) - return d_func()->imageControl->isProcessingParameterSupported(QCameraImageProcessingControl::Sharpening); - else - return false; + d_func()->imageControl->setParameter(QCameraImageProcessingControl::SaturationAdjustment, + QVariant(value)); } /*! - Returns the sharpening level. - - This may be \c DefaultSharpening if no particular sharpening level has been applied. - + Returns the sharpening adjustment level. */ -int QCameraImageProcessing::sharpeningLevel() const +qreal QCameraImageProcessing::sharpeningLevel() const { - QVariant value; - - if (d_func()->imageControl) - value = d_func()->imageControl->processingParameter(QCameraImageProcessingControl::Sharpening); - - if (value.isNull()) - return DefaultSharpening; - else - return value.toInt(); + return d_func()->imageControl->parameter(QCameraImageProcessingControl::SharpeningAdjustment).toReal(); } /*! - Sets the sharpening \a level. - - If \c DefaultSharpening is supplied, the camera will decide what sharpening - to perform. Otherwise a level of 0 will disable sharpening, and a level of 100 - corresponds to maximum sharpening applied. + Sets the sharpening adjustment \a level. + Valid sharpening values range between -1.0 and 1.0, with a default of 0. */ -void QCameraImageProcessing::setSharpeningLevel(int level) +void QCameraImageProcessing::setSharpeningLevel(qreal level) { - Q_D(QCameraImageProcessing); - if (d->imageControl) - d->imageControl->setProcessingParameter(QCameraImageProcessingControl::Sharpening, - level == DefaultSharpening ? QVariant() : QVariant(level)); + d_func()->imageControl->setParameter(QCameraImageProcessingControl::SharpeningAdjustment, + QVariant(level)); } /*! - Returns true if denoising is supported. + Returns the denoising adjustment level. */ -bool QCameraImageProcessing::isDenoisingSupported() const +qreal QCameraImageProcessing::denoisingLevel() const { - if (d_func()->imageControl) - return d_func()->imageControl->isProcessingParameterSupported(QCameraImageProcessingControl::Denoising); - else - return false; + return d_func()->imageControl->parameter(QCameraImageProcessingControl::DenoisingAdjustment).toReal(); } /*! - Returns the denoising level. This may be \c DefaultDenoising if no - particular value has been set. + Sets the denoising adjustment \a level. -*/ -int QCameraImageProcessing::denoisingLevel() const -{ - QVariant value; - - if (d_func()->imageControl) - value = d_func()->imageControl->processingParameter(QCameraImageProcessingControl::Denoising); - - if (value.isNull()) - return DefaultDenoising; - else - return value.toInt(); -} - -/*! - Sets the denoising \a level. - - If \c DefaultDenoising is supplied, the camera will decide what denoising - to perform. Otherwise a level of 0 will disable denoising, and a level of 100 - corresponds to maximum denoising applied. + Valid sharpening values range between -1.0 and 1.0, with a default of 0. + If the parameter value is set to 0, the amount of denoising applied + is selected by camera and depends on camera capabilities and settings. + Changing value in -1.0..1.0 range adjusts the amount of denoising applied + within the supported range. */ -void QCameraImageProcessing::setDenoisingLevel(int level) +void QCameraImageProcessing::setDenoisingLevel(qreal level) { - Q_D(QCameraImageProcessing); - if (d->imageControl) - d->imageControl->setProcessingParameter(QCameraImageProcessingControl::Denoising, - level == DefaultDenoising ? QVariant() : QVariant(level)); + d_func()->imageControl->setParameter(QCameraImageProcessingControl::DenoisingAdjustment, + QVariant(level)); } - /*! \enum QCameraImageProcessing::WhiteBalanceMode @@ -373,7 +326,7 @@ void QCameraImageProcessing::setDenoisingLevel(int level) \value WhiteBalanceFluorescent Fluorescent white balance mode. \value WhiteBalanceFlash Flash white balance mode. \value WhiteBalanceSunset Sunset white balance mode. - \value WhiteBalanceVendor Vendor defined white balance mode. + \value WhiteBalanceVendor Base value for vendor defined white balance modes. */ #include "moc_qcameraimageprocessing.cpp" diff --git a/src/multimedia/camera/qcameraimageprocessing.h b/src/multimedia/camera/qcameraimageprocessing.h index 5f118d9d1..ea1e76c01 100644 --- a/src/multimedia/camera/qcameraimageprocessing.h +++ b/src/multimedia/camera/qcameraimageprocessing.h @@ -86,24 +86,21 @@ public: WhiteBalanceMode whiteBalanceMode() const; void setWhiteBalanceMode(WhiteBalanceMode mode); bool isWhiteBalanceModeSupported(WhiteBalanceMode mode) const; - int manualWhiteBalance() const; - void setManualWhiteBalance(int colorTemperature); - int contrast() const; - void setContrast(int value); + qreal manualWhiteBalance() const; + void setManualWhiteBalance(qreal colorTemperature); - int saturation() const; - void setSaturation(int value); + qreal contrast() const; + void setContrast(qreal value); - static const int DefaultSharpening = -1; - bool isSharpeningSupported() const; - int sharpeningLevel() const; - void setSharpeningLevel(int value); + qreal saturation() const; + void setSaturation(qreal value); - static const int DefaultDenoising = -1; - bool isDenoisingSupported() const; - int denoisingLevel() const; - void setDenoisingLevel(int value); + qreal sharpeningLevel() const; + void setSharpeningLevel(qreal value); + + qreal denoisingLevel() const; + void setDenoisingLevel(qreal value); private: friend class QCamera; |