summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.cpp88
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.cpp14
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp118
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h16
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.cpp45
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h6
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcameralockscontrol.cpp6
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp32
8 files changed, 189 insertions, 136 deletions
diff --git a/src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.cpp
index 57057ebd7..351e6ba40 100644
--- a/src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcameraexposurecontrol.cpp
@@ -63,6 +63,9 @@ QAndroidCameraExposureControl::QAndroidCameraExposureControl(QAndroidCameraSessi
bool QAndroidCameraExposureControl::isParameterSupported(ExposureParameter parameter) const
{
+ if (!m_session->camera())
+ return false;
+
switch (parameter) {
case QCameraExposureControl::ISO:
return false;
@@ -71,7 +74,7 @@ bool QAndroidCameraExposureControl::isParameterSupported(ExposureParameter param
case QCameraExposureControl::ShutterSpeed:
return false;
case QCameraExposureControl::ExposureCompensation:
- return true;
+ return !m_supportedExposureCompensations.isEmpty();
case QCameraExposureControl::FlashPower:
return false;
case QCameraExposureControl::FlashCompensation:
@@ -81,7 +84,7 @@ bool QAndroidCameraExposureControl::isParameterSupported(ExposureParameter param
case QCameraExposureControl::SpotMeteringPoint:
return false;
case QCameraExposureControl::ExposureMode:
- return true;
+ return !m_supportedExposureModes.isEmpty();
case QCameraExposureControl::MeteringMode:
return false;
default:
@@ -127,27 +130,41 @@ QVariant QAndroidCameraExposureControl::actualValue(ExposureParameter parameter)
bool QAndroidCameraExposureControl::setValue(ExposureParameter parameter, const QVariant& value)
{
- if (!m_session->camera() || !value.isValid())
+ if (!value.isValid())
return false;
if (parameter == QCameraExposureControl::ExposureCompensation) {
- m_requestedExposureCompensation = value.toReal();
- emit requestedValueChanged(QCameraExposureControl::ExposureCompensation);
+ qreal expComp = value.toReal();
+ if (!qFuzzyCompare(m_requestedExposureCompensation, expComp)) {
+ m_requestedExposureCompensation = expComp;
+ emit requestedValueChanged(QCameraExposureControl::ExposureCompensation);
+ }
+
+ if (!m_session->camera())
+ return true;
int expCompIndex = qRound(m_requestedExposureCompensation / m_exposureCompensationStep);
if (expCompIndex >= m_minExposureCompensationIndex
&& expCompIndex <= m_maxExposureCompensationIndex) {
+ qreal comp = expCompIndex * m_exposureCompensationStep;
m_session->camera()->setExposureCompensation(expCompIndex);
-
- m_actualExposureCompensation = expCompIndex * m_exposureCompensationStep;
- emit actualValueChanged(QCameraExposureControl::ExposureCompensation);
+ if (!qFuzzyCompare(m_actualExposureCompensation, comp)) {
+ m_actualExposureCompensation = expCompIndex * m_exposureCompensationStep;
+ emit actualValueChanged(QCameraExposureControl::ExposureCompensation);
+ }
return true;
}
} else if (parameter == QCameraExposureControl::ExposureMode) {
- m_requestedExposureMode = value.value<QCameraExposure::ExposureMode>();
- emit requestedValueChanged(QCameraExposureControl::ExposureMode);
+ QCameraExposure::ExposureMode expMode = value.value<QCameraExposure::ExposureMode>();
+ if (m_requestedExposureMode != expMode) {
+ m_requestedExposureMode = expMode;
+ emit requestedValueChanged(QCameraExposureControl::ExposureMode);
+ }
+
+ if (!m_session->camera())
+ return true;
if (!m_supportedExposureModes.isEmpty()) {
m_actualExposureMode = m_requestedExposureMode;
@@ -190,38 +207,39 @@ bool QAndroidCameraExposureControl::setValue(ExposureParameter parameter, const
void QAndroidCameraExposureControl::onCameraOpened()
{
- m_requestedExposureCompensation = m_actualExposureCompensation = 0.0;
- m_requestedExposureMode = m_actualExposureMode = QCameraExposure::ExposureAuto;
- emit requestedValueChanged(QCameraExposureControl::ExposureCompensation);
- emit actualValueChanged(QCameraExposureControl::ExposureCompensation);
- emit requestedValueChanged(QCameraExposureControl::ExposureMode);
- emit actualValueChanged(QCameraExposureControl::ExposureMode);
-
+ m_supportedExposureCompensations.clear();
m_minExposureCompensationIndex = m_session->camera()->getMinExposureCompensation();
m_maxExposureCompensationIndex = m_session->camera()->getMaxExposureCompensation();
m_exposureCompensationStep = m_session->camera()->getExposureCompensationStep();
- for (int i = m_minExposureCompensationIndex; i <= m_maxExposureCompensationIndex; ++i)
- m_supportedExposureCompensations.append(i * m_exposureCompensationStep);
- emit parameterRangeChanged(QCameraExposureControl::ExposureCompensation);
+ if (m_minExposureCompensationIndex != 0 || m_maxExposureCompensationIndex != 0) {
+ for (int i = m_minExposureCompensationIndex; i <= m_maxExposureCompensationIndex; ++i)
+ m_supportedExposureCompensations.append(i * m_exposureCompensationStep);
+ emit parameterRangeChanged(QCameraExposureControl::ExposureCompensation);
+ }
m_supportedExposureModes.clear();
QStringList sceneModes = m_session->camera()->getSupportedSceneModes();
- for (int i = 0; i < sceneModes.size(); ++i) {
- const QString &sceneMode = sceneModes.at(i);
- if (sceneMode == QLatin1String("auto"))
- m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureAuto);
- else if (sceneMode == QLatin1String("beach"))
- m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureBeach);
- else if (sceneMode == QLatin1String("night"))
- m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureNight);
- else if (sceneMode == QLatin1String("portrait"))
- m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposurePortrait);
- else if (sceneMode == QLatin1String("snow"))
- m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureSnow);
- else if (sceneMode == QLatin1String("sports"))
- m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureSports);
+ if (!sceneModes.isEmpty()) {
+ for (int i = 0; i < sceneModes.size(); ++i) {
+ const QString &sceneMode = sceneModes.at(i);
+ if (sceneMode == QLatin1String("auto"))
+ m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureAuto);
+ else if (sceneMode == QLatin1String("beach"))
+ m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureBeach);
+ else if (sceneMode == QLatin1String("night"))
+ m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureNight);
+ else if (sceneMode == QLatin1String("portrait"))
+ m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposurePortrait);
+ else if (sceneMode == QLatin1String("snow"))
+ m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureSnow);
+ else if (sceneMode == QLatin1String("sports"))
+ m_supportedExposureModes << QVariant::fromValue(QCameraExposure::ExposureSports);
+ }
+ emit parameterRangeChanged(QCameraExposureControl::ExposureMode);
}
- emit parameterRangeChanged(QCameraExposureControl::ExposureMode);
+
+ setValue(QCameraExposureControl::ExposureCompensation, QVariant::fromValue(m_requestedExposureCompensation));
+ setValue(QCameraExposureControl::ExposureMode, QVariant::fromValue(m_requestedExposureMode));
}
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.cpp
index de8e521ee..20aece378 100644
--- a/src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcameraflashcontrol.cpp
@@ -62,7 +62,12 @@ QCameraExposure::FlashModes QAndroidCameraFlashControl::flashMode() const
void QAndroidCameraFlashControl::setFlashMode(QCameraExposure::FlashModes mode)
{
- if (m_flashMode == mode || !m_session->camera() || !isFlashModeSupported(mode))
+ if (!m_session->camera()) {
+ m_flashMode = mode;
+ return;
+ }
+
+ if (!isFlashModeSupported(mode))
return;
// if torch was enabled, it first needs to be turned off before setting another mode
@@ -88,7 +93,7 @@ void QAndroidCameraFlashControl::setFlashMode(QCameraExposure::FlashModes mode)
bool QAndroidCameraFlashControl::isFlashModeSupported(QCameraExposure::FlashModes mode) const
{
- return m_supportedFlashModes.contains(mode);
+ return m_session->camera() ? m_supportedFlashModes.contains(mode) : false;
}
bool QAndroidCameraFlashControl::isFlashReady() const
@@ -115,6 +120,11 @@ void QAndroidCameraFlashControl::onCameraOpened()
else if (flashMode == QLatin1String("torch"))
m_supportedFlashModes << QCameraExposure::FlashVideoLight;
}
+
+ if (!m_supportedFlashModes.contains(m_flashMode))
+ m_flashMode = QCameraExposure::FlashOff;
+
+ setFlashMode(m_flashMode);
}
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp
index c4e0ea1a8..dc636ccaf 100644
--- a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp
@@ -80,42 +80,45 @@ QCameraFocus::FocusModes QAndroidCameraFocusControl::focusMode() const
void QAndroidCameraFocusControl::setFocusMode(QCameraFocus::FocusModes mode)
{
- if (m_focusMode == mode || !m_session->camera() || !isFocusModeSupported(mode))
+ if (!m_session->camera()) {
+ setFocusModeHelper(mode);
return;
+ }
- QString focusMode = QLatin1String("fixed");
-
- if (mode.testFlag(QCameraFocus::HyperfocalFocus)) {
- focusMode = QLatin1String("edof");
- } else if (mode.testFlag(QCameraFocus::ManualFocus)) {
- focusMode = QLatin1String("fixed");
- } else if (mode.testFlag(QCameraFocus::AutoFocus)) {
- focusMode = QLatin1String("auto");
- } else if (mode.testFlag(QCameraFocus::MacroFocus)) {
- focusMode = QLatin1String("macro");
- } else if (mode.testFlag(QCameraFocus::ContinuousFocus)) {
- if ((m_session->captureMode().testFlag(QCamera::CaptureVideo) && m_continuousVideoFocusSupported)
- || !m_continuousPictureFocusSupported) {
- focusMode = QLatin1String("continuous-video");
- } else {
- focusMode = QLatin1String("continuous-picture");
+ if (isFocusModeSupported(mode)) {
+ QString focusMode = QLatin1String("fixed");
+
+ if (mode.testFlag(QCameraFocus::HyperfocalFocus)) {
+ focusMode = QLatin1String("edof");
+ } else if (mode.testFlag(QCameraFocus::ManualFocus)) {
+ focusMode = QLatin1String("fixed");
+ } else if (mode.testFlag(QCameraFocus::AutoFocus)) {
+ focusMode = QLatin1String("auto");
+ } else if (mode.testFlag(QCameraFocus::MacroFocus)) {
+ focusMode = QLatin1String("macro");
+ } else if (mode.testFlag(QCameraFocus::ContinuousFocus)) {
+ if ((m_session->captureMode().testFlag(QCamera::CaptureVideo) && m_continuousVideoFocusSupported)
+ || !m_continuousPictureFocusSupported) {
+ focusMode = QLatin1String("continuous-video");
+ } else {
+ focusMode = QLatin1String("continuous-picture");
+ }
+ } else if (mode.testFlag(QCameraFocus::InfinityFocus)) {
+ focusMode = QLatin1String("infinity");
}
- } else if (mode.testFlag(QCameraFocus::InfinityFocus)) {
- focusMode = QLatin1String("infinity");
- }
- m_session->camera()->setFocusMode(focusMode);
+ m_session->camera()->setFocusMode(focusMode);
- // reset focus position
- m_session->camera()->cancelAutoFocus();
+ // reset focus position
+ m_session->camera()->cancelAutoFocus();
- m_focusMode = mode;
- emit focusModeChanged(m_focusMode);
+ setFocusModeHelper(mode);
+ }
}
bool QAndroidCameraFocusControl::isFocusModeSupported(QCameraFocus::FocusModes mode) const
{
- return m_supportedFocusModes.contains(mode);
+ return m_session->camera() ? m_supportedFocusModes.contains(mode) : false;
}
QCameraFocus::FocusPointMode QAndroidCameraFocusControl::focusPointMode() const
@@ -125,29 +128,31 @@ QCameraFocus::FocusPointMode QAndroidCameraFocusControl::focusPointMode() const
void QAndroidCameraFocusControl::setFocusPointMode(QCameraFocus::FocusPointMode mode)
{
- if (!m_session->camera() || m_focusPointMode == mode || !isFocusPointModeSupported(mode))
+ if (!m_session->camera()) {
+ setFocusPointModeHelper(mode);
return;
-
- m_focusPointMode = mode;
-
- if (mode == QCameraFocus::FocusPointCustom) {
- m_actualFocusPoint = m_customFocusPoint;
- } else {
- // FocusPointAuto | FocusPointCenter
- // note: there is no way to know the actual focus point in FocusPointAuto mode,
- // so just report the focus point to be at the center of the frame
- m_actualFocusPoint = QPointF(0.5, 0.5);
}
- updateFocusZones();
- setCameraFocusArea();
+ if (isFocusPointModeSupported(mode)) {
+ if (mode == QCameraFocus::FocusPointCustom) {
+ m_actualFocusPoint = m_customFocusPoint;
+ } else {
+ // FocusPointAuto | FocusPointCenter
+ // note: there is no way to know the actual focus point in FocusPointAuto mode,
+ // so just report the focus point to be at the center of the frame
+ m_actualFocusPoint = QPointF(0.5, 0.5);
+ }
- emit focusPointModeChanged(mode);
+ setFocusPointModeHelper(mode);
+
+ updateFocusZones();
+ setCameraFocusArea();
+ }
}
bool QAndroidCameraFocusControl::isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const
{
- return m_supportedFocusPointModes.contains(mode);
+ return m_session->camera() ? m_supportedFocusPointModes.contains(mode) : false;
}
QPointF QAndroidCameraFocusControl::customFocusPoint() const
@@ -157,13 +162,12 @@ QPointF QAndroidCameraFocusControl::customFocusPoint() const
void QAndroidCameraFocusControl::setCustomFocusPoint(const QPointF &point)
{
- if (m_customFocusPoint == point)
- return;
-
- m_customFocusPoint = point;
- emit customFocusPointChanged(m_customFocusPoint);
+ if (m_customFocusPoint != point) {
+ m_customFocusPoint = point;
+ emit customFocusPointChanged(m_customFocusPoint);
+ }
- if (m_focusPointMode == QCameraFocus::FocusPointCustom) {
+ if (m_session->camera() && m_focusPointMode == QCameraFocus::FocusPointCustom) {
m_actualFocusPoint = m_customFocusPoint;
updateFocusZones();
setCameraFocusArea();
@@ -187,12 +191,7 @@ void QAndroidCameraFocusControl::onCameraOpened()
m_supportedFocusModes.clear();
m_continuousPictureFocusSupported = false;
m_continuousVideoFocusSupported = false;
-
- m_focusPointMode = QCameraFocus::FocusPointAuto;
- m_actualFocusPoint = QPointF(0.5, 0.5);
- m_customFocusPoint = QPointF();
m_supportedFocusPointModes.clear();
- m_focusZones.clear();
QStringList focusModes = m_session->camera()->getSupportedFocusModes();
for (int i = 0; i < focusModes.size(); ++i) {
@@ -220,10 +219,14 @@ void QAndroidCameraFocusControl::onCameraOpened()
if (m_session->camera()->getMaxNumFocusAreas() > 0)
m_supportedFocusPointModes << QCameraFocus::FocusPointCenter << QCameraFocus::FocusPointCustom;
- emit focusModeChanged(focusMode());
- emit focusPointModeChanged(m_focusPointMode);
- emit customFocusPointChanged(m_customFocusPoint);
- emit focusZonesChanged();
+ if (!m_supportedFocusModes.contains(m_focusMode))
+ setFocusModeHelper(QCameraFocus::AutoFocus);
+ if (!m_supportedFocusPointModes.contains(m_focusPointMode))
+ setFocusPointModeHelper(QCameraFocus::FocusPointAuto);
+
+ setFocusMode(m_focusMode);
+ setCustomFocusPoint(m_customFocusPoint);
+ setFocusPointMode(m_focusPointMode);
}
void QAndroidCameraFocusControl::updateFocusZones(QCameraFocusZone::FocusZoneStatus status)
@@ -276,11 +279,12 @@ void QAndroidCameraFocusControl::onViewportSizeChanged()
if (!m_focusZones.isEmpty())
status = m_focusZones.at(0).status();
updateFocusZones(status);
+ setCameraFocusArea();
}
void QAndroidCameraFocusControl::onCameraCaptureModeChanged()
{
- if (m_focusMode == QCameraFocus::ContinuousFocus) {
+ if (m_session->camera() && m_focusMode == QCameraFocus::ContinuousFocus) {
QString focusMode;
if ((m_session->captureMode().testFlag(QCamera::CaptureVideo) && m_continuousVideoFocusSupported)
|| !m_continuousPictureFocusSupported) {
diff --git a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h
index 4311e78ba..997a313af 100644
--- a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h
+++ b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h
@@ -72,6 +72,22 @@ private Q_SLOTS:
void onAutoFocusComplete(bool success);
private:
+ inline void setFocusModeHelper(QCameraFocus::FocusModes mode)
+ {
+ if (m_focusMode != mode) {
+ m_focusMode = mode;
+ emit focusModeChanged(mode);
+ }
+ }
+
+ inline void setFocusPointModeHelper(QCameraFocus::FocusPointMode mode)
+ {
+ if (m_focusPointMode != mode) {
+ m_focusPointMode = mode;
+ emit focusPointModeChanged(mode);
+ }
+ }
+
void updateFocusZones(QCameraFocusZone::FocusZoneStatus status = QCameraFocusZone::Selected);
void setCameraFocusArea();
diff --git a/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.cpp
index 4e4a416dd..7d0650420 100644
--- a/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.cpp
@@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE
QAndroidCameraImageProcessingControl::QAndroidCameraImageProcessingControl(QAndroidCameraSession *session)
: QCameraImageProcessingControl()
, m_session(session)
+ , m_whiteBalanceMode(QCameraImageProcessing::WhiteBalanceAuto)
{
connect(m_session, SIGNAL(opened()),
this, SLOT(onCameraOpened()));
@@ -56,19 +57,17 @@ QAndroidCameraImageProcessingControl::QAndroidCameraImageProcessingControl(QAndr
bool QAndroidCameraImageProcessingControl::isParameterSupported(ProcessingParameter parameter) const
{
- return (parameter == QCameraImageProcessingControl::WhiteBalancePreset);
+ return parameter == QCameraImageProcessingControl::WhiteBalancePreset
+ && m_session->camera()
+ && !m_supportedWhiteBalanceModes.isEmpty();
}
bool QAndroidCameraImageProcessingControl::isParameterValueSupported(ProcessingParameter parameter,
const QVariant &value) const
{
- if (parameter != QCameraImageProcessingControl::WhiteBalancePreset)
- return false;
-
- if (!m_session->camera())
- return false;
-
- return m_supportedWhiteBalanceModes.contains(value.value<QCameraImageProcessing::WhiteBalanceMode>());
+ return parameter == QCameraImageProcessingControl::WhiteBalancePreset
+ && m_session->camera()
+ && m_supportedWhiteBalanceModes.contains(value.value<QCameraImageProcessing::WhiteBalanceMode>());
}
QVariant QAndroidCameraImageProcessingControl::parameter(ProcessingParameter parameter) const
@@ -76,13 +75,7 @@ QVariant QAndroidCameraImageProcessingControl::parameter(ProcessingParameter par
if (parameter != QCameraImageProcessingControl::WhiteBalancePreset)
return QVariant();
- if (!m_session->camera())
- return QVariant();
-
- QString wb = m_session->camera()->getWhiteBalance();
- QCameraImageProcessing::WhiteBalanceMode mode = m_supportedWhiteBalanceModes.key(wb, QCameraImageProcessing::WhiteBalanceAuto);
-
- return QVariant::fromValue(mode);
+ return QVariant::fromValue(m_whiteBalanceMode);
}
void QAndroidCameraImageProcessingControl::setParameter(ProcessingParameter parameter, const QVariant &value)
@@ -90,12 +83,21 @@ void QAndroidCameraImageProcessingControl::setParameter(ProcessingParameter para
if (parameter != QCameraImageProcessingControl::WhiteBalancePreset)
return;
- if (!m_session->camera())
- return;
+ QCameraImageProcessing::WhiteBalanceMode mode = value.value<QCameraImageProcessing::WhiteBalanceMode>();
- QString wb = m_supportedWhiteBalanceModes.value(value.value<QCameraImageProcessing::WhiteBalanceMode>(), QString());
- if (!wb.isEmpty())
+ if (m_session->camera())
+ setWhiteBalanceModeHelper(mode);
+ else
+ m_whiteBalanceMode = mode;
+}
+
+void QAndroidCameraImageProcessingControl::setWhiteBalanceModeHelper(QCameraImageProcessing::WhiteBalanceMode mode)
+{
+ QString wb = m_supportedWhiteBalanceModes.value(mode, QString());
+ if (!wb.isEmpty()) {
m_session->camera()->setWhiteBalance(wb);
+ m_whiteBalanceMode = mode;
+ }
}
void QAndroidCameraImageProcessingControl::onCameraOpened()
@@ -130,6 +132,11 @@ void QAndroidCameraImageProcessingControl::onCameraOpened()
QStringLiteral("warm-fluorescent"));
}
}
+
+ if (!m_supportedWhiteBalanceModes.contains(m_whiteBalanceMode))
+ m_whiteBalanceMode = QCameraImageProcessing::WhiteBalanceAuto;
+
+ setWhiteBalanceModeHelper(m_whiteBalanceMode);
}
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h b/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h
index 3ef3c3144..0554dbf46 100644
--- a/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h
+++ b/src/plugins/android/src/mediacapture/qandroidcameraimageprocessingcontrol.h
@@ -63,9 +63,13 @@ private Q_SLOTS:
void onCameraOpened();
private:
+ void setWhiteBalanceModeHelper(QCameraImageProcessing::WhiteBalanceMode mode);
+
QAndroidCameraSession *m_session;
- QHash<QCameraImageProcessing::WhiteBalanceMode, QString> m_supportedWhiteBalanceModes;
+ QCameraImageProcessing::WhiteBalanceMode m_whiteBalanceMode;
+
+ QMap<QCameraImageProcessing::WhiteBalanceMode, QString> m_supportedWhiteBalanceModes;
};
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.cpp
index bfb48d06e..3cf4209eb 100644
--- a/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.cpp
@@ -66,13 +66,13 @@ QAndroidCameraLocksControl::QAndroidCameraLocksControl(QAndroidCameraSession *se
QCamera::LockTypes QAndroidCameraLocksControl::supportedLocks() const
{
- return (QCamera::LockExposure | QCamera::LockWhiteBalance | QCamera::LockFocus);
+ return m_supportedLocks;
}
QCamera::LockStatus QAndroidCameraLocksControl::lockStatus(QCamera::LockType lock) const
{
if (!m_supportedLocks.testFlag(lock) || !m_session->camera())
- return QCamera::Locked;
+ return QCamera::Unlocked;
if (lock == QCamera::LockFocus)
return m_focusLockStatus;
@@ -83,7 +83,7 @@ QCamera::LockStatus QAndroidCameraLocksControl::lockStatus(QCamera::LockType loc
if (lock == QCamera::LockWhiteBalance)
return m_whiteBalanceLockStatus;
- return QCamera::Locked;
+ return QCamera::Unlocked;
}
void QAndroidCameraLocksControl::searchAndLock(QCamera::LockTypes locks)
diff --git a/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp
index 385cd942a..3b6645fa8 100644
--- a/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp
@@ -96,32 +96,25 @@ void QAndroidCameraZoomControl::zoomTo(qreal optical, qreal digital)
{
Q_UNUSED(optical);
- if (!m_cameraSession->camera() ||
- qFuzzyCompare(m_requestedZoom, digital) ||
- qFuzzyCompare(m_maximumZoom, qreal(1))) {
- return;
+ if (!qFuzzyCompare(m_requestedZoom, digital)) {
+ m_requestedZoom = digital;
+ emit requestedDigitalZoomChanged(m_requestedZoom);
}
- m_requestedZoom = digital;
- emit requestedDigitalZoomChanged(m_requestedZoom);
-
- digital = qBound(qreal(1), digital, m_maximumZoom);
- int validZoomIndex = qt_findClosestValue(m_zoomRatios, qRound(digital * 100));
- qreal newZoom = m_zoomRatios.at(validZoomIndex) / qreal(100);
- if (!qFuzzyCompare(m_currentZoom, newZoom)) {
- m_cameraSession->camera()->setZoom(validZoomIndex);
- m_currentZoom = newZoom;
- emit currentDigitalZoomChanged(m_currentZoom);
+ if (m_cameraSession->camera()) {
+ digital = qBound(qreal(1), digital, m_maximumZoom);
+ int validZoomIndex = qt_findClosestValue(m_zoomRatios, qRound(digital * 100));
+ qreal newZoom = m_zoomRatios.at(validZoomIndex) / qreal(100);
+ if (!qFuzzyCompare(m_currentZoom, newZoom)) {
+ m_cameraSession->camera()->setZoom(validZoomIndex);
+ m_currentZoom = newZoom;
+ emit currentDigitalZoomChanged(m_currentZoom);
+ }
}
}
void QAndroidCameraZoomControl::onCameraOpened()
{
- m_requestedZoom = 1.0;
- m_currentZoom = 1.0;
- emit requestedDigitalZoomChanged(m_requestedZoom);
- emit currentDigitalZoomChanged(m_currentZoom);
-
if (m_cameraSession->camera()->isZoomSupported()) {
m_zoomRatios = m_cameraSession->camera()->getZoomRatios();
qreal maxZoom = m_zoomRatios.last() / qreal(100);
@@ -129,6 +122,7 @@ void QAndroidCameraZoomControl::onCameraOpened()
m_maximumZoom = maxZoom;
emit maximumDigitalZoomChanged(m_maximumZoom);
}
+ zoomTo(1, m_requestedZoom);
} else {
m_zoomRatios.clear();
if (!qFuzzyCompare(m_maximumZoom, qreal(1))) {