diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-05-17 14:13:54 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-05-18 08:44:27 +0000 |
commit | d78a921256b50399cead644d69d2a06d43ef3e5c (patch) | |
tree | 9e50e522fd048f4fffff9e6669e090b640819f4d /src | |
parent | ac2f3c0ef78e8374dea63b658959a8a6db890bca (diff) |
Merge the QCameraFocus API into QCamera
After API review, we decided that one large API in QCamera is
easier than having separate sub-objects that are only trying to
structure the API.
Change-Id: I5f820a580db1ddb3f47e11b88ca86215997f96ce
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src')
22 files changed, 397 insertions, 647 deletions
diff --git a/src/multimedia/CMakeLists.txt b/src/multimedia/CMakeLists.txt index d7593df96..3dc1078e2 100644 --- a/src/multimedia/CMakeLists.txt +++ b/src/multimedia/CMakeLists.txt @@ -28,7 +28,6 @@ qt_internal_add_module(Multimedia audio/qwavedecoder.cpp audio/qwavedecoder.h camera/qcamera.cpp camera/qcamera.h camera/qcamera_p.h camera/qcameraexposure.cpp camera/qcameraexposure.h - camera/qcamerafocus.cpp camera/qcamerafocus.h camera/qcameraimagecapture.cpp camera/qcameraimagecapture.h camera/qcameraimageprocessing.cpp camera/qcameraimageprocessing.h camera/qcamerainfo.cpp camera/qcamerainfo.h camera/qcamerainfo_p.h diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp index 08ad0b0f9..fbe0496e6 100644 --- a/src/multimedia/camera/qcamera.cpp +++ b/src/multimedia/camera/qcamera.cpp @@ -71,6 +71,20 @@ QT_BEGIN_NAMESPACE \snippet multimedia-snippets/camera.cpp Camera selection + On hardware that supports it, QCamera lets you adjust the focus + and zoom. This also includes things + like "Macro" mode for close up work (e.g. reading barcodes, or + recognising letters), or "touch to focus" - indicating an + interesting area of the viewfinder for the hardware to attempt + to focus on. + + \snippet multimedia-snippets/camera.cpp Camera custom focus + + The \l minimumZoomFactor() and \l maximumZoomFactor() methods allows checking the + range of allowed zoom factors. The \l zoomTo() method allows changing the zoom factor. + + \snippet multimedia-snippets/camera.cpp Camera zoom + See the \l{Camera Overview}{camera overview} for more information. */ @@ -101,7 +115,16 @@ void QCameraPrivate::init() q->connect(control, SIGNAL(activeChanged(bool)), q, SIGNAL(activeChanged(bool))); q->connect(control, SIGNAL(error(int,QString)), q, SLOT(_q_error(int,QString))); cameraExposure = new QCameraExposure(q, control); - cameraFocus = new QCameraFocus(q, control); + + focusControl = control->focusControl(); + + if (focusControl) { + q->connect(focusControl, SIGNAL(minimumZoomFactorChanged(float)), + q, SIGNAL(minimumZoomFactorChanged(float))); + q->connect(focusControl, SIGNAL(maximumZoomFactorChanged(float)), + q, SIGNAL(maximumZoomFactorChanged(float))); + } + imageProcessing = new QCameraImageProcessing(q, control); } @@ -214,14 +237,6 @@ QCameraExposure *QCamera::exposure() const } /*! - Returns the camera focus control object. -*/ -QCameraFocus *QCamera::focus() const -{ - return d_func()->cameraFocus; -} - -/*! Returns the camera image processing control object. */ QCameraImageProcessing *QCamera::imageProcessing() const @@ -445,6 +460,205 @@ void QCamera::setCameraFormat(const QCameraFormat &format) */ + +/*! + \property QCamera::focusMode + \brief the current camera focus mode. + + Sets up different focus modes for the camera. All auto focus modes will focus continuously. + Locking the focus is possible by setting the focus mode to \l FocusModeManual. This will keep + the current focus and stop any automatic focusing. + + \sa QCamera::isFocusModeSupported() +*/ + +QCamera::FocusMode QCamera::focusMode() const +{ + Q_D(const QCamera); + return d->focusControl ? d->focusControl->focusMode() : QCamera::FocusModeAuto; +} + +void QCamera::setFocusMode(QCamera::FocusMode mode) +{ + Q_D(QCamera); + if (!d->focusControl || d->focusControl->focusMode() == mode) + return; + d->focusControl->setFocusMode(mode); + emit focusModeChanged(); +} + +/*! + Returns true if the focus \a mode is supported by camera. +*/ + +bool QCamera::isFocusModeSupported(FocusMode mode) const +{ + Q_D(const QCamera); + return d->focusControl ? d->focusControl->isFocusModeSupported(mode) : false; +} + +/*! + Returns the point currently used by the auto focus system to focus onto. + */ +QPointF QCamera::focusPoint() const +{ + Q_D(const QCamera); + return d->focusControl ? d->focusControl->focusPoint() : QPointF(-1., -1.); + +} + +/*! + \property QCamera::customFocusPoint + + This property represents the position of the custom focus point, in relative frame coordinates: + QPointF(0,0) points to the left top frame point, QPointF(0.5,0.5) points to the frame center. + + The custom focus point property is used only in \c FocusPointCustom focus mode. + */ + +QPointF QCamera::customFocusPoint() const +{ + Q_D(const QCamera); + return d->customFocusPoint; +} + +void QCamera::setCustomFocusPoint(const QPointF &point) +{ + Q_D(QCamera); + if (!d->focusControl || d->customFocusPoint == point) + return; + d->customFocusPoint = point; + d->focusControl->setCustomFocusPoint(point); + Q_EMIT customFocusPointChanged(); +} + +bool QCamera::isCustomFocusPointSupported() const +{ + Q_D(const QCamera); + return d->focusControl ? d->focusControl->isCustomFocusPointSupported() : false; +} + +/*! + \property QCamera::focusDistance + + This property return an approximate focus distance of the camera. The value reported is between 0 and 1, 0 being the closest + possible focus distance, 1 being as far away as possible. Note that 1 is often, but not always infinity. + + Setting the focus distance will be ignored unless the focus mode is set to \l FocusModeManual. + */ +void QCamera::setFocusDistance(float d) +{ + if (!d_func()->focusControl || focusMode() != FocusModeManual) + return; + d_func()->focusControl->setFocusDistance(d); +} + +float QCamera::focusDistance() const +{ + if (d_func()->focusControl) + return d_func()->focusControl->focusDistance(); + return 0.; +} + +/*! + Returns the maximum zoom factor. + + This will be \c 1.0 on cameras that do not support zooming. +*/ + +float QCamera::maximumZoomFactor() const +{ + Q_D(const QCamera); + return d->focusControl ? d->focusControl->zoomFactorRange().max : 1.; +} + +/*! + Returns the minimum zoom factor. + + This will be \c 1.0 on cameras that do not support zooming. +*/ + +float QCamera::minimumZoomFactor() const +{ + Q_D(const QCamera); + return d->focusControl ? d->focusControl->zoomFactorRange().min : 1.; +} + +/*! + \property QCamera::zoomFactor + \brief The current zoom factor. +*/ +float QCamera::zoomFactor() const +{ + return d_func()->zoomFactor; +} + +void QCamera::setZoomFactor(float factor) +{ + zoomTo(factor, 0.); +} + +/*! + Zooms to a zoom factor \a factor using \a rate. + + The rate is specified in powers of two per second. A rate of 1 + would take two seconds to zoom from a zoom factor of 1 to a zoom factor of 4. + */ +void QCamera::zoomTo(float factor, float rate) +{ + Q_ASSERT(rate >= 0.); + if (rate < 0.) + rate = 0.; + + Q_D(QCamera); + if (!d->focusControl) + return; + factor = qBound(minimumZoomFactor(), factor, maximumZoomFactor()); + d->zoomFactor = factor; + d->focusControl->zoomTo(factor, rate); + emit zoomFactorChanged(factor); +} + +/*! + \enum QCamera::FocusMode + + \value FocusModeAuto Continuous auto focus mode. + \value FocusModeAutoNear Continuous auto focus mode on near objects. + \value FocusModeAutoFar Continuous auto focus mode on objects far away. + \value FocusModeHyperfocal Focus to hyperfocal distance, with the maximum depth of field achieved. + All objects at distances from half of this + distance out to infinity will be acceptably sharp. + \value FocusModeInfinity Focus strictly to infinity. + \value FocusModeManual Manual or fixed focus mode. +*/ + +/*! + \fn void QCamera::opticalZoomChanged(qreal value) + + Signal emitted when optical zoom value changes to new \a value. +*/ + +/*! + \fn void QCamera::digitalZoomChanged(qreal value) + + Signal emitted when digital zoom value changes to new \a value. +*/ + +/*! + \fn void QCamera::maximumOpticalZoomChanged(qreal zoom) + + Signal emitted when the maximum supported optical \a zoom value changed. +*/ + +/*! + \fn void QCamera::maximumDigitalZoomChanged(qreal zoom) + + Signal emitted when the maximum supported digital \a zoom value changed. + + The maximum supported zoom value can depend on other camera settings, + like capture mode or resolution. +*/ + QT_END_NAMESPACE #include "moc_qcamera.cpp" diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h index 4e7f1b401..7acae0c3a 100644 --- a/src/multimedia/camera/qcamera.h +++ b/src/multimedia/camera/qcamera.h @@ -49,7 +49,6 @@ #include <QtCore/qobject.h> #include <QtMultimedia/qcameraexposure.h> -#include <QtMultimedia/qcamerafocus.h> #include <QtMultimedia/qcameraimageprocessing.h> #include <QtMultimedia/qcamerainfo.h> @@ -69,13 +68,21 @@ class Q_MULTIMEDIA_EXPORT QCamera : public QObject Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged) Q_PROPERTY(QCamera::Status status READ status NOTIFY statusChanged) Q_PROPERTY(QCameraExposure* exposure READ exposure CONSTANT) - Q_PROPERTY(QCameraFocus* focus READ focus CONSTANT) Q_PROPERTY(QCameraImageProcessing* imageProcessing READ imageProcessing CONSTANT) Q_PROPERTY(QCameraInfo cameraInfo READ cameraInfo WRITE setCameraInfo NOTIFY cameraInfoChanged) Q_PROPERTY(Error error READ error NOTIFY errorChanged) Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged) Q_PROPERTY(QCameraFormat cameraFormat READ cameraFormat WRITE setCameraFormat NOTIFY cameraFormatChanged) + Q_PROPERTY(FocusMode focusMode READ focusMode WRITE setFocusMode) + Q_PROPERTY(QPointF customFocusPoint READ customFocusPoint WRITE setCustomFocusPoint NOTIFY customFocusPointChanged) + Q_PROPERTY(float focusDistance READ focusDistance WRITE setFocusDistance NOTIFY focusDistanceChanged) + + Q_PROPERTY(float minimumZoomFactor READ minimumZoomFactor NOTIFY minimumZoomFactorChanged) + Q_PROPERTY(float maximumZoomFactor READ maximumZoomFactor NOTIFY maximumZoomFactorChanged) + Q_PROPERTY(float zoomFactor READ zoomFactor WRITE setZoomFactor NOTIFY zoomFactorChanged) + + Q_ENUMS(FocusMode) Q_ENUMS(Status) Q_ENUMS(Error) public: @@ -93,6 +100,15 @@ public: CameraError }; + enum FocusMode { + FocusModeAuto, + FocusModeAutoNear, + FocusModeAutoFar, + FocusModeHyperfocal, + FocusModeInfinity, + FocusModeManual + }; + explicit QCamera(QObject *parent = nullptr); explicit QCamera(const QCameraInfo& cameraInfo, QObject *parent = nullptr); explicit QCamera(QCameraInfo::Position position, QObject *parent = nullptr); @@ -112,17 +128,36 @@ public: void setCameraFormat(const QCameraFormat &format); QCameraExposure *exposure() const; - QCameraFocus *focus() const; QCameraImageProcessing *imageProcessing() const; Error error() const; QString errorString() const; + FocusMode focusMode() const; + void setFocusMode(FocusMode mode); + bool isFocusModeSupported(FocusMode mode) const; + + QPointF focusPoint() const; + + QPointF customFocusPoint() const; + void setCustomFocusPoint(const QPointF &point); + bool isCustomFocusPointSupported() const; + + void setFocusDistance(float d); + float focusDistance() const; + + float minimumZoomFactor() const; + float maximumZoomFactor() const; + float zoomFactor() const; + void setZoomFactor(float factor); + public Q_SLOTS: void setActive(bool active); void start() { setActive(true); } void stop() { setActive(false); } + void zoomTo(float zoom, float rate); + Q_SIGNALS: void activeChanged(bool); void statusChanged(QCamera::Status status); @@ -131,6 +166,13 @@ Q_SIGNALS: void cameraInfoChanged(); void cameraFormatChanged(); + void focusModeChanged(); + void zoomFactorChanged(float); + void minimumZoomFactorChanged(float); + void maximumZoomFactorChanged(float); + void focusDistanceChanged(float); + void customFocusPointChanged(); + private: void setCaptureSession(QMediaCaptureSession *session); friend class QMediaCaptureSession; diff --git a/src/multimedia/camera/qcamera_p.h b/src/multimedia/camera/qcamera_p.h index c71cc7f73..67f06eeb3 100644 --- a/src/multimedia/camera/qcamera_p.h +++ b/src/multimedia/camera/qcamera_p.h @@ -58,6 +58,7 @@ QT_BEGIN_NAMESPACE class QPlatformCamera; +class QPlatformCameraFocus; class QPlatformMediaCaptureSession; class QCameraPrivate : public QObjectPrivate @@ -77,7 +78,6 @@ public: QPlatformCamera *control = nullptr; QCameraExposure *cameraExposure = nullptr; - QCameraFocus *cameraFocus = nullptr; QCameraImageProcessing *imageProcessing = nullptr; QObject *capture = nullptr; @@ -88,6 +88,10 @@ public: QCameraInfo cameraInfo; QCameraFormat cameraFormat; + QPlatformCameraFocus *focusControl = nullptr; + float zoomFactor = 1.; + QPointF customFocusPoint{-1, -1}; + void _q_error(int error, const QString &errorString); void unsetError() { error = QCamera::NoError; errorString.clear(); } }; diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp deleted file mode 100644 index cfa6148ae..000000000 --- a/src/multimedia/camera/qcamerafocus.cpp +++ /dev/null @@ -1,354 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qcamerafocus.h" -#include "private/qobject_p.h" - -#include <qcamera.h> -#include <private/qplatformcamera_p.h> -#include <private/qplatformcameraexposure_p.h> -#include <private/qplatformcamerafocus_p.h> -#include <private/qplatformcameraimagecapture_p.h> - -#include <QtCore/QDebug> - -QT_BEGIN_NAMESPACE - -/*! - \class QCameraFocus - - \brief The QCameraFocus class provides an interface for focus and zoom related camera settings. - - \inmodule QtMultimedia - \ingroup multimedia - \ingroup multimedia_camera - - On hardware that supports it, this class lets you adjust the focus - or zoom (both optical and digital). This also includes things - like "Macro" mode for close up work (e.g. reading barcodes, or - recognising letters), or "touch to focus" - indicating an - interesting area of the viewfinder for the hardware to attempt - to focus on. - - \snippet multimedia-snippets/camera.cpp Camera custom zoom - - Zooming can be accomplished in a number of ways - usually the more - expensive but higher quality approach is an optical zoom, which allows - using the full extent of the camera sensor to gather image pixels. In - addition it is possible to digitally zoom, which will generally just - enlarge part of the sensor frame and throw away other parts. If the - camera hardware supports optical zoom this should generally always - be used first. The \l maximumOpticalZoom() method allows this to be - checked. The \l zoomTo() method allows changing both optical and - digital zoom at once. - - \snippet multimedia-snippets/camera.cpp Camera combined zoom - - \section2 Some notes on autofocus - Some hardware supports a movable focus lens assembly, and typically - this hardware also supports automatically focusing via some heuristic. - You can influence this via the \l focusPoint property (usually provided - by a user in a "touch to focus" scenario). -*/ - -#define Q_DECLARE_NON_CONST_PUBLIC(Class) \ - inline Class* q_func() { return static_cast<Class *>(q_ptr); } \ - friend class Class; - -class QCameraFocusPrivate : public QObjectPrivate -{ - Q_DECLARE_NON_CONST_PUBLIC(QCameraFocus) -public: - void init(QPlatformCamera *cameraControl); - - QCamera *camera; - - QPlatformCameraFocus *focusControl; - float zoomFactor = 1.; - QPointF customFocusPoint{-1, -1}; -}; - -#undef Q_DECLARE_NON_CONST_PUBLIC - -void QCameraFocusPrivate::init(QPlatformCamera *cameraControl) -{ - Q_Q(QCameraFocus); - - focusControl = cameraControl->focusControl(); - - if (!focusControl) - return; - - q->connect(focusControl, SIGNAL(minimumZoomFactorChanged(float)), - q, SIGNAL(minimumZoomFactorChanged(float))); - q->connect(focusControl, SIGNAL(maximumZoomFactorChanged(float)), - q, SIGNAL(maximumZoomFactorChanged(float))); -} - -/*! - \internal - Construct a QCameraFocus for \a camera. -*/ - -QCameraFocus::QCameraFocus(QCamera *camera, QPlatformCamera *cameraControl) - : QObject(*new QCameraFocusPrivate, camera) -{ - Q_D(QCameraFocus); - d->camera = camera; - d->init(cameraControl); -} - - -/*! - Destroys the camera focus object. -*/ - -QCameraFocus::~QCameraFocus() = default; - -/*! - Returns true if focus related settings are supported by this camera. - - You may need to also check if any specific features are supported. -*/ -bool QCameraFocus::isAvailable() const -{ - return d_func()->focusControl != nullptr; -} - -/*! - \property QCameraFocus::focusMode - \brief the current camera focus mode. - - Sets up different focus modes for the camera. All auto focus modes will focus continuously. - Locking the focus is possible by setting the focus mode to \l FocusModeManual. This will keep - the current focus and stop any automatic focusing. - - \sa QCameraFocus::isFocusModeSupported() -*/ - -QCameraFocus::FocusMode QCameraFocus::focusMode() const -{ - Q_D(const QCameraFocus); - return d->focusControl ? d->focusControl->focusMode() : QCameraFocus::FocusModeAuto; -} - -void QCameraFocus::setFocusMode(QCameraFocus::FocusMode mode) -{ - Q_D(QCameraFocus); - if (!d->focusControl || d->focusControl->focusMode() == mode) - return; - d->focusControl->setFocusMode(mode); - emit focusModeChanged(); -} - -/*! - Returns true if the focus \a mode is supported by camera. -*/ - -bool QCameraFocus::isFocusModeSupported(FocusMode mode) const -{ - Q_D(const QCameraFocus); - return d->focusControl ? d->focusControl->isFocusModeSupported(mode) : false; -} - -/*! - Returns the point currently used by the auto focus system to focus onto. - */ -QPointF QCameraFocus::focusPoint() const -{ - Q_D(const QCameraFocus); - return d->focusControl ? d->focusControl->focusPoint() : QPointF(-1., -1.); - -} - -/*! - \property QCameraFocus::customFocusPoint - - This property represents the position of the custom focus point, in relative frame coordinates: - QPointF(0,0) points to the left top frame point, QPointF(0.5,0.5) points to the frame center. - - The custom focus point property is used only in \c FocusPointCustom focus mode. - */ - -QPointF QCameraFocus::customFocusPoint() const -{ - Q_D(const QCameraFocus); - return d->customFocusPoint; -} - -void QCameraFocus::setCustomFocusPoint(const QPointF &point) -{ - Q_D(QCameraFocus); - if (!d->focusControl || d->customFocusPoint == point) - return; - d->customFocusPoint = point; - d->focusControl->setCustomFocusPoint(point); - Q_EMIT customFocusPointChanged(); -} - -bool QCameraFocus::isCustomFocusPointSupported() const -{ - Q_D(const QCameraFocus); - return d->focusControl ? d->focusControl->isCustomFocusPointSupported() : false; -} - -/*! - \property QCameraFocus::focusDistance - - This property return an approximate focus distance of the camera. The value reported is between 0 and 1, 0 being the closest - possible focus distance, 1 being as far away as possible. Note that 1 is often, but not always infinity. - - Setting the focus distance will be ignored unless the focus mode is set to \l FocusModeManual. - */ -void QCameraFocus::setFocusDistance(float d) -{ - if (!d_func()->focusControl || focusMode() != FocusModeManual) - return; - d_func()->focusControl->setFocusDistance(d); -} - -float QCameraFocus::focusDistance() const -{ - if (d_func()->focusControl) - return d_func()->focusControl->focusDistance(); - return 0.; -} - -/*! - Returns the maximum zoom factor. - - This will be \c 1.0 on cameras that do not support zooming. -*/ - -float QCameraFocus::maximumZoomFactor() const -{ - Q_D(const QCameraFocus); - return d->focusControl ? d->focusControl->zoomFactorRange().max : 1.; -} - -/*! - Returns the minimum zoom factor. - - This will be \c 1.0 on cameras that do not support zooming. -*/ - -float QCameraFocus::minimumZoomFactor() const -{ - Q_D(const QCameraFocus); - return d->focusControl ? d->focusControl->zoomFactorRange().min : 1.; -} - -/*! - \property QCameraFocus::zoomFactor - \brief The current zoom factor. -*/ -float QCameraFocus::zoomFactor() const -{ - return d_func()->zoomFactor; -} - -void QCameraFocus::setZoomFactor(float factor) -{ - zoomTo(factor, 0.); -} - -/*! - Zooms to a zoom factor \a factor using \a rate. - - The rate is specified in powers of two per second. A rate of 1 - would take two seconds to zoom from a zoom factor of 1 to a zoom factor of 4. - */ -void QCameraFocus::zoomTo(float factor, float rate) -{ - Q_ASSERT(rate >= 0.); - if (rate < 0.) - rate = 0.; - - Q_D(QCameraFocus); - if (!d->focusControl) - return; - factor = qBound(minimumZoomFactor(), factor, maximumZoomFactor()); - d->zoomFactor = factor; - d->focusControl->zoomTo(factor, rate); - emit zoomFactorChanged(factor); -} - -/*! - \enum QCameraFocus::FocusMode - - \value FocusModeAuto Continuous auto focus mode. - \value FocusModeAutoNear Continuous auto focus mode on near objects. - \value FocusModeAutoFar Continuous auto focus mode on objects far away. - \value FocusModeHyperfocal Focus to hyperfocal distance, with the maximum depth of field achieved. - All objects at distances from half of this - distance out to infinity will be acceptably sharp. - \value FocusModeInfinity Focus strictly to infinity. - \value FocusModeManual Manual or fixed focus mode. -*/ - -/*! - \fn void QCameraFocus::opticalZoomChanged(qreal value) - - Signal emitted when optical zoom value changes to new \a value. -*/ - -/*! - \fn void QCameraFocus::digitalZoomChanged(qreal value) - - Signal emitted when digital zoom value changes to new \a value. -*/ - -/*! - \fn void QCameraFocus::maximumOpticalZoomChanged(qreal zoom) - - Signal emitted when the maximum supported optical \a zoom value changed. -*/ - -/*! - \fn void QCameraFocus::maximumDigitalZoomChanged(qreal zoom) - - Signal emitted when the maximum supported digital \a zoom value changed. - - The maximum supported zoom value can depend on other camera settings, - like capture mode or resolution. -*/ - -QT_END_NAMESPACE - -#include "moc_qcamerafocus.cpp" diff --git a/src/multimedia/camera/qcamerafocus.h b/src/multimedia/camera/qcamerafocus.h deleted file mode 100644 index df521afd4..000000000 --- a/src/multimedia/camera/qcamerafocus.h +++ /dev/null @@ -1,139 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QCAMERAFOCUS_H -#define QCAMERAFOCUS_H - -#include <QtCore/qstringlist.h> -#include <QtCore/qpair.h> -#include <QtCore/qsize.h> -#include <QtCore/qpoint.h> -#include <QtCore/qrect.h> -#include <QtCore/qshareddata.h> -#include <QtCore/qobject.h> - -#include <QtMultimedia/qtmultimediaglobal.h> -#include <QtMultimedia/qmediaenumdebug.h> - -QT_BEGIN_NAMESPACE - - -class QCamera; -class QPlatformCamera; - -class QCameraFocusPrivate; -class Q_MULTIMEDIA_EXPORT QCameraFocus : public QObject -{ - Q_OBJECT - - Q_PROPERTY(FocusMode focusMode READ focusMode WRITE setFocusMode) - Q_PROPERTY(QPointF customFocusPoint READ customFocusPoint WRITE setCustomFocusPoint NOTIFY customFocusPointChanged) - Q_PROPERTY(float focusDistance READ focusDistance WRITE setFocusDistance NOTIFY focusDistanceChanged) - - Q_PROPERTY(float minimumZoomFactor READ minimumZoomFactor NOTIFY minimumZoomFactorChanged) - Q_PROPERTY(float maximumZoomFactor READ maximumZoomFactor NOTIFY maximumZoomFactorChanged) - Q_PROPERTY(float zoomFactor READ zoomFactor WRITE setZoomFactor NOTIFY zoomFactorChanged) - - Q_ENUMS(FocusMode) -public: - enum FocusMode { - FocusModeAuto, - FocusModeAutoNear, - FocusModeAutoFar, - FocusModeHyperfocal, - FocusModeInfinity, - FocusModeManual -#if 1 // QT_DEPRECATED - , ContinuousFocus = FocusModeAuto, - AutoFocus = FocusModeAuto, // Not quite - MacroFocus = FocusModeAutoNear, - HyperfocalFocus = FocusModeHyperfocal, - InfinityFocus = FocusModeInfinity, - ManualFocus = FocusModeManual -#endif - }; - - bool isAvailable() const; - - FocusMode focusMode() const; - void setFocusMode(FocusMode mode); - bool isFocusModeSupported(FocusMode mode) const; - - QPointF focusPoint() const; - - QPointF customFocusPoint() const; - void setCustomFocusPoint(const QPointF &point); - bool isCustomFocusPointSupported() const; - - void setFocusDistance(float d); - float focusDistance() const; - - float minimumZoomFactor() const; - float maximumZoomFactor() const; - float zoomFactor() const; - void setZoomFactor(float factor); - -public Q_SLOTS: - void zoomTo(float zoom, float rate); - -Q_SIGNALS: - void focusModeChanged(); - void zoomFactorChanged(float); - void minimumZoomFactorChanged(float); - void maximumZoomFactorChanged(float); - void focusDistanceChanged(float); - void customFocusPointChanged(); - -protected: - ~QCameraFocus(); - -private: - friend class QCamera; - friend class QCameraPrivate; - QCameraFocus(QCamera *camera, QPlatformCamera *cameraControl); - - Q_DISABLE_COPY(QCameraFocus) - Q_DECLARE_PRIVATE(QCameraFocus) -}; - -QT_END_NAMESPACE - -Q_MEDIA_ENUM_DEBUG(QCameraFocus, FocusMode) - -#endif // QCAMERAFOCUS_H diff --git a/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp b/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp index 80d4853f7..1f2273002 100644 --- a/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp +++ b/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp @@ -243,13 +243,12 @@ void cameraimageprocessing() void camerafocus() { - //! [Camera custom zoom] - QCameraFocus *focus = camera->focus(); - focus->setFocusPointMode(QCameraFocus::FocusModeManual); - focus->setCustomFocusPoint(QPointF(0.25f, 0.75f)); // A point near the bottom left, 25% away from the corner, near that shiny vase - //! [Camera custom zoom] - - //! [Camera combined zoom] - focus->setZoomFactor(3.0); - //! [Camera combined zoom] + //! [Camera custom focus] + camera->setFocusPointMode(QCamera::FocusModeManual); + camera->setCustomFocusPoint(QPointF(0.25f, 0.75f)); // A point near the bottom left, 25% away from the corner, near that shiny vase + //! [Camera custom focus] + + //! [Camera zoom] + camera->setZoomFactor(3.0); + //! [Camera zoom] } diff --git a/src/multimedia/doc/src/cameraoverview.qdoc b/src/multimedia/doc/src/cameraoverview.qdoc index f832bc6bb..53015339a 100644 --- a/src/multimedia/doc/src/cameraoverview.qdoc +++ b/src/multimedia/doc/src/cameraoverview.qdoc @@ -231,24 +231,18 @@ the final images, and you can control them with different classes. \section3 Focus and Zoom -Focusing (and zoom) is managed primarily by the \l QCameraFocus class. -QCameraFocus allows the developer to set the general policy by means of the -enums for the \l {QCameraFocus::FocusMode}{FocusMode} and the -\l {QCameraFocus::FocusPointMode}{FocusPointMode}. \l {QCameraFocus::FocusMode}{FocusMode} -deals with settings such as \l {QCameraFocus::FocusModeAuto}, -and \l {QCameraFocus::FocusModeInfinity}, -whereas \l {QCameraFocus::FocusMode}{FocusPointMode} deals with the -various focus zones within the view that are used for autofocus modes. \l {QCameraFocus::FocusMode}{FocusPointMode} -has support for face recognition (where the camera supports it), center focus and a custom -focus where the focus point can be specified. - -For camera hardware that supports it, \l {QCameraFocus::FocusMode}{Macro focus} allows +QCamera allows the developer to set the general focus policy by means of the +enums for the \l {QCamera::FocusMode}{FocusMode}. \l {QCamera::FocusMode}{FocusMode} +deals with settings such as \l {QCamera::FocusModeAuto}, +and \l {QCamera::FocusModeInfinity}. + +For camera hardware that supports it, \l QCamera::FocusModeAutoNear} allows imaging of things that are close to the sensor. This is useful in applications like barcode recognition, or business card scanning. -In addition to focus, QCameraFocus allows you to control any available optical or -digital zoom. In general, optical zoom is higher quality, but more expensive to -manufacture, so the available zoom range might be limited (or fixed to unity). +In addition to focus, QCameraFocus allows you to control any available zoom using \l setZoomFactor() +or \l zoomTo(). The available zoom range might be limited (or fixed to unity), the allowed range can +be checked with \l minimumZoomFactor() and maximumZoomFactor(). \section3 Exposure, Aperture, Shutter Speed and Flash diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerafocuscontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidcamerafocuscontrol.cpp index 42bb3c842..d95941430 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcamerafocuscontrol.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcamerafocuscontrol.cpp @@ -62,7 +62,7 @@ static QRect adjustedArea(const QRectF &area) QAndroidCameraFocusControl::QAndroidCameraFocusControl(QAndroidCameraSession *session) : QPlatformCameraFocus() , m_session(session) - , m_focusMode(QCameraFocus::AutoFocus) + , m_focusMode(QCamera::FocusModeAuto) , m_focusPoint(0.5, 0.5) , m_continuousPictureFocusSupported(false) , m_continuousVideoFocusSupported(false) @@ -71,12 +71,12 @@ QAndroidCameraFocusControl::QAndroidCameraFocusControl(QAndroidCameraSession *se this, SLOT(onCameraOpened())); } -QCameraFocus::FocusMode QAndroidCameraFocusControl::focusMode() const +QCamera::FocusMode QAndroidCameraFocusControl::focusMode() const { return m_focusMode; } -void QAndroidCameraFocusControl::setFocusMode(QCameraFocus::FocusMode mode) +void QAndroidCameraFocusControl::setFocusMode(QCamera::FocusMode mode) { if (!m_session->camera()) { setFocusModeHelper(mode); @@ -87,20 +87,20 @@ void QAndroidCameraFocusControl::setFocusMode(QCameraFocus::FocusMode mode) QString focusMode; switch (mode) { - case QCameraFocus::FocusModeHyperfocal: + case QCamera::FocusModeHyperfocal: focusMode = QLatin1String("edof"); break; - case QCameraFocus::FocusModeInfinity: // not 100%, but close + case QCamera::FocusModeInfinity: // not 100%, but close focusMode = QLatin1String("infinity"); break; - case QCameraFocus::FocusModeManual: + case QCamera::FocusModeManual: focusMode = QLatin1String("fixed"); break; - case QCameraFocus::FocusModeAutoNear: + case QCamera::FocusModeAutoNear: focusMode = QLatin1String("macro"); break; - case QCameraFocus::FocusModeAuto: - case QCameraFocus::FocusModeAutoFar: + case QCamera::FocusModeAuto: + case QCamera::FocusModeAutoFar: if (1) { // ###? focusMode = QLatin1String("continuous-video"); } else { @@ -118,7 +118,7 @@ void QAndroidCameraFocusControl::setFocusMode(QCameraFocus::FocusMode mode) } } -bool QAndroidCameraFocusControl::isFocusModeSupported(QCameraFocus::FocusMode mode) const +bool QAndroidCameraFocusControl::isFocusModeSupported(QCamera::FocusMode mode) const { return m_session->camera() ? m_supportedFocusModes.contains(mode) : false; } @@ -162,19 +162,19 @@ void QAndroidCameraFocusControl::onCameraOpened() for (int i = 0; i < focusModes.size(); ++i) { const QString &focusMode = focusModes.at(i); if (focusMode == QLatin1String("continuous-picture")) { - m_supportedFocusModes << QCameraFocus::FocusModeAuto; + m_supportedFocusModes << QCamera::FocusModeAuto; m_continuousPictureFocusSupported = true; } else if (focusMode == QLatin1String("continuous-video")) { - m_supportedFocusModes << QCameraFocus::FocusModeAuto; + m_supportedFocusModes << QCamera::FocusModeAuto; m_continuousVideoFocusSupported = true; } else if (focusMode == QLatin1String("edof")) { - m_supportedFocusModes << QCameraFocus::FocusModeHyperfocal; + m_supportedFocusModes << QCamera::FocusModeHyperfocal; } else if (focusMode == QLatin1String("fixed")) { - m_supportedFocusModes << QCameraFocus::FocusModeManual; + m_supportedFocusModes << QCamera::FocusModeManual; } else if (focusMode == QLatin1String("infinity")) { - m_supportedFocusModes << QCameraFocus::FocusModeInfinity; + m_supportedFocusModes << QCamera::FocusModeInfinity; } else if (focusMode == QLatin1String("macro")) { - m_supportedFocusModes << QCameraFocus::FocusModeAutoNear; + m_supportedFocusModes << QCamera::FocusModeAutoNear; } } @@ -182,7 +182,7 @@ void QAndroidCameraFocusControl::onCameraOpened() m_focusPointSupported = true; if (!m_supportedFocusModes.contains(m_focusMode)) - setFocusModeHelper(QCameraFocus::AutoFocus); + setFocusModeHelper(QCamera::FocusModeAuto); setFocusMode(m_focusMode); setCustomFocusPoint(m_focusPoint); @@ -234,7 +234,7 @@ void QAndroidCameraFocusControl::onViewportSizeChanged() void QAndroidCameraFocusControl::onCameraCaptureModeChanged() { -// if (m_session->camera() && m_focusMode == QCameraFocus::ContinuousFocus) { +// if (m_session->camera() && m_focusMode == QCamera::FocusModeAudio) { // QString focusMode; // if ((m_session->captureMode().testFlag(QCamera::CaptureVideo) && m_continuousVideoFocusSupported) // || !m_continuousPictureFocusSupported) { diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerafocuscontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidcamerafocuscontrol_p.h index 5b72f978d..ca9e23725 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcamerafocuscontrol_p.h +++ b/src/multimedia/platform/android/mediacapture/qandroidcamerafocuscontrol_p.h @@ -63,9 +63,9 @@ class QAndroidCameraFocusControl : public QPlatformCameraFocus public: explicit QAndroidCameraFocusControl(QAndroidCameraSession *session); - QCameraFocus::FocusMode focusMode() const override; - void setFocusMode(QCameraFocus::FocusMode mode) override; - bool isFocusModeSupported(QCameraFocus::FocusMode mode) const override; + QCamera::FocusMode focusMode() const override; + void setFocusMode(QCamera::FocusMode mode) override; + bool isFocusModeSupported(QCamera::FocusMode mode) const override; bool isCustomFocusPointSupported() const override; QPointF focusPoint() const override; @@ -82,7 +82,7 @@ private Q_SLOTS: void onAutoFocusComplete(bool success); private: - inline void setFocusModeHelper(QCameraFocus::FocusMode mode) + inline void setFocusModeHelper(QCamera::FocusMode mode) { if (m_focusMode != mode) { m_focusMode = mode; @@ -94,10 +94,10 @@ private: QAndroidCameraSession *m_session; - QCameraFocus::FocusMode m_focusMode; + QCamera::FocusMode m_focusMode; QPointF m_focusPoint; - QList<QCameraFocus::FocusMode> m_supportedFocusModes; + QList<QCamera::FocusMode> m_supportedFocusModes; bool m_continuousPictureFocusSupported; bool m_continuousVideoFocusSupported; bool m_focusPointSupported = false; diff --git a/src/multimedia/platform/darwin/camera/avfcamerafocus.mm b/src/multimedia/platform/darwin/camera/avfcamerafocus.mm index dc62ce507..ab430894d 100644 --- a/src/multimedia/platform/darwin/camera/avfcamerafocus.mm +++ b/src/multimedia/platform/darwin/camera/avfcamerafocus.mm @@ -50,23 +50,22 @@ QT_BEGIN_NAMESPACE namespace { -bool qt_focus_mode_supported(QCameraFocus::FocusMode mode) +bool qt_focus_mode_supported(QCamera::FocusMode mode) { - // Check if QCameraFocus::FocusMode has counterpart in AVFoundation. + // Check if QCamera::FocusMode has counterpart in AVFoundation. // AVFoundation has 'Manual', 'Auto' and 'Continuous', // where 'Manual' is actually 'Locked' + writable property 'lensPosition'. - return mode == QCameraFocus::AutoFocus - || mode == QCameraFocus::ContinuousFocus - || mode == QCameraFocus::ManualFocus; + return mode == QCamera::FocusModeAuto + || mode == QCamera::FocusModeManual; } -AVCaptureFocusMode avf_focus_mode(QCameraFocus::FocusMode requestedMode) +AVCaptureFocusMode avf_focus_mode(QCamera::FocusMode requestedMode) { switch (requestedMode) { - case QCameraFocus::FocusModeHyperfocal: - case QCameraFocus::FocusModeInfinity: - case QCameraFocus::FocusModeManual: + case QCamera::FocusModeHyperfocal: + case QCamera::FocusModeInfinity: + case QCamera::FocusModeManual: return AVCaptureFocusModeLocked; default: return AVCaptureFocusModeContinuousAutoFocus; @@ -79,7 +78,7 @@ AVCaptureFocusMode avf_focus_mode(QCameraFocus::FocusMode requestedMode) AVFCameraFocus::AVFCameraFocus(AVFCamera *camera) : QPlatformCameraFocus(camera), m_camera(camera), - m_focusMode(QCameraFocus::ContinuousFocus), + m_focusMode(QCamera::FocusModeAuto), m_customFocusPoint(0.5f, 0.5f), m_actualFocusPoint(m_customFocusPoint) { @@ -87,12 +86,12 @@ AVFCameraFocus::AVFCameraFocus(AVFCamera *camera) connect(m_camera, SIGNAL(activeChanged(bool)), SLOT(cameraActiveChanged(bool))); } -QCameraFocus::FocusMode AVFCameraFocus::focusMode() const +QCamera::FocusMode AVFCameraFocus::focusMode() const { return m_focusMode; } -void AVFCameraFocus::setFocusMode(QCameraFocus::FocusMode mode) +void AVFCameraFocus::setFocusMode(QCamera::FocusMode mode) { if (m_focusMode == mode) return; @@ -127,7 +126,7 @@ void AVFCameraFocus::setFocusMode(QCameraFocus::FocusMode mode) Q_EMIT focusModeChanged(m_focusMode); } -bool AVFCameraFocus::isFocusModeSupported(QCameraFocus::FocusMode mode) const +bool AVFCameraFocus::isFocusModeSupported(QCamera::FocusMode mode) const { AVCaptureDevice *captureDevice = m_camera->device(); if (!captureDevice) @@ -136,19 +135,19 @@ bool AVFCameraFocus::isFocusModeSupported(QCameraFocus::FocusMode mode) const #ifdef Q_OS_IOS AVCaptureFocusMode avMode = avf_focus_mode(mode); switch (mode) { - case QCameraFocus::FocusModeAuto: - case QCameraFocus::FocusModeHyperfocal: - case QCameraFocus::FocusModeInfinity: - case QCameraFocus::FocusModeManual: + case QCamera::FocusModeAuto: + case QCamera::FocusModeHyperfocal: + case QCamera::FocusModeInfinity: + case QCamera::FocusModeManual: return [captureDevice isFocusModeSupported:avMode]; - case QCameraFocus::FocusModeAutoNear: + case QCamera::FocusModeAutoNear: Q_FALLTHROUGH(); - case QCameraFocus::FocusModeAutoFar: + case QCamera::FocusModeAutoFar: return captureDevice.autoFocusRangeRestrictionSupported && [captureDevice isFocusModeSupported:avMode]; } #else - return mode == QCameraFocus::FocusModeAuto; // stupid builtin webcam doesn't do any focus handling, but hey it's usually focused :) + return mode == QCamera::FocusModeAuto; // stupid builtin webcam doesn't do any focus handling, but hey it's usually focused :) #endif } @@ -185,7 +184,7 @@ void AVFCameraFocus::setCustomFocusPoint(const QPointF &point) m_actualFocusPoint = m_customFocusPoint; const CGPoint focusPOI = CGPointMake(point.x(), point.y()); [captureDevice setFocusPointOfInterest:focusPOI]; - if (m_focusMode != QCameraFocus::ContinuousFocus) + if (m_focusMode != QCamera::FocusModeAuto) [captureDevice setFocusMode:AVCaptureFocusModeAutoFocus]; } else { qDebugCamera() << Q_FUNC_INFO << "focus point of interest not supported"; @@ -263,7 +262,7 @@ void AVFCameraFocus::cameraActiveChanged(bool active) [captureDevice setFocusPointOfInterest:focusPOI]; } - if (m_focusMode != QCameraFocus::ContinuousFocus) { + if (m_focusMode != QCamera::FocusModeAuto) { const AVCaptureFocusMode avMode = avf_focus_mode(m_focusMode); if (captureDevice.focusMode != avMode) { if (![captureDevice isFocusModeSupported:avMode]) { diff --git a/src/multimedia/platform/darwin/camera/avfcamerafocus_p.h b/src/multimedia/platform/darwin/camera/avfcamerafocus_p.h index 2c9b8b004..2f4adf5fa 100644 --- a/src/multimedia/platform/darwin/camera/avfcamerafocus_p.h +++ b/src/multimedia/platform/darwin/camera/avfcamerafocus_p.h @@ -70,9 +70,9 @@ class AVFCameraFocus : public QPlatformCameraFocus public: explicit AVFCameraFocus(AVFCamera *camera); - QCameraFocus::FocusMode focusMode() const override; - void setFocusMode(QCameraFocus::FocusMode mode) override; - bool isFocusModeSupported(QCameraFocus::FocusMode mode) const override; + QCamera::FocusMode focusMode() const override; + void setFocusMode(QCamera::FocusMode mode) override; + bool isFocusModeSupported(QCamera::FocusMode mode) const override; QPointF focusPoint() const override; void setCustomFocusPoint(const QPointF &point) override; @@ -89,7 +89,7 @@ private Q_SLOTS: private: AVFCamera *m_camera; - QCameraFocus::FocusMode m_focusMode; + QCamera::FocusMode m_focusMode; QPointF m_customFocusPoint; QPointF m_actualFocusPoint; diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamerafocus.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamerafocus.cpp index beb09a897..b5919bca8 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamerafocus.cpp +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamerafocus.cpp @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE QGstreamerCameraFocus::QGstreamerCameraFocus(QGstreamerCamera *session) : QPlatformCameraFocus(session), m_camera(session), - m_focusMode(QCameraFocus::AutoFocus) + m_focusMode(QCamera::FocusModeAuto) { #if QT_CONFIG(gstreamer_photography) auto photography = m_camera->photography(); @@ -69,12 +69,12 @@ QGstreamerCameraFocus::~QGstreamerCameraFocus() { } -QCameraFocus::FocusMode QGstreamerCameraFocus::focusMode() const +QCamera::FocusMode QGstreamerCameraFocus::focusMode() const { return m_focusMode; } -void QGstreamerCameraFocus::setFocusMode(QCameraFocus::FocusMode mode) +void QGstreamerCameraFocus::setFocusMode(QCamera::FocusMode mode) { if (mode == m_focusMode) return; @@ -85,22 +85,22 @@ void QGstreamerCameraFocus::setFocusMode(QCameraFocus::FocusMode mode) GstPhotographyFocusMode photographyMode = GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL; switch (mode) { - case QCameraFocus::FocusModeAutoNear: + case QCamera::FocusModeAutoNear: photographyMode = GST_PHOTOGRAPHY_FOCUS_MODE_MACRO; break; - case QCameraFocus::FocusModeAutoFar: + case QCamera::FocusModeAutoFar: // not quite, but hey :) Q_FALLTHROUGH(); - case QCameraFocus::HyperfocalFocus: + case QCamera::FocusModeHyperfocal: photographyMode = GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL; break; - case QCameraFocus::FocusModeInfinity: + case QCamera::FocusModeInfinity: photographyMode = GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY; break; - case QCameraFocus::FocusModeManual: + case QCamera::FocusModeManual: photographyMode = GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL; break; - default: // QCameraFocus::FocusModeAuto: + default: // QCamera::FocusModeAuto: break; } @@ -112,7 +112,7 @@ void QGstreamerCameraFocus::setFocusMode(QCameraFocus::FocusMode mode) #endif } -bool QGstreamerCameraFocus::isFocusModeSupported(QCameraFocus::FocusMode mode) const +bool QGstreamerCameraFocus::isFocusModeSupported(QCamera::FocusMode mode) const { Q_UNUSED(mode); diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamerafocus_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamerafocus_p.h index d77f6ff51..e9dd069d5 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamerafocus_p.h +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercamerafocus_p.h @@ -75,16 +75,16 @@ public: QGstreamerCameraFocus(QGstreamerCamera *session); virtual ~QGstreamerCameraFocus(); - QCameraFocus::FocusMode focusMode() const override; - void setFocusMode(QCameraFocus::FocusMode mode) override; - bool isFocusModeSupported(QCameraFocus::FocusMode mode) const override; + QCamera::FocusMode focusMode() const override; + void setFocusMode(QCamera::FocusMode mode) override; + bool isFocusModeSupported(QCamera::FocusMode mode) const override; ZoomRange zoomFactorRange() const override; void zoomTo(float newZoomFactor, float rate) override; private: QGstreamerCamera *m_camera; - QCameraFocus::FocusMode m_focusMode; + QCamera::FocusMode m_focusMode; float requestedZoomFactor = 1.; float maxZoomFactor = 1.; }; diff --git a/src/multimedia/platform/qnx/camera/bbcamerafocuscontrol.cpp b/src/multimedia/platform/qnx/camera/bbcamerafocuscontrol.cpp index 2865a0363..20d2d540a 100644 --- a/src/multimedia/platform/qnx/camera/bbcamerafocuscontrol.cpp +++ b/src/multimedia/platform/qnx/camera/bbcamerafocuscontrol.cpp @@ -47,40 +47,40 @@ QT_BEGIN_NAMESPACE BbCameraFocusControl::BbCameraFocusControl(BbCameraSession *session, QObject *parent) : QPlatformCameraFocus(parent) , m_session(session) - , m_focusMode(QCameraFocus::FocusModeAuto) + , m_focusMode(QCamera::FocusModeAuto) , m_customFocusPoint(QPointF(0, 0)) { connect(m_session, SIGNAL(statusChanged(QCamera::Status)), this, SLOT(statusChanged(QCamera::Status))); } -QCameraFocus::FocusMode BbCameraFocusControl::focusMode() const +QCamera::FocusMode BbCameraFocusControl::focusMode() const { camera_focusmode_t focusMode = CAMERA_FOCUSMODE_OFF; const camera_error_t result = camera_get_focus_mode(m_session->handle(), &focusMode); if (result != CAMERA_EOK) { qWarning() << "Unable to retrieve focus mode from camera:" << result; - return QCameraFocus::FocusModeAuto; + return QCamera::FocusModeAuto; } switch (focusMode) { case CAMERA_FOCUSMODE_EDOF: - return QCameraFocus::FocusModeHyperfocal; + return QCamera::FocusModeHyperfocal; case CAMERA_FOCUSMODE_MANUAL: - return QCameraFocus::FocusModeManual; + return QCamera::FocusModeManual; case CAMERA_FOCUSMODE_CONTINUOUS_MACRO: // fall through case CAMERA_FOCUSMODE_MACRO: - return QCameraFocus::MacroFocus; + return QCamera::FocusModeAutoNear; case CAMERA_FOCUSMODE_AUTO: // fall through case CAMERA_FOCUSMODE_CONTINUOUS_AUTO: - return QCameraFocus::FocusModeAuto; + return QCamera::FocusModeAuto; case CAMERA_FOCUSMODE_OFF: default: - return QCameraFocus::FocusModeAuto; + return QCamera::FocusModeAuto; } } -void BbCameraFocusControl::setFocusMode(QCameraFocus::FocusMode mode) +void BbCameraFocusControl::setFocusMode(QCamera::FocusMode mode) { if (m_focusMode == mode) return; @@ -88,18 +88,18 @@ void BbCameraFocusControl::setFocusMode(QCameraFocus::FocusMode mode) camera_focusmode_t focusMode = CAMERA_FOCUSMODE_OFF; switch (mode) { - case QCameraFocus::FocusModeHyperfocal: - case QCameraFocus::FocusModeInfinity: // not 100%, but close + case QCamera::FocusModeHyperfocal: + case QCamera::FocusModeInfinity: // not 100%, but close focusMode = CAMERA_FOCUSMODE_EDOF; break; - case QCameraFocus::FocusModeManual: + case QCamera::FocusModeManual: focusMode = CAMERA_FOCUSMODE_MANUAL; break; - case QCameraFocus::FocusModeAutoNear: + case QCamera::FocusModeAutoNear: focusMode = CAMERA_FOCUSMODE_MACRO; break; - case QCameraFocus::FocusModeAuto: - case QCameraFocus::FocusModeAutoFar: + case QCamera::FocusModeAuto: + case QCamera::FocusModeAutoFar: focusMode = CAMERA_FOCUSMODE_CONTINUOUS_AUTO; break; } @@ -115,18 +115,18 @@ void BbCameraFocusControl::setFocusMode(QCameraFocus::FocusMode mode) emit focusModeChanged(m_focusMode); } -bool BbCameraFocusControl::isFocusModeSupported(QCameraFocus::FocusMode mode) const +bool BbCameraFocusControl::isFocusModeSupported(QCamera::FocusMode mode) const { if (m_session->state() == QCamera::UnloadedState) return false; - if (mode == QCameraFocus::FocusModeHyperfocal) + if (mode == QCamera::FocusModeHyperfocal) return false; //TODO how to check? - else if (mode == QCameraFocus::FocusModeManual) + else if (mode == QCamera::FocusModeManual) return camera_has_feature(m_session->handle(), CAMERA_FEATURE_MANUALFOCUS); - else if (mode == QCameraFocus::FocusModeAuto) + else if (mode == QCamera::FocusModeAuto) return camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOFOCUS); - else if (mode == QCameraFocus::FocusModeAutoNear) + else if (mode == QCamera::FocusModeAutoNear) return camera_has_feature(m_session->handle(), CAMERA_FEATURE_MACROFOCUS); return false; diff --git a/src/multimedia/platform/qnx/camera/bbcamerafocuscontrol_p.h b/src/multimedia/platform/qnx/camera/bbcamerafocuscontrol_p.h index 231ff9025..895701283 100644 --- a/src/multimedia/platform/qnx/camera/bbcamerafocuscontrol_p.h +++ b/src/multimedia/platform/qnx/camera/bbcamerafocuscontrol_p.h @@ -62,9 +62,9 @@ class BbCameraFocusControl : public QPlatformCameraFocus public: explicit BbCameraFocusControl(BbCameraSession *session, QObject *parent = 0); - QCameraFocus::FocusMode focusMode() const override; - void setFocusMode(QCameraFocus::FocusMode mode) override; - bool isFocusModeSupported(QCameraFocus::FocusMode mode) const override; + QCamera::FocusMode focusMode() const override; + void setFocusMode(QCamera::FocusMode mode) override; + bool isFocusModeSupported(QCamera::FocusMode mode) const override; QPointF focusPoint() const override; void setCustomFocusPoint(const QPointF &point) override; @@ -85,7 +85,7 @@ private: BbCameraSession *m_session; - QCameraFocus::FocusMode m_focusMode; + QCamera::FocusMode m_focusMode; QPointF m_customFocusPoint; qreal m_minimumZoomFactor; diff --git a/src/multimedia/platform/qplatformcamerafocus.cpp b/src/multimedia/platform/qplatformcamerafocus.cpp index 9e1c1edc1..174705d1e 100644 --- a/src/multimedia/platform/qplatformcamerafocus.cpp +++ b/src/multimedia/platform/qplatformcamerafocus.cpp @@ -65,21 +65,21 @@ QPlatformCameraFocus::QPlatformCameraFocus(QObject *parent) } /*! - \fn QCameraFocus::FocusMode QPlatformCameraFocus::focusMode() const + \fn QCamera::FocusMode QPlatformCameraFocus::focusMode() const Returns the focus mode being used. */ /*! - \fn void QPlatformCameraFocus::setFocusMode(QCameraFocus::FocusMode mode) + \fn void QPlatformCameraFocus::setFocusMode(QCamera::FocusMode mode) Set the focus mode to \a mode. */ /*! - \fn bool QPlatformCameraFocus::isFocusModeSupported(QCameraFocus::FocusMode mode) const + \fn bool QPlatformCameraFocus::isFocusModeSupported(QCamera::FocusMode mode) const Returns true if focus \a mode is supported. */ @@ -91,13 +91,13 @@ QPlatformCameraFocus::QPlatformCameraFocus(QObject *parent) */ /*! - \fn QPlatformCameraFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode) + \fn QPlatformCameraFocus::setFocusPointMode(QCamera::FocusPointMode mode) Sets the camera focus point selection \a mode. */ /*! - \fn QPlatformCameraFocus::isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const + \fn QPlatformCameraFocus::isFocusPointModeSupported(QCamera::FocusPointMode mode) const Returns true if the camera focus point \a mode is supported. */ @@ -120,7 +120,7 @@ QPlatformCameraFocus::QPlatformCameraFocus(QObject *parent) */ /*! - \fn void QPlatformCameraFocus::focusModeChanged(QCameraFocus::FocusMode mode) + \fn void QPlatformCameraFocus::focusModeChanged(QCamera::FocusMode mode) Signal is emitted when the focus \a mode is changed, usually in result of QPlatformCameraFocus::setFocusMode call or capture mode changes. @@ -129,7 +129,7 @@ QPlatformCameraFocus::QPlatformCameraFocus(QObject *parent) */ /*! - \fn void QPlatformCameraFocus::focusPointModeChanged(QCameraFocus::FocusPointMode mode) + \fn void QPlatformCameraFocus::focusPointModeChanged(QCamera::FocusPointMode mode) Signal is emitted when the focus point \a mode is changed, usually in result of QPlatformCameraFocus::setFocusPointMode call or capture mode changes. diff --git a/src/multimedia/platform/qplatformcamerafocus_p.h b/src/multimedia/platform/qplatformcamerafocus_p.h index 7813e087e..f6eb88f71 100644 --- a/src/multimedia/platform/qplatformcamerafocus_p.h +++ b/src/multimedia/platform/qplatformcamerafocus_p.h @@ -54,7 +54,7 @@ #include <QtCore/qobject.h> #include <QtMultimedia/qtmultimediaglobal.h> -#include <QtMultimedia/qcamerafocus.h> +#include <QtMultimedia/qcamera.h> QT_BEGIN_NAMESPACE @@ -66,9 +66,9 @@ class Q_MULTIMEDIA_EXPORT QPlatformCameraFocus : public QObject Q_OBJECT public: - virtual QCameraFocus::FocusMode focusMode() const = 0; - virtual void setFocusMode(QCameraFocus::FocusMode mode) = 0; - virtual bool isFocusModeSupported(QCameraFocus::FocusMode mode) const = 0; + virtual QCamera::FocusMode focusMode() const = 0; + virtual void setFocusMode(QCamera::FocusMode mode) = 0; + virtual bool isFocusModeSupported(QCamera::FocusMode mode) const = 0; virtual bool isCustomFocusPointSupported() const { return false; } virtual void setCustomFocusPoint(const QPointF &/*point*/) {} @@ -87,7 +87,7 @@ public: virtual void zoomTo(float newZoomFactor, float rate = -1.) = 0; Q_SIGNALS: - void focusModeChanged(QCameraFocus::FocusMode mode); + void focusModeChanged(QCamera::FocusMode mode); void customFocusPointChanged(const QPointF &point); void minimumZoomFactorChanged(float); void maximumZoomFactorChanged(float); diff --git a/src/multimedia/platform/windows/mediacapture/qwindowscamerafocus.cpp b/src/multimedia/platform/windows/mediacapture/qwindowscamerafocus.cpp index 2ecebe031..eecda095e 100644 --- a/src/multimedia/platform/windows/mediacapture/qwindowscamerafocus.cpp +++ b/src/multimedia/platform/windows/mediacapture/qwindowscamerafocus.cpp @@ -50,16 +50,16 @@ QWindowsCameraFocus::QWindowsCameraFocus(QWindowsCameraSession *session) Q_ASSERT(m_session); } -QCameraFocus::FocusMode QWindowsCameraFocus::focusMode() const +QCamera::FocusMode QWindowsCameraFocus::focusMode() const { - return QCameraFocus::AutoFocus; + return QCamera::FocusModeAuto; } -void QWindowsCameraFocus::setFocusMode(QCameraFocus::FocusMode mode) +void QWindowsCameraFocus::setFocusMode(QCamera::FocusMode mode) { } -bool QWindowsCameraFocus::isFocusModeSupported(QCameraFocus::FocusMode mode) const +bool QWindowsCameraFocus::isFocusModeSupported(QCamera::FocusMode mode) const { return false; } diff --git a/src/multimedia/platform/windows/mediacapture/qwindowscamerafocus_p.h b/src/multimedia/platform/windows/mediacapture/qwindowscamerafocus_p.h index 5de905d3e..cb91e21a3 100644 --- a/src/multimedia/platform/windows/mediacapture/qwindowscamerafocus_p.h +++ b/src/multimedia/platform/windows/mediacapture/qwindowscamerafocus_p.h @@ -63,9 +63,9 @@ class QWindowsCameraFocus : public QPlatformCameraFocus public: explicit QWindowsCameraFocus(QWindowsCameraSession *session); - QCameraFocus::FocusMode focusMode() const override; - void setFocusMode(QCameraFocus::FocusMode mode) override; - bool isFocusModeSupported(QCameraFocus::FocusMode mode) const override; + QCamera::FocusMode focusMode() const override; + void setFocusMode(QCamera::FocusMode mode) override; + bool isFocusModeSupported(QCamera::FocusMode mode) const override; bool isCustomFocusPointSupported() const override; QPointF focusPoint() const override; diff --git a/src/multimediaquick/camerafocus.qdoc b/src/multimediaquick/camerafocus.qdoc index ea827ab58..00177ec61 100644 --- a/src/multimediaquick/camerafocus.qdoc +++ b/src/multimediaquick/camerafocus.qdoc @@ -144,7 +144,7 @@ QT_BEGIN_NAMESPACE frame coordinates. For example, QPointF(0,0) pointing to the left top corner of the frame, and QPointF(0.5,0.5) pointing to the center of the frame. - Custom focus point is used only in QCameraFocus::FocusPointCustom focus mode. + Custom focus point is used only in QCamera::FocusPointCustom focus mode. */ /*! diff --git a/src/multimediaquick/qtmultimediaquicktypes_p.h b/src/multimediaquick/qtmultimediaquicktypes_p.h index 4ef94fe64..91f355db0 100644 --- a/src/multimediaquick/qtmultimediaquicktypes_p.h +++ b/src/multimediaquick/qtmultimediaquicktypes_p.h @@ -85,14 +85,6 @@ struct QCameraForeign QML_NAMED_ELEMENT(Camera) }; -struct QCameraFocusForeign -{ - Q_GADGET - QML_FOREIGN(QCameraFocus) - QML_UNCREATABLE("CameraFocus is provided by Camera") - QML_NAMED_ELEMENT(CameraFocus) -}; - struct QCameraImageProcessingForeign { Q_GADGET |