summaryrefslogtreecommitdiffstats
path: root/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp')
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp
index 4b8a94976..b6145330e 100644
--- a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp
@@ -42,6 +42,9 @@
#include "qandroidcamerasession.h"
#include "androidcamera.h"
+#include "qandroidmultimediautils.h"
+#include <qmath.h>
+
QT_BEGIN_NAMESPACE
static QRect adjustedArea(const QRectF &area)
@@ -225,6 +228,22 @@ void QAndroidCameraFocusControl::onCameraOpened()
setFocusMode(m_focusMode);
setCustomFocusPoint(m_customFocusPoint);
setFocusPointMode(m_focusPointMode);
+
+ if (m_session->camera()->isZoomSupported()) {
+ m_zoomRatios = m_session->camera()->getZoomRatios();
+ qreal maxZoom = m_zoomRatios.last() / qreal(100);
+ if (m_maximumZoom != maxZoom) {
+ m_maximumZoom = maxZoom;
+ emit maximumDigitalZoomChanged(m_maximumZoom);
+ }
+ zoomTo(1, m_requestedZoom);
+ } else {
+ m_zoomRatios.clear();
+ if (!qFuzzyCompare(m_maximumZoom, qreal(1))) {
+ m_maximumZoom = 1.0;
+ emit maximumDigitalZoomChanged(m_maximumZoom);
+ }
+ }
}
void QAndroidCameraFocusControl::updateFocusZones(QCameraFocusZone::FocusZoneStatus status)
@@ -306,4 +325,59 @@ void QAndroidCameraFocusControl::onAutoFocusComplete(bool success)
updateFocusZones(QCameraFocusZone::Focused);
}
+
+qreal QAndroidCameraFocusControl::maximumOpticalZoom() const
+{
+ // Optical zoom not supported
+ return 1.0;
+}
+
+qreal QAndroidCameraFocusControl::maximumDigitalZoom() const
+{
+ return m_maximumZoom;
+}
+
+qreal QAndroidCameraFocusControl::requestedOpticalZoom() const
+{
+ // Optical zoom not supported
+ return 1.0;
+}
+
+qreal QAndroidCameraFocusControl::requestedDigitalZoom() const
+{
+ return m_requestedZoom;
+}
+
+qreal QAndroidCameraFocusControl::currentOpticalZoom() const
+{
+ // Optical zoom not supported
+ return 1.0;
+}
+
+qreal QAndroidCameraFocusControl::currentDigitalZoom() const
+{
+ return m_currentZoom;
+}
+
+void QAndroidCameraFocusControl::zoomTo(qreal optical, qreal digital)
+{
+ Q_UNUSED(optical);
+
+ if (!qFuzzyCompare(m_requestedZoom, digital)) {
+ m_requestedZoom = digital;
+ emit requestedDigitalZoomChanged(m_requestedZoom);
+ }
+
+ if (m_session->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_session->camera()->setZoom(validZoomIndex);
+ m_currentZoom = newZoom;
+ emit currentDigitalZoomChanged(m_currentZoom);
+ }
+ }
+}
+
QT_END_NAMESPACE