summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoris Verria <doris.verria@qt.io>2021-05-25 19:38:57 +0200
committerLars Knoll <lars.knoll@qt.io>2021-05-26 05:59:30 +0000
commitd8d5fe313dcb1c72007295108db821c2c1771537 (patch)
tree475a856c9531b1d63bce28a1b536f6761a841313
parent80692b9476be22b7e1a82e4d90b54c939d81a24b (diff)
Implement support for QCamera::Features on darwin
Add FocusDistance and CustomFocusPoint to QCamera::Features. Set supported featurues upon camera change for AVFCamera. Change-Id: Ia2b89dce2770b3c0f0909fbe3df2fb10e05ee507 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--src/multimedia/camera/qcamera.cpp6
-rw-r--r--src/multimedia/camera/qcamera.h5
-rw-r--r--src/multimedia/platform/darwin/camera/avfcamera.mm24
-rw-r--r--src/multimedia/platform/darwin/camera/avfcamera_p.h2
-rw-r--r--src/multimedia/platform/qplatformcamera_p.h1
-rw-r--r--tests/auto/unit/mockbackend/qmockcamera.h1
6 files changed, 23 insertions, 16 deletions
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index 835f84f19..5c76a66c0 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -518,12 +518,6 @@ void QCamera::setCustomFocusPoint(const QPointF &point)
d->control->setCustomFocusPoint(point);
}
-bool QCamera::isCustomFocusPointSupported() const
-{
- Q_D(const QCamera);
- return d->control ? d->control->isCustomFocusPointSupported() : false;
-}
-
/*!
\property QCamera::focusDistance
diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h
index 1b4636307..90ddc539e 100644
--- a/src/multimedia/camera/qcamera.h
+++ b/src/multimedia/camera/qcamera.h
@@ -171,7 +171,9 @@ public:
ColorTemperature = 0x1,
ExposureCompensation = 0x2,
IsoSensitivity = 0x4,
- ManualExposureTime = 0x8
+ ManualExposureTime = 0x8,
+ CustomFocusPoint = 0x10,
+ FocusDistance = 0x20
};
Q_DECLARE_FLAGS(Features, Feature);
@@ -206,7 +208,6 @@ public:
QPointF customFocusPoint() const;
void setCustomFocusPoint(const QPointF &point);
- bool isCustomFocusPointSupported() const;
void setFocusDistance(float d);
float focusDistance() const;
diff --git a/src/multimedia/platform/darwin/camera/avfcamera.mm b/src/multimedia/platform/darwin/camera/avfcamera.mm
index bd4fb18eb..4d7cc5d45 100644
--- a/src/multimedia/platform/darwin/camera/avfcamera.mm
+++ b/src/multimedia/platform/darwin/camera/avfcamera.mm
@@ -384,11 +384,6 @@ void AVFCamera::setCustomFocusPoint(const QPointF &point)
}
}
-bool AVFCamera::isCustomFocusPointSupported() const
-{
- return true;
-}
-
void AVFCamera::setFocusDistance(float d)
{
#ifdef Q_OS_IOS
@@ -535,6 +530,25 @@ void AVFCamera::updateCameraConfiguration()
flashReadyChanged(isFlashSupported);
}
+void AVFCamera::updateCameraProperties()
+{
+ QCamera::Features features;
+ AVCaptureDevice *captureDevice = device();
+
+#ifdef Q_OS_IOS
+ features = QCamera::Feature::ColorTemperature | QCamera::Feature::ExposureCompensation |
+ QCamera::Feature::IsoSensitivity | QCamera::Feature::ManualExposureTime;
+
+ if (captureDevice && [captureDevice isLockingFocusWithCustomLensPositionSupported])
+ features |= QCamera::Feature::FocusDistance;
+#endif
+
+ if (captureDevice && [captureDevice isFocusPointOfInterestSupported])
+ features |= QCamera::Feature::CustomFocusPoint;
+
+ supportedFeaturesChanged(features);
+}
+
void AVFCamera::zoomTo(float factor, float rate)
{
Q_UNUSED(factor);
diff --git a/src/multimedia/platform/darwin/camera/avfcamera_p.h b/src/multimedia/platform/darwin/camera/avfcamera_p.h
index 9ac6122a4..63c61fa2b 100644
--- a/src/multimedia/platform/darwin/camera/avfcamera_p.h
+++ b/src/multimedia/platform/darwin/camera/avfcamera_p.h
@@ -86,7 +86,6 @@ public:
bool isFocusModeSupported(QCamera::FocusMode mode) const override;
void setCustomFocusPoint(const QPointF &point) override;
- bool isCustomFocusPointSupported() const override;
void setFocusDistance(float d) override;
void zoomTo(float factor, float rate) override;
@@ -122,6 +121,7 @@ private Q_SLOTS:
private:
void updateCameraConfiguration();
+ void updateCameraProperties();
void applyFlashSettings();
friend class AVFCameraSession;
diff --git a/src/multimedia/platform/qplatformcamera_p.h b/src/multimedia/platform/qplatformcamera_p.h
index 3cc48f616..cb40625b0 100644
--- a/src/multimedia/platform/qplatformcamera_p.h
+++ b/src/multimedia/platform/qplatformcamera_p.h
@@ -76,7 +76,6 @@ public:
virtual bool isFocusModeSupported(QCamera::FocusMode mode) const { return mode == QCamera::FocusModeAuto; }
virtual void setFocusMode(QCamera::FocusMode /*mode*/) {}
- virtual bool isCustomFocusPointSupported() const { return false; }
virtual void setCustomFocusPoint(const QPointF &/*point*/) {}
virtual void setFocusDistance(float) {}
diff --git a/tests/auto/unit/mockbackend/qmockcamera.h b/tests/auto/unit/mockbackend/qmockcamera.h
index f9d6e1edf..df249271b 100644
--- a/tests/auto/unit/mockbackend/qmockcamera.h
+++ b/tests/auto/unit/mockbackend/qmockcamera.h
@@ -101,7 +101,6 @@ public:
bool isFocusModeSupported(QCamera::FocusMode mode) const override
{ return simpleCamera ? mode == QCamera::FocusModeAuto : mode != QCamera::FocusModeInfinity; }
- bool isCustomFocusPointSupported() const override { return !simpleCamera; }
void setCustomFocusPoint(const QPointF &point) override
{
if (!simpleCamera)