summaryrefslogtreecommitdiffstats
path: root/src/multimedia/camera
diff options
context:
space:
mode:
authorDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2012-01-25 16:24:55 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-02 02:37:33 +0100
commit6a88794db4b35128eeef1f3514203d375dbba280 (patch)
treede6c3e4cfa072216a02bff9be1f84239652399d4 /src/multimedia/camera
parent80eaaa21524d2f8ff8f3eb7b657936a27388d69f (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.cpp181
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.h25
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;