diff options
author | Doris Verria <doris.verria@qt.io> | 2021-05-25 19:38:57 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-05-26 05:59:30 +0000 |
commit | d8d5fe313dcb1c72007295108db821c2c1771537 (patch) | |
tree | 475a856c9531b1d63bce28a1b536f6761a841313 | |
parent | 80692b9476be22b7e1a82e4d90b54c939d81a24b (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.cpp | 6 | ||||
-rw-r--r-- | src/multimedia/camera/qcamera.h | 5 | ||||
-rw-r--r-- | src/multimedia/platform/darwin/camera/avfcamera.mm | 24 | ||||
-rw-r--r-- | src/multimedia/platform/darwin/camera/avfcamera_p.h | 2 | ||||
-rw-r--r-- | src/multimedia/platform/qplatformcamera_p.h | 1 | ||||
-rw-r--r-- | tests/auto/unit/mockbackend/qmockcamera.h | 1 |
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) |