From b3284a1583f5e3d5cef360af279cfbe473245e97 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Tue, 22 Dec 2020 15:58:21 +0100 Subject: Merge QCameraZoomControl into QCameraFocusControl The public API also only uses one class to control both. Change-Id: I55ba5ae168d77d7a05a21f22164aaf0752482020 Reviewed-by: Lars Knoll --- src/multimedia/CMakeLists.txt | 1 - src/multimedia/camera/qcamerafocus.cpp | 53 +++--- src/multimedia/controls/controls.pri | 2 - src/multimedia/controls/qcamerafocuscontrol.cpp | 92 ++++++++++ src/multimedia/controls/qcamerafocuscontrol.h | 18 ++ src/multimedia/controls/qcamerazoomcontrol.cpp | 188 --------------------- src/multimedia/controls/qcamerazoomcontrol.h | 86 ---------- src/plugins/android/src/CMakeLists.txt | 1 - .../android/src/mediacapture/mediacapture.pri | 2 - .../mediacapture/qandroidcamerafocuscontrol.cpp | 74 ++++++++ .../src/mediacapture/qandroidcamerafocuscontrol.h | 13 ++ .../src/mediacapture/qandroidcamerazoomcontrol.cpp | 133 --------------- .../src/mediacapture/qandroidcamerazoomcontrol.h | 78 --------- .../src/mediacapture/qandroidcaptureservice.cpp | 8 - .../src/mediacapture/qandroidcaptureservice.h | 2 - src/plugins/avfoundation/camera/CMakeLists.txt | 1 - .../avfoundation/camera/avfcamerafocuscontrol.h | 20 +++ .../avfoundation/camera/avfcamerafocuscontrol.mm | 116 +++++++++++++ src/plugins/avfoundation/camera/avfcameraservice.h | 3 - .../avfoundation/camera/avfcameraservice.mm | 13 -- .../avfoundation/camera/avfcamerazoomcontrol.h | 85 ---------- .../avfoundation/camera/avfcamerazoomcontrol.mm | 179 -------------------- src/plugins/avfoundation/camera/camera.pro | 5 +- src/plugins/gstreamer/camerabin/camerabin.pro | 2 - src/plugins/gstreamer/camerabin/camerabinfocus.cpp | 91 ++++++++++ src/plugins/gstreamer/camerabin/camerabinfocus.h | 18 ++ .../gstreamer/camerabin/camerabinservice.cpp | 4 - .../gstreamer/camerabin/camerabinsession.cpp | 2 - src/plugins/gstreamer/camerabin/camerabinsession.h | 2 - src/plugins/gstreamer/camerabin/camerabinzoom.cpp | 147 ---------------- src/plugins/gstreamer/camerabin/camerabinzoom.h | 78 --------- src/plugins/qnx/camera/bbcamerafocuscontrol.cpp | 99 +++++++++++ src/plugins/qnx/camera/bbcamerafocuscontrol.h | 16 ++ src/plugins/qnx/camera/bbcameraservice.cpp | 4 - src/plugins/qnx/camera/bbcameraservice.h | 2 - src/plugins/qnx/camera/bbcamerazoomcontrol.cpp | 155 ----------------- src/plugins/qnx/camera/bbcamerazoomcontrol.h | 77 --------- src/plugins/qnx/camera/camera.pri | 2 - tests/auto/unit/qcamera/CMakeLists.txt | 1 - tests/auto/unit/qcameraimagecapture/CMakeLists.txt | 1 - tests/auto/unit/qcamerainfo/CMakeLists.txt | 1 - tests/auto/unit/qcameraviewfinder/CMakeLists.txt | 1 - tests/auto/unit/qcamerawidgets/CMakeLists.txt | 1 - tests/auto/unit/qdeclarativecamera/CMakeLists.txt | 1 - .../qdeclarativemultimediaglobal/CMakeLists.txt | 1 - tests/auto/unit/qmultimedia_common/mockcamera.pri | 1 - .../qmultimedia_common/mockcamerafocuscontrol.h | 69 ++++++++ .../unit/qmultimedia_common/mockcameraservice.h | 6 - .../qmultimedia_common/mockcamerazoomcontrol.h | 121 ------------- 49 files changed, 647 insertions(+), 1429 deletions(-) delete mode 100644 src/multimedia/controls/qcamerazoomcontrol.cpp delete mode 100644 src/multimedia/controls/qcamerazoomcontrol.h delete mode 100644 src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp delete mode 100644 src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h delete mode 100644 src/plugins/avfoundation/camera/avfcamerazoomcontrol.h delete mode 100644 src/plugins/avfoundation/camera/avfcamerazoomcontrol.mm delete mode 100644 src/plugins/gstreamer/camerabin/camerabinzoom.cpp delete mode 100644 src/plugins/gstreamer/camerabin/camerabinzoom.h delete mode 100644 src/plugins/qnx/camera/bbcamerazoomcontrol.cpp delete mode 100644 src/plugins/qnx/camera/bbcamerazoomcontrol.h delete mode 100644 tests/auto/unit/qmultimedia_common/mockcamerazoomcontrol.h diff --git a/src/multimedia/CMakeLists.txt b/src/multimedia/CMakeLists.txt index 84a461d41..b5ecce120 100644 --- a/src/multimedia/CMakeLists.txt +++ b/src/multimedia/CMakeLists.txt @@ -40,7 +40,6 @@ qt_add_module(Multimedia controls/qcameraimageprocessingcontrol.cpp controls/qcameraimageprocessingcontrol.h controls/qcameralockscontrol.cpp controls/qcameralockscontrol.h controls/qcameraviewfindersettingscontrol.cpp controls/qcameraviewfindersettingscontrol.h - controls/qcamerazoomcontrol.cpp controls/qcamerazoomcontrol.h controls/qimageencodercontrol.cpp controls/qimageencodercontrol.h controls/qmediaaudioprobecontrol.cpp controls/qmediaaudioprobecontrol.h controls/qmediacontainercontrol.cpp controls/qmediacontainercontrol.h diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp index ed101768f..3863fb7e4 100644 --- a/src/multimedia/camera/qcamerafocus.cpp +++ b/src/multimedia/camera/qcamerafocus.cpp @@ -44,7 +44,6 @@ #include #include #include -#include #include #include @@ -60,24 +59,6 @@ static void qRegisterCameraFocusMetaTypes() Q_CONSTRUCTOR_FUNCTION(qRegisterCameraFocusMetaTypes) - -class QCameraFocusFakeZoomControl : public QCameraZoomControl -{ -public: - QCameraFocusFakeZoomControl(QObject *parent) : - QCameraZoomControl(parent) {} - - qreal maximumOpticalZoom() const override { return 1.0; } - qreal maximumDigitalZoom() const override { return 1.0; } - - qreal requestedOpticalZoom() const override { return 1.0; } - qreal requestedDigitalZoom() const override { return 1.0; } - qreal currentOpticalZoom() const override { return 1.0; } - qreal currentDigitalZoom() const override { return 1.0; } - - void zoomTo(qreal, qreal) override { qWarning("The camera doesn't support zooming."); } -}; - class QCameraFocusFakeFocusControl : public QCameraFocusControl { public: @@ -95,6 +76,16 @@ public: void setCustomFocusPoint(const QPointF &) override { qWarning("Focus points selection is not supported"); } QCameraFocusZoneList focusZones() const override { return QCameraFocusZoneList(); } + + qreal maximumOpticalZoom() const override { return 1.0; } + qreal maximumDigitalZoom() const override { return 1.0; } + + qreal requestedOpticalZoom() const override { return 1.0; } + qreal requestedDigitalZoom() const override { return 1.0; } + qreal currentOpticalZoom() const override { return 1.0; } + qreal currentDigitalZoom() const override { return 1.0; } + + void zoomTo(qreal, qreal) override { qWarning("The camera doesn't support zooming."); } }; @@ -327,7 +318,6 @@ public: QCamera *camera; QCameraFocusControl *focusControl; - QCameraZoomControl *zoomControl; bool available; }; @@ -337,12 +327,10 @@ void QCameraFocusPrivate::initControls() Q_Q(QCameraFocus); focusControl = nullptr; - zoomControl = nullptr; QMediaService *service = camera->service(); if (service) { focusControl = qobject_cast(service->requestControl(QCameraFocusControl_iid)); - zoomControl = qobject_cast(service->requestControl(QCameraZoomControl_iid)); } available = focusControl != nullptr; @@ -350,18 +338,15 @@ void QCameraFocusPrivate::initControls() if (!focusControl) focusControl = new QCameraFocusFakeFocusControl(q); - if (!zoomControl) - zoomControl = new QCameraFocusFakeZoomControl(q); - q->connect(focusControl, SIGNAL(focusZonesChanged()), q, SIGNAL(focusZonesChanged())); - q->connect(zoomControl, SIGNAL(currentOpticalZoomChanged(qreal)), + q->connect(focusControl, SIGNAL(currentOpticalZoomChanged(qreal)), q, SIGNAL(opticalZoomChanged(qreal))); - q->connect(zoomControl, SIGNAL(currentDigitalZoomChanged(qreal)), + q->connect(focusControl, SIGNAL(currentDigitalZoomChanged(qreal)), q, SIGNAL(digitalZoomChanged(qreal))); - q->connect(zoomControl, SIGNAL(maximumOpticalZoomChanged(qreal)), + q->connect(focusControl, SIGNAL(maximumOpticalZoomChanged(qreal)), q, SIGNAL(maximumOpticalZoomChanged(qreal))); - q->connect(zoomControl, SIGNAL(maximumDigitalZoomChanged(qreal)), + q->connect(focusControl, SIGNAL(maximumDigitalZoomChanged(qreal)), q, SIGNAL(maximumDigitalZoomChanged(qreal))); } @@ -498,7 +483,7 @@ QCameraFocusZoneList QCameraFocus::focusZones() const qreal QCameraFocus::maximumOpticalZoom() const { - return d_func()->zoomControl->maximumOpticalZoom(); + return d_func()->focusControl->maximumOpticalZoom(); } /*! @@ -509,7 +494,7 @@ qreal QCameraFocus::maximumOpticalZoom() const qreal QCameraFocus::maximumDigitalZoom() const { - return d_func()->zoomControl->maximumDigitalZoom(); + return d_func()->focusControl->maximumDigitalZoom(); } /*! @@ -521,7 +506,7 @@ qreal QCameraFocus::maximumDigitalZoom() const qreal QCameraFocus::opticalZoom() const { - return d_func()->zoomControl->currentOpticalZoom(); + return d_func()->focusControl->currentOpticalZoom(); } /*! @@ -532,7 +517,7 @@ qreal QCameraFocus::opticalZoom() const */ qreal QCameraFocus::digitalZoom() const { - return d_func()->zoomControl->currentDigitalZoom(); + return d_func()->focusControl->currentDigitalZoom(); } @@ -545,7 +530,7 @@ qreal QCameraFocus::digitalZoom() const */ void QCameraFocus::zoomTo(qreal optical, qreal digital) { - d_func()->zoomControl->zoomTo(optical, digital); + d_func()->focusControl->zoomTo(optical, digital); } /*! diff --git a/src/multimedia/controls/controls.pri b/src/multimedia/controls/controls.pri index 3c7681178..fb6138280 100644 --- a/src/multimedia/controls/controls.pri +++ b/src/multimedia/controls/controls.pri @@ -10,7 +10,6 @@ PUBLIC_HEADERS += \ controls/qcameracontrol.h \ controls/qcameraexposurecontrol.h \ controls/qcamerafocuscontrol.h \ - controls/qcamerazoomcontrol.h \ controls/qcameraimagecapturecontrol.h \ controls/qcameraimageprocessingcontrol.h \ controls/qcameralockscontrol.h \ @@ -34,7 +33,6 @@ SOURCES += \ controls/qcameracontrol.cpp \ controls/qcameraexposurecontrol.cpp \ controls/qcamerafocuscontrol.cpp \ - controls/qcamerazoomcontrol.cpp \ controls/qcameraimagecapturecontrol.cpp \ controls/qcameraimageprocessingcontrol.cpp \ controls/qcameralockscontrol.cpp \ diff --git a/src/multimedia/controls/qcamerafocuscontrol.cpp b/src/multimedia/controls/qcamerafocuscontrol.cpp index b216882b4..5e4e2debd 100644 --- a/src/multimedia/controls/qcamerafocuscontrol.cpp +++ b/src/multimedia/controls/qcamerafocuscontrol.cpp @@ -191,7 +191,99 @@ QCameraFocusControl::~QCameraFocusControl() \sa QCameraFocusControl::customFocusPoint(), QCameraFocusControl::setCustomFocusPoint() */ +/*! + \fn qreal QCameraFocusControl::maximumOpticalZoom() const + + Returns the maximum optical zoom value, or 1.0 if optical zoom is not supported. +*/ + + +/*! + \fn qreal QCameraFocusControl::maximumDigitalZoom() const + + Returns the maximum digital zoom value, or 1.0 if digital zoom is not supported. +*/ + + +/*! + \fn qreal QCameraFocusControl::requestedOpticalZoom() const + + Return the requested optical zoom value. +*/ + +/*! + \fn qreal QCameraFocusControl::requestedDigitalZoom() const + + Return the requested digital zoom value. +*/ + +/*! + \fn qreal QCameraFocusControl::currentOpticalZoom() const + + Return the current optical zoom value. +*/ + +/*! + \fn qreal QCameraFocusControl::currentDigitalZoom() const + + Return the current digital zoom value. +*/ + +/*! + \fn void QCameraFocusControl::zoomTo(qreal optical, qreal digital) + + Sets \a optical and \a digital zoom values. + + Zooming can be asynchronous with value changes reported with + currentDigitalZoomChanged() and currentOpticalZoomChanged() signals. + The backend should expect and correctly handle frequent zoomTo() calls + during zoom animations or slider movements. +*/ + + +/*! + \fn void QCameraFocusControl::currentOpticalZoomChanged(qreal zoom) + + Signal emitted when the current optical \a zoom value changed. +*/ + +/*! + \fn void QCameraFocusControl::currentDigitalZoomChanged(qreal zoom) + + Signal emitted when the current digital \a zoom value changed. +*/ + +/*! + \fn void QCameraFocusControl::requestedOpticalZoomChanged(qreal zoom) + + Signal emitted when the requested optical \a zoom value changed. +*/ + +/*! + \fn void QCameraFocusControl::requestedDigitalZoomChanged(qreal zoom) + + Signal emitted when the requested digital \a zoom value changed. +*/ + + +/*! + \fn void QCameraFocusControl::maximumOpticalZoomChanged(qreal zoom) + + Signal emitted when the maximum supported optical \a zoom value changed. + + The maximum supported zoom value can depend on other camera settings, + like focusing mode. +*/ + +/*! + \fn void QCameraFocusControl::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 diff --git a/src/multimedia/controls/qcamerafocuscontrol.h b/src/multimedia/controls/qcamerafocuscontrol.h index a93d2fd1e..966157e96 100644 --- a/src/multimedia/controls/qcamerafocuscontrol.h +++ b/src/multimedia/controls/qcamerafocuscontrol.h @@ -69,6 +69,16 @@ public: virtual QCameraFocusZoneList focusZones() const = 0; + virtual qreal maximumOpticalZoom() const = 0; + virtual qreal maximumDigitalZoom() const = 0; + + virtual qreal requestedOpticalZoom() const = 0; + virtual qreal requestedDigitalZoom() const = 0; + virtual qreal currentOpticalZoom() const = 0; + virtual qreal currentDigitalZoom() const = 0; + + virtual void zoomTo(qreal optical, qreal digital) = 0; + Q_SIGNALS: void focusModeChanged(QCameraFocus::FocusModes mode); void focusPointModeChanged(QCameraFocus::FocusPointMode mode); @@ -76,6 +86,14 @@ Q_SIGNALS: void focusZonesChanged(); + void maximumOpticalZoomChanged(qreal); + void maximumDigitalZoomChanged(qreal); + + void requestedOpticalZoomChanged(qreal opticalZoom); + void requestedDigitalZoomChanged(qreal digitalZoom); + void currentOpticalZoomChanged(qreal opticalZoom); + void currentDigitalZoomChanged(qreal digitalZoom); + protected: explicit QCameraFocusControl(QObject *parent = nullptr); }; diff --git a/src/multimedia/controls/qcamerazoomcontrol.cpp b/src/multimedia/controls/qcamerazoomcontrol.cpp deleted file mode 100644 index 1f0835224..000000000 --- a/src/multimedia/controls/qcamerazoomcontrol.cpp +++ /dev/null @@ -1,188 +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 -#include "qmediacontrol_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QCameraZoomControl - \obsolete - - - \brief The QCameraZoomControl class supplies control for - optical and digital camera zoom. - - \inmodule QtMultimedia - - - \ingroup multimedia_control - - The interface name of QCameraZoomControl is \c org.qt-project.qt.camerazoomcontrol/5.0 as - defined in QCameraZoomControl_iid. - - - \sa QMediaService::requestControl(), QCamera -*/ - -/*! - \macro QCameraZoomControl_iid - - \c org.qt-project.qt.camerazoomcontrol/5.0 - - Defines the interface name of the QCameraZoomControl class. - - \relates QCameraZoomControl -*/ - -/*! - Constructs a camera zoom control object with \a parent. -*/ - -QCameraZoomControl::QCameraZoomControl(QObject *parent): - QMediaControl(*new QMediaControlPrivate, parent) -{ -} - -/*! - Destruct the camera zoom control object. -*/ - -QCameraZoomControl::~QCameraZoomControl() -{ -} - -/*! - \fn qreal QCameraZoomControl::maximumOpticalZoom() const - - Returns the maximum optical zoom value, or 1.0 if optical zoom is not supported. -*/ - - -/*! - \fn qreal QCameraZoomControl::maximumDigitalZoom() const - - Returns the maximum digital zoom value, or 1.0 if digital zoom is not supported. -*/ - - -/*! - \fn qreal QCameraZoomControl::requestedOpticalZoom() const - - Return the requested optical zoom value. -*/ - -/*! - \fn qreal QCameraZoomControl::requestedDigitalZoom() const - - Return the requested digital zoom value. -*/ - -/*! - \fn qreal QCameraZoomControl::currentOpticalZoom() const - - Return the current optical zoom value. -*/ - -/*! - \fn qreal QCameraZoomControl::currentDigitalZoom() const - - Return the current digital zoom value. -*/ - -/*! - \fn void QCameraZoomControl::zoomTo(qreal optical, qreal digital) - - Sets \a optical and \a digital zoom values. - - Zooming can be asynchronous with value changes reported with - currentDigitalZoomChanged() and currentOpticalZoomChanged() signals. - - The backend should expect and correctly handle frequent zoomTo() calls - during zoom animations or slider movements. -*/ - - -/*! - \fn void QCameraZoomControl::currentOpticalZoomChanged(qreal zoom) - - Signal emitted when the current optical \a zoom value changed. -*/ - -/*! - \fn void QCameraZoomControl::currentDigitalZoomChanged(qreal zoom) - - Signal emitted when the current digital \a zoom value changed. -*/ - -/*! - \fn void QCameraZoomControl::requestedOpticalZoomChanged(qreal zoom) - - Signal emitted when the requested optical \a zoom value changed. -*/ - -/*! - \fn void QCameraZoomControl::requestedDigitalZoomChanged(qreal zoom) - - Signal emitted when the requested digital \a zoom value changed. -*/ - - -/*! - \fn void QCameraZoomControl::maximumOpticalZoomChanged(qreal zoom) - - Signal emitted when the maximum supported optical \a zoom value changed. - - The maximum supported zoom value can depend on other camera settings, - like focusing mode. -*/ - -/*! - \fn void QCameraZoomControl::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_qcamerazoomcontrol.cpp" diff --git a/src/multimedia/controls/qcamerazoomcontrol.h b/src/multimedia/controls/qcamerazoomcontrol.h deleted file mode 100644 index feca6a362..000000000 --- a/src/multimedia/controls/qcamerazoomcontrol.h +++ /dev/null @@ -1,86 +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 QCAMERAZOOMCONTROL_H -#define QCAMERAZOOMCONTROL_H - -#include -#include - -QT_BEGIN_NAMESPACE - -// Required for QDoc workaround -class QString; - -class Q_MULTIMEDIA_EXPORT QCameraZoomControl : public QMediaControl -{ - Q_OBJECT - -public: - ~QCameraZoomControl(); - - virtual qreal maximumOpticalZoom() const = 0; - virtual qreal maximumDigitalZoom() const = 0; - - virtual qreal requestedOpticalZoom() const = 0; - virtual qreal requestedDigitalZoom() const = 0; - virtual qreal currentOpticalZoom() const = 0; - virtual qreal currentDigitalZoom() const = 0; - - virtual void zoomTo(qreal optical, qreal digital) = 0; - -Q_SIGNALS: - void maximumOpticalZoomChanged(qreal); - void maximumDigitalZoomChanged(qreal); - - void requestedOpticalZoomChanged(qreal opticalZoom); - void requestedDigitalZoomChanged(qreal digitalZoom); - void currentOpticalZoomChanged(qreal opticalZoom); - void currentDigitalZoomChanged(qreal digitalZoom); - -protected: - explicit QCameraZoomControl(QObject *parent = nullptr); -}; - -#define QCameraZoomControl_iid "org.qt-project.qt.camerazoomcontrol/5.0" -Q_MEDIA_DECLARE_CONTROL(QCameraZoomControl, QCameraZoomControl_iid) - -QT_END_NAMESPACE - -#endif // QCAMERAZOOMCONTROL_H diff --git a/src/plugins/android/src/CMakeLists.txt b/src/plugins/android/src/CMakeLists.txt index b4c9064c2..b799a02c1 100644 --- a/src/plugins/android/src/CMakeLists.txt +++ b/src/plugins/android/src/CMakeLists.txt @@ -22,7 +22,6 @@ qt_internal_add_plugin(QAndroidMediaServicePlugin mediacapture/qandroidcameralockscontrol.cpp mediacapture/qandroidcameralockscontrol.h mediacapture/qandroidcamerasession.cpp mediacapture/qandroidcamerasession.h mediacapture/qandroidcameravideorenderercontrol.cpp mediacapture/qandroidcameravideorenderercontrol.h - mediacapture/qandroidcamerazoomcontrol.cpp mediacapture/qandroidcamerazoomcontrol.h mediacapture/qandroidcaptureservice.cpp mediacapture/qandroidcaptureservice.h mediacapture/qandroidcapturesession.cpp mediacapture/qandroidcapturesession.h mediacapture/qandroidimageencodercontrol.cpp mediacapture/qandroidimageencodercontrol.h diff --git a/src/plugins/android/src/mediacapture/mediacapture.pri b/src/plugins/android/src/mediacapture/mediacapture.pri index f11e0cbce..6c8595a4b 100644 --- a/src/plugins/android/src/mediacapture/mediacapture.pri +++ b/src/plugins/android/src/mediacapture/mediacapture.pri @@ -5,7 +5,6 @@ SOURCES += \ $$PWD/qandroidcameracontrol.cpp \ $$PWD/qandroidvideodeviceselectorcontrol.cpp \ $$PWD/qandroidcamerasession.cpp \ - $$PWD/qandroidcamerazoomcontrol.cpp \ $$PWD/qandroidcameraexposurecontrol.cpp \ $$PWD/qandroidcameraimageprocessingcontrol.cpp \ $$PWD/qandroidimageencodercontrol.cpp \ @@ -28,7 +27,6 @@ HEADERS += \ $$PWD/qandroidcameracontrol.h \ $$PWD/qandroidvideodeviceselectorcontrol.h \ $$PWD/qandroidcamerasession.h \ - $$PWD/qandroidcamerazoomcontrol.h \ $$PWD/qandroidcameraexposurecontrol.h \ $$PWD/qandroidcameraimageprocessingcontrol.h \ $$PWD/qandroidimageencodercontrol.h \ 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 + 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 diff --git a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h index 9c606cf7d..13e560beb 100644 --- a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h @@ -62,6 +62,14 @@ public: void setCustomFocusPoint(const QPointF &point) override; QCameraFocusZoneList focusZones() const override; + qreal maximumOpticalZoom() const override; + qreal maximumDigitalZoom() const override; + qreal requestedOpticalZoom() const override; + qreal requestedDigitalZoom() const override; + qreal currentOpticalZoom() const override; + qreal currentDigitalZoom() const override; + void zoomTo(qreal optical, qreal digital) override; + private Q_SLOTS: void onCameraOpened(); void onViewportSizeChanged(); @@ -102,6 +110,11 @@ private: bool m_continuousVideoFocusSupported; QList m_supportedFocusPointModes; + + qreal m_maximumZoom; + QList m_zoomRatios; + qreal m_requestedZoom; + qreal m_currentZoom; }; QT_END_NAMESPACE diff --git a/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp deleted file mode 100644 index 6f94bdfe7..000000000 --- a/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp +++ /dev/null @@ -1,133 +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 "qandroidcamerazoomcontrol.h" - -#include "qandroidcamerasession.h" -#include "androidcamera.h" -#include "qandroidmultimediautils.h" -#include - -QT_BEGIN_NAMESPACE - -QAndroidCameraZoomControl::QAndroidCameraZoomControl(QAndroidCameraSession *session) - : QCameraZoomControl() - , m_cameraSession(session) - , m_maximumZoom(1.0) - , m_requestedZoom(1.0) - , m_currentZoom(1.0) -{ - connect(m_cameraSession, SIGNAL(opened()), - this, SLOT(onCameraOpened())); -} - -qreal QAndroidCameraZoomControl::maximumOpticalZoom() const -{ - // Optical zoom not supported - return 1.0; -} - -qreal QAndroidCameraZoomControl::maximumDigitalZoom() const -{ - return m_maximumZoom; -} - -qreal QAndroidCameraZoomControl::requestedOpticalZoom() const -{ - // Optical zoom not supported - return 1.0; -} - -qreal QAndroidCameraZoomControl::requestedDigitalZoom() const -{ - return m_requestedZoom; -} - -qreal QAndroidCameraZoomControl::currentOpticalZoom() const -{ - // Optical zoom not supported - return 1.0; -} - -qreal QAndroidCameraZoomControl::currentDigitalZoom() const -{ - return m_currentZoom; -} - -void QAndroidCameraZoomControl::zoomTo(qreal optical, qreal digital) -{ - Q_UNUSED(optical); - - if (!qFuzzyCompare(m_requestedZoom, digital)) { - m_requestedZoom = digital; - emit requestedDigitalZoomChanged(m_requestedZoom); - } - - 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() -{ - if (m_cameraSession->camera()->isZoomSupported()) { - m_zoomRatios = m_cameraSession->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); - } - } -} - -QT_END_NAMESPACE diff --git a/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h b/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h deleted file mode 100644 index 96fc4f77b..000000000 --- a/src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h +++ /dev/null @@ -1,78 +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 QANDROIDCAMERAZOOMCONTROL_H -#define QANDROIDCAMERAZOOMCONTROL_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class QAndroidCameraSession; - -class QAndroidCameraZoomControl : public QCameraZoomControl -{ - Q_OBJECT -public: - explicit QAndroidCameraZoomControl(QAndroidCameraSession *session); - - qreal maximumOpticalZoom() const override; - qreal maximumDigitalZoom() const override; - qreal requestedOpticalZoom() const override; - qreal requestedDigitalZoom() const override; - qreal currentOpticalZoom() const override; - qreal currentDigitalZoom() const override; - void zoomTo(qreal optical, qreal digital) override; - -private Q_SLOTS: - void onCameraOpened(); - -private: - QAndroidCameraSession *m_cameraSession; - - qreal m_maximumZoom; - QList m_zoomRatios; - qreal m_requestedZoom; - qreal m_currentZoom; -}; - -QT_END_NAMESPACE - -#endif // QANDROIDCAMERAZOOMCONTROL_H diff --git a/src/plugins/android/src/mediacapture/qandroidcaptureservice.cpp b/src/plugins/android/src/mediacapture/qandroidcaptureservice.cpp index 6fc14d72f..a666028e7 100644 --- a/src/plugins/android/src/mediacapture/qandroidcaptureservice.cpp +++ b/src/plugins/android/src/mediacapture/qandroidcaptureservice.cpp @@ -47,7 +47,6 @@ #include "qandroidaudioinputselectorcontrol.h" #include "qandroidcamerasession.h" #include "qandroidcameravideorenderercontrol.h" -#include "qandroidcamerazoomcontrol.h" #include "qandroidcameraexposurecontrol.h" #include "qandroidcamerafocuscontrol.h" #include "qandroidviewfindersettingscontrol.h" @@ -74,7 +73,6 @@ QAndroidCaptureService::QAndroidCaptureService(const QString &service, QObject * m_cameraSession = new QAndroidCameraSession; m_cameraControl = new QAndroidCameraControl(m_cameraSession); m_videoInputControl = new QAndroidVideoDeviceSelectorControl(m_cameraSession); - m_cameraZoomControl = new QAndroidCameraZoomControl(m_cameraSession); m_cameraExposureControl = new QAndroidCameraExposureControl(m_cameraSession); m_cameraFocusControl = new QAndroidCameraFocusControl(m_cameraSession); m_viewfinderSettingsControl2 = new QAndroidViewfinderSettingsControl2(m_cameraSession); @@ -88,7 +86,6 @@ QAndroidCaptureService::QAndroidCaptureService(const QString &service, QObject * m_cameraSession = 0; m_cameraControl = 0; m_videoInputControl = 0; - m_cameraZoomControl = 0; m_cameraExposureControl = 0; m_cameraFocusControl = 0; m_viewfinderSettingsControl2 = 0; @@ -124,7 +121,6 @@ QAndroidCaptureService::~QAndroidCaptureService() delete m_audioInputControl; delete m_videoInputControl; delete m_videoRendererControl; - delete m_cameraZoomControl; delete m_cameraExposureControl; delete m_cameraFocusControl; delete m_viewfinderSettingsControl2; @@ -159,9 +155,6 @@ QMediaControl *QAndroidCaptureService::requestControl(const char *name) if (qstrcmp(name, QVideoDeviceSelectorControl_iid) == 0) return m_videoInputControl; - if (qstrcmp(name, QCameraZoomControl_iid) == 0) - return m_cameraZoomControl; - if (qstrcmp(name, QCameraExposureControl_iid) == 0) return m_cameraExposureControl; @@ -185,7 +178,6 @@ QMediaControl *QAndroidCaptureService::requestControl(const char *name) if (qstrcmp(name, QCameraCaptureBufferFormatControl_iid) == 0) return m_captureBufferFormatControl; - if (qstrcmp(name, QVideoRendererControl_iid) == 0 && m_service == QLatin1String(Q_MEDIASERVICE_CAMERA) && !m_videoRendererControl) { diff --git a/src/plugins/android/src/mediacapture/qandroidcaptureservice.h b/src/plugins/android/src/mediacapture/qandroidcaptureservice.h index 40427ced1..88eb5b7a7 100644 --- a/src/plugins/android/src/mediacapture/qandroidcaptureservice.h +++ b/src/plugins/android/src/mediacapture/qandroidcaptureservice.h @@ -53,7 +53,6 @@ class QAndroidVideoDeviceSelectorControl; class QAndroidAudioInputSelectorControl; class QAndroidCameraSession; class QAndroidCameraVideoRendererControl; -class QAndroidCameraZoomControl; class QAndroidCameraExposureControl; class QAndroidCameraFocusControl; class QAndroidViewfinderSettingsControl2; @@ -87,7 +86,6 @@ private: QAndroidAudioInputSelectorControl *m_audioInputControl; QAndroidCameraSession *m_cameraSession; QAndroidCameraVideoRendererControl *m_videoRendererControl; - QAndroidCameraZoomControl *m_cameraZoomControl; QAndroidCameraExposureControl *m_cameraExposureControl; QAndroidCameraFocusControl *m_cameraFocusControl; QAndroidViewfinderSettingsControl2 *m_viewfinderSettingsControl2; diff --git a/src/plugins/avfoundation/camera/CMakeLists.txt b/src/plugins/avfoundation/camera/CMakeLists.txt index dacc61ab0..c6abccbde 100644 --- a/src/plugins/avfoundation/camera/CMakeLists.txt +++ b/src/plugins/avfoundation/camera/CMakeLists.txt @@ -60,7 +60,6 @@ qt_internal_extend_target(AVFServicePlugin CONDITION MACOS qt_internal_extend_target(AVFServicePlugin CONDITION IOS SOURCES - avfcamerazoomcontrol.h avfcamerazoomcontrol.mm avfmediaassetwriter.h avfmediaassetwriter.mm avfmediarecordercontrol_ios.h avfmediarecordercontrol_ios.mm PUBLIC_LIBRARIES diff --git a/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h b/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h index 26135e534..56f4bc54d 100644 --- a/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h +++ b/src/plugins/avfoundation/camera/avfcamerafocuscontrol.h @@ -45,6 +45,8 @@ #include +#include + @class AVCaptureDevice; QT_BEGIN_NAMESPACE @@ -70,18 +72,36 @@ public: QCameraFocusZoneList focusZones() const override; + qreal maximumOpticalZoom() const override; + qreal maximumDigitalZoom() const override; + + qreal requestedOpticalZoom() const override; + qreal requestedDigitalZoom() const override; + qreal currentOpticalZoom() const override; + qreal currentDigitalZoom() const override; + + void zoomTo(qreal optical, qreal digital) override; + private Q_SLOTS: void cameraStateChanged(); private: +#ifdef QOS_IOS + void zoomToRequestedDigital(); +#endif AVFCameraSession *m_session; QCameraFocus::FocusModes m_focusMode; QCameraFocus::FocusPointMode m_focusPointMode; QPointF m_customFocusPoint; QPointF m_actualFocusPoint; + + CGFloat m_maxZoomFactor; + CGFloat m_zoomFactor; + CGFloat m_requestedZoomFactor; }; + QT_END_NAMESPACE #endif // AVFCAMERAFOCUSCONTROL_H diff --git a/src/plugins/avfoundation/camera/avfcamerafocuscontrol.mm b/src/plugins/avfoundation/camera/avfcamerafocuscontrol.mm index 265ccf3fd..19dfa6dd2 100644 --- a/src/plugins/avfoundation/camera/avfcamerafocuscontrol.mm +++ b/src/plugins/avfoundation/camera/avfcamerafocuscontrol.mm @@ -299,7 +299,123 @@ void AVFCameraFocusControl::cameraStateChanged() [captureDevice setFocusMode:avMode]; } } + +#ifdef Q_OS_IOS + const QCamera::State state = m_session->state(); + if (state != QCamera::ActiveState) { + if (state == QCamera::UnloadedState && m_maxZoomFactor > 1.) { + m_maxZoomFactor = 1.; + Q_EMIT maximumDigitalZoomChanged(1.); + } + return; + } + + if (!captureDevice || !captureDevice.activeFormat) { + qDebugCamera() << Q_FUNC_INFO << "camera state is active, but" + << "video capture device and/or active format is nil"; + return; + } + + if (captureDevice.activeFormat.videoMaxZoomFactor > 1.) { + if (!qFuzzyCompare(m_maxZoomFactor, captureDevice.activeFormat.videoMaxZoomFactor)) { + m_maxZoomFactor = captureDevice.activeFormat.videoMaxZoomFactor; + Q_EMIT maximumDigitalZoomChanged(m_maxZoomFactor); + } + } else if (!qFuzzyCompare(m_maxZoomFactor, CGFloat(1.))) { + m_maxZoomFactor = 1.; + + Q_EMIT maximumDigitalZoomChanged(1.); + } + + zoomToRequestedDigital(); +#endif +} + +qreal AVFCameraFocusControl::maximumOpticalZoom() const +{ + // Not supported. + return 1.; +} + +qreal AVFCameraFocusControl::maximumDigitalZoom() const +{ + return m_maxZoomFactor; +} + +qreal AVFCameraFocusControl::requestedOpticalZoom() const +{ + // Not supported. + return 1; +} + +qreal AVFCameraFocusControl::requestedDigitalZoom() const +{ + return m_requestedZoomFactor; +} + +qreal AVFCameraFocusControl::currentOpticalZoom() const +{ + // Not supported. + return 1.; +} + +qreal AVFCameraFocusControl::currentDigitalZoom() const +{ + return m_zoomFactor; +} + +void AVFCameraFocusControl::zoomTo(qreal optical, qreal digital) +{ + Q_UNUSED(optical); + Q_UNUSED(digital); + +#ifdef QOS_IOS + if (qFuzzyCompare(CGFloat(digital), m_requestedZoomFactor)) + return; + + m_requestedZoomFactor = digital; + Q_EMIT requestedDigitalZoomChanged(digital); + + zoomToRequestedDigital(); +#endif +} + +#ifdef QOS_IOS +void AVFCameraFocusControl::zoomToRequestedDigital() +{ + AVCaptureDevice *captureDevice = m_session->videoCaptureDevice(); + if (!captureDevice || !captureDevice.activeFormat) + return; + + if (qFuzzyCompare(captureDevice.activeFormat.videoMaxZoomFactor, CGFloat(1.))) + return; + + const CGFloat clampedZoom = qBound(CGFloat(1.), m_requestedZoomFactor, + captureDevice.activeFormat.videoMaxZoomFactor); + const CGFloat deviceZoom = captureDevice.videoZoomFactor; + if (qFuzzyCompare(clampedZoom, deviceZoom)) { + // Nothing to set, but check if a signal must be emitted: + if (!qFuzzyCompare(m_zoomFactor, deviceZoom)) { + m_zoomFactor = deviceZoom; + Q_EMIT currentDigitalZoomChanged(deviceZoom); + } + return; + } + + const AVFConfigurationLock lock(captureDevice); + if (!lock) { + qDebugCamera() << Q_FUNC_INFO << "failed to lock for configuration"; + return; + } + + captureDevice.videoZoomFactor = clampedZoom; + + if (!qFuzzyCompare(clampedZoom, m_zoomFactor)) { + m_zoomFactor = clampedZoom; + Q_EMIT currentDigitalZoomChanged(clampedZoom); + } } +#endif QT_END_NAMESPACE diff --git a/src/plugins/avfoundation/camera/avfcameraservice.h b/src/plugins/avfoundation/camera/avfcameraservice.h index 8c4ad1173..1e837e62b 100644 --- a/src/plugins/avfoundation/camera/avfcameraservice.h +++ b/src/plugins/avfoundation/camera/avfcameraservice.h @@ -59,7 +59,6 @@ class AVFCameraDeviceControl; class AVFAudioInputSelectorControl; class AVFCameraFocusControl; class AVFCameraExposureControl; -class AVFCameraZoomControl; class AVFCameraViewfinderSettingsControl2; class AVFCameraViewfinderSettingsControl; class AVFImageEncoderControl; @@ -89,7 +88,6 @@ public: AVFImageCaptureControl *imageCaptureControl() const { return m_imageCaptureControl; } AVFCameraFocusControl *cameraFocusControl() const { return m_cameraFocusControl; } AVFCameraExposureControl *cameraExposureControl() const {return m_cameraExposureControl; } - AVFCameraZoomControl *cameraZoomControl() const {return m_cameraZoomControl; } AVFCameraRendererControl *videoOutput() const {return m_videoOutput; } AVFCameraViewfinderSettingsControl2 *viewfinderSettingsControl2() const {return m_viewfinderSettingsControl2; } AVFCameraViewfinderSettingsControl *viewfinderSettingsControl() const {return m_viewfinderSettingsControl; } @@ -109,7 +107,6 @@ private: AVFImageCaptureControl *m_imageCaptureControl; AVFCameraFocusControl *m_cameraFocusControl; AVFCameraExposureControl *m_cameraExposureControl; - AVFCameraZoomControl *m_cameraZoomControl; AVFCameraViewfinderSettingsControl2 *m_viewfinderSettingsControl2; AVFCameraViewfinderSettingsControl *m_viewfinderSettingsControl; AVFImageEncoderControl *m_imageEncoderControl; diff --git a/src/plugins/avfoundation/camera/avfcameraservice.mm b/src/plugins/avfoundation/camera/avfcameraservice.mm index 3084a3915..3f7d51882 100644 --- a/src/plugins/avfoundation/camera/avfcameraservice.mm +++ b/src/plugins/avfoundation/camera/avfcameraservice.mm @@ -62,7 +62,6 @@ #include "avfcamerawindowcontrol.h" #ifdef Q_OS_IOS -#include "avfcamerazoomcontrol.h" #include "avfmediarecordercontrol_ios.h" #endif @@ -96,10 +95,6 @@ AVFCameraService::AVFCameraService(QObject *parent): m_cameraExposureControl = new AVFCameraExposureControl(this); #endif - m_cameraZoomControl = nullptr; -#ifdef Q_OS_IOS - m_cameraZoomControl = new AVFCameraZoomControl(this); -#endif m_viewfinderSettingsControl2 = new AVFCameraViewfinderSettingsControl2(this); m_viewfinderSettingsControl = new AVFCameraViewfinderSettingsControl(this); m_imageEncoderControl = new AVFImageEncoderControl(this); @@ -136,9 +131,6 @@ AVFCameraService::~AVFCameraService() delete m_cameraControl; delete m_cameraFocusControl; delete m_cameraExposureControl; -#ifdef Q_OS_IOS - delete m_cameraZoomControl; -#endif delete m_viewfinderSettingsControl2; delete m_viewfinderSettingsControl; delete m_imageEncoderControl; @@ -201,11 +193,6 @@ QMediaControl *AVFCameraService::requestControl(const char *name) return videoProbe; } -#ifdef Q_OS_IOS - if (qstrcmp(name, QCameraZoomControl_iid) == 0) - return m_cameraZoomControl; -#endif - if (!m_captureWindowControl) { if (qstrcmp(name, QVideoWindowControl_iid) == 0) { m_captureWindowControl = new AVFCameraWindowControl(this); diff --git a/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h b/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h deleted file mode 100644 index 2307dfc28..000000000 --- a/src/plugins/avfoundation/camera/avfcamerazoomcontrol.h +++ /dev/null @@ -1,85 +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 AVFCAMERAZOOMCONTROL_H -#define AVFCAMERAZOOMCONTROL_H - -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -class AVFCameraService; -class AVFCameraSession; -class AVFCameraControl; - -class AVFCameraZoomControl : public QCameraZoomControl -{ - Q_OBJECT -public: - AVFCameraZoomControl(AVFCameraService *service); - - qreal maximumOpticalZoom() const override; - qreal maximumDigitalZoom() const override; - - qreal requestedOpticalZoom() const override; - qreal requestedDigitalZoom() const override; - qreal currentOpticalZoom() const override; - qreal currentDigitalZoom() const override; - - void zoomTo(qreal optical, qreal digital) override; - -private Q_SLOTS: - void cameraStateChanged(); - -private: - void zoomToRequestedDigital(); - - AVFCameraSession *m_session; - - CGFloat m_maxZoomFactor; - CGFloat m_zoomFactor; - CGFloat m_requestedZoomFactor; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/avfoundation/camera/avfcamerazoomcontrol.mm b/src/plugins/avfoundation/camera/avfcamerazoomcontrol.mm deleted file mode 100644 index 119a1fc0a..000000000 --- a/src/plugins/avfoundation/camera/avfcamerazoomcontrol.mm +++ /dev/null @@ -1,179 +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 "avfcamerazoomcontrol.h" -#include "avfcameraservice.h" -#include "avfcamerautility.h" -#include "avfcamerasession.h" -#include "avfcameracontrol.h" -#include "avfcameradebug.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -AVFCameraZoomControl::AVFCameraZoomControl(AVFCameraService *service) - : m_session(service->session()), - m_maxZoomFactor(1.), - m_zoomFactor(1.), - m_requestedZoomFactor(1.) -{ - Q_ASSERT(m_session); - connect(m_session, SIGNAL(stateChanged(QCamera::State)), - SLOT(cameraStateChanged())); -} - -qreal AVFCameraZoomControl::maximumOpticalZoom() const -{ - // Not supported. - return 1.; -} - -qreal AVFCameraZoomControl::maximumDigitalZoom() const -{ - return m_maxZoomFactor; -} - -qreal AVFCameraZoomControl::requestedOpticalZoom() const -{ - // Not supported. - return 1; -} - -qreal AVFCameraZoomControl::requestedDigitalZoom() const -{ - return m_requestedZoomFactor; -} - -qreal AVFCameraZoomControl::currentOpticalZoom() const -{ - // Not supported. - return 1.; -} - -qreal AVFCameraZoomControl::currentDigitalZoom() const -{ - return m_zoomFactor; -} - -void AVFCameraZoomControl::zoomTo(qreal optical, qreal digital) -{ - Q_UNUSED(optical); - Q_UNUSED(digital); - - if (qFuzzyCompare(CGFloat(digital), m_requestedZoomFactor)) - return; - - m_requestedZoomFactor = digital; - Q_EMIT requestedDigitalZoomChanged(digital); - - zoomToRequestedDigital(); -} - -void AVFCameraZoomControl::cameraStateChanged() -{ - const QCamera::State state = m_session->state(); - if (state != QCamera::ActiveState) { - if (state == QCamera::UnloadedState && m_maxZoomFactor > 1.) { - m_maxZoomFactor = 1.; - Q_EMIT maximumDigitalZoomChanged(1.); - } - return; - } - - AVCaptureDevice *captureDevice = m_session->videoCaptureDevice(); - if (!captureDevice || !captureDevice.activeFormat) { - qDebugCamera() << Q_FUNC_INFO << "camera state is active, but" - << "video capture device and/or active format is nil"; - return; - } - - if (captureDevice.activeFormat.videoMaxZoomFactor > 1.) { - if (!qFuzzyCompare(m_maxZoomFactor, captureDevice.activeFormat.videoMaxZoomFactor)) { - m_maxZoomFactor = captureDevice.activeFormat.videoMaxZoomFactor; - Q_EMIT maximumDigitalZoomChanged(m_maxZoomFactor); - } - } else if (!qFuzzyCompare(m_maxZoomFactor, CGFloat(1.))) { - m_maxZoomFactor = 1.; - - Q_EMIT maximumDigitalZoomChanged(1.); - } - - zoomToRequestedDigital(); -} - -void AVFCameraZoomControl::zoomToRequestedDigital() -{ - AVCaptureDevice *captureDevice = m_session->videoCaptureDevice(); - if (!captureDevice || !captureDevice.activeFormat) - return; - - if (qFuzzyCompare(captureDevice.activeFormat.videoMaxZoomFactor, CGFloat(1.))) - return; - - const CGFloat clampedZoom = qBound(CGFloat(1.), m_requestedZoomFactor, - captureDevice.activeFormat.videoMaxZoomFactor); - const CGFloat deviceZoom = captureDevice.videoZoomFactor; - if (qFuzzyCompare(clampedZoom, deviceZoom)) { - // Nothing to set, but check if a signal must be emitted: - if (!qFuzzyCompare(m_zoomFactor, deviceZoom)) { - m_zoomFactor = deviceZoom; - Q_EMIT currentDigitalZoomChanged(deviceZoom); - } - return; - } - - const AVFConfigurationLock lock(captureDevice); - if (!lock) { - qDebugCamera() << Q_FUNC_INFO << "failed to lock for configuration"; - return; - } - - captureDevice.videoZoomFactor = clampedZoom; - - if (!qFuzzyCompare(clampedZoom, m_zoomFactor)) { - m_zoomFactor = clampedZoom; - Q_EMIT currentDigitalZoomChanged(clampedZoom); - } -} - -QT_END_NAMESPACE - -#include "moc_avfcamerazoomcontrol.cpp" diff --git a/src/plugins/avfoundation/camera/camera.pro b/src/plugins/avfoundation/camera/camera.pro index a768ee061..ba01b3974 100644 --- a/src/plugins/avfoundation/camera/camera.pro +++ b/src/plugins/avfoundation/camera/camera.pro @@ -74,11 +74,10 @@ OBJECTIVE_SOURCES += avfmediarecordercontrol.mm ios { -HEADERS += avfcamerazoomcontrol.h \ +HEADERS += \ avfmediaassetwriter.h \ avfmediarecordercontrol_ios.h -OBJECTIVE_SOURCES += avfcamerazoomcontrol.mm \ - avfmediaassetwriter.mm \ +OBJECTIVE_SOURCES += avfmediaassetwriter.mm \ avfmediarecordercontrol_ios.mm } diff --git a/src/plugins/gstreamer/camerabin/camerabin.pro b/src/plugins/gstreamer/camerabin/camerabin.pro index 1400315e4..a50914929 100644 --- a/src/plugins/gstreamer/camerabin/camerabin.pro +++ b/src/plugins/gstreamer/camerabin/camerabin.pro @@ -20,7 +20,6 @@ HEADERS += \ $$PWD/camerabinrecorder.h \ $$PWD/camerabincontainer.h \ $$PWD/camerabinimagecapture.h \ - $$PWD/camerabinzoom.h \ $$PWD/camerabinimageprocessing.h \ $$PWD/camerabinmetadata.h \ $$PWD/camerabinvideoencoder.h \ @@ -37,7 +36,6 @@ SOURCES += \ $$PWD/camerabincontainer.cpp \ $$PWD/camerabinimagecapture.cpp \ $$PWD/camerabinimageencoder.cpp \ - $$PWD/camerabinzoom.cpp \ $$PWD/camerabinimageprocessing.cpp \ $$PWD/camerabinmetadata.cpp \ $$PWD/camerabinrecorder.cpp \ diff --git a/src/plugins/gstreamer/camerabin/camerabinfocus.cpp b/src/plugins/gstreamer/camerabin/camerabinfocus.cpp index d60a643f6..f795b0f2f 100644 --- a/src/plugins/gstreamer/camerabin/camerabinfocus.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinfocus.cpp @@ -48,6 +48,9 @@ #include +#define ZOOM_PROPERTY "zoom" +#define MAX_ZOOM_PROPERTY "max-zoom" + //#define CAMERABIN_DEBUG 1 QT_BEGIN_NAMESPACE @@ -70,6 +73,10 @@ CameraBinFocus::CameraBinFocus(CameraBinSession *session) connect(m_session, SIGNAL(statusChanged(QCamera::Status)), this, SLOT(_q_handleCameraStatusChange(QCamera::Status))); + + GstElement *camerabin = m_session->cameraBin(); + g_signal_connect(G_OBJECT(camerabin), "notify::zoom", G_CALLBACK(updateZoom), this); + g_signal_connect(G_OBJECT(camerabin), "notify::max-zoom", G_CALLBACK(updateMaxZoom), this); } CameraBinFocus::~CameraBinFocus() @@ -513,4 +520,88 @@ bool CameraBinFocus::probeBuffer(GstBuffer *buffer) return true; } +qreal CameraBinFocus::maximumOpticalZoom() const +{ + return 1.0; +} + +qreal CameraBinFocus::maximumDigitalZoom() const +{ + gfloat zoomFactor = 1.0; + g_object_get(GST_BIN(m_session->cameraBin()), MAX_ZOOM_PROPERTY, &zoomFactor, NULL); + return zoomFactor; +} + +qreal CameraBinFocus::requestedDigitalZoom() const +{ + return m_requestedDigitalZoom; +} + +qreal CameraBinFocus::requestedOpticalZoom() const +{ + return m_requestedOpticalZoom; +} + +qreal CameraBinFocus::currentOpticalZoom() const +{ + return 1.0; +} + +qreal CameraBinFocus::currentDigitalZoom() const +{ + gfloat zoomFactor = 1.0; + g_object_get(GST_BIN(m_session->cameraBin()), ZOOM_PROPERTY, &zoomFactor, NULL); + return zoomFactor; +} + +void CameraBinFocus::zoomTo(qreal optical, qreal digital) +{ + qreal oldDigitalZoom = currentDigitalZoom(); + + if (m_requestedDigitalZoom != digital) { + m_requestedDigitalZoom = digital; + emit requestedDigitalZoomChanged(digital); + } + + if (m_requestedOpticalZoom != optical) { + m_requestedOpticalZoom = optical; + emit requestedOpticalZoomChanged(optical); + } + + digital = qBound(qreal(1.0), digital, maximumDigitalZoom()); + g_object_set(GST_BIN(m_session->cameraBin()), ZOOM_PROPERTY, digital, NULL); + + qreal newDigitalZoom = currentDigitalZoom(); + if (!qFuzzyCompare(oldDigitalZoom, newDigitalZoom)) + emit currentDigitalZoomChanged(digital); +} + +void CameraBinFocus::updateZoom(GObject *o, GParamSpec *p, gpointer d) +{ + Q_UNUSED(p); + + gfloat zoomFactor = 1.0; + g_object_get(o, ZOOM_PROPERTY, &zoomFactor, NULL); + + CameraBinFocus *zoom = reinterpret_cast(d); + + QMetaObject::invokeMethod(zoom, "currentDigitalZoomChanged", + Qt::QueuedConnection, + Q_ARG(qreal, zoomFactor)); +} + +void CameraBinFocus::updateMaxZoom(GObject *o, GParamSpec *p, gpointer d) +{ + Q_UNUSED(p); + + gfloat zoomFactor = 1.0; + g_object_get(o, MAX_ZOOM_PROPERTY, &zoomFactor, NULL); + + CameraBinFocus *zoom = reinterpret_cast(d); + + QMetaObject::invokeMethod(zoom, "maximumDigitalZoomChanged", + Qt::QueuedConnection, + Q_ARG(qreal, zoomFactor)); +} + QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/camerabin/camerabinfocus.h b/src/plugins/gstreamer/camerabin/camerabinfocus.h index 40168c183..549b913df 100644 --- a/src/plugins/gstreamer/camerabin/camerabinfocus.h +++ b/src/plugins/gstreamer/camerabin/camerabinfocus.h @@ -78,6 +78,17 @@ public: QCameraFocusZoneList focusZones() const override; + + qreal maximumOpticalZoom() const override; + qreal maximumDigitalZoom() const override; + + qreal requestedOpticalZoom() const override; + qreal requestedDigitalZoom() const override; + qreal currentOpticalZoom() const override; + qreal currentDigitalZoom() const override; + + void zoomTo(qreal optical, qreal digital) override; + void handleFocusMessage(GstMessage*); QCamera::LockStatus focusStatus() const { return m_focusStatus; } @@ -117,6 +128,13 @@ private: QList m_faceFocusRects; QBasicTimer m_faceResetTimer; mutable QMutex m_mutex; + + static void updateZoom(GObject *o, GParamSpec *p, gpointer d); + static void updateMaxZoom(GObject *o, GParamSpec *p, gpointer d); + + qreal m_requestedOpticalZoom = 1.; + qreal m_requestedDigitalZoom = 1.; + }; QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/camerabin/camerabinservice.cpp b/src/plugins/gstreamer/camerabin/camerabinservice.cpp index 63ce5f940..fde52d2ad 100644 --- a/src/plugins/gstreamer/camerabin/camerabinservice.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinservice.cpp @@ -59,7 +59,6 @@ #include "camerabincapturebufferformat.h" #include "camerabinviewfindersettings.h" #include "camerabinviewfindersettings2.h" -#include "camerabinzoom.h" #include #include @@ -209,9 +208,6 @@ QMediaControl *CameraBinService::requestControl(const char *name) return m_captureSession->cameraLocksControl(); #endif - if (qstrcmp(name, QCameraZoomControl_iid) == 0) - return m_captureSession->cameraZoomControl(); - if (qstrcmp(name, QCameraImageProcessingControl_iid) == 0) return m_captureSession->imageProcessingControl(); diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp index 8fd0d3fba..df26afbdd 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp @@ -52,7 +52,6 @@ #include "camerabinlocks.h" #endif -#include "camerabinzoom.h" #include "camerabinimageprocessing.h" #include "camerabinviewfindersettings.h" @@ -170,7 +169,6 @@ CameraBinSession::CameraBinSession(GstElementFactory *sourceFactory, QObject *pa m_imageEncodeControl = new CameraBinImageEncoder(this); m_recorderControl = new CameraBinRecorder(this); m_mediaContainerControl = new CameraBinContainer(this); - m_cameraZoomControl = new CameraBinZoom(this); m_imageProcessingControl = new CameraBinImageProcessing(this); m_captureBufferFormatControl = new CameraBinCaptureBufferFormat(this); diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.h b/src/plugins/gstreamer/camerabin/camerabinsession.h index c1c0e5d52..39f71c7e9 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.h +++ b/src/plugins/gstreamer/camerabin/camerabinsession.h @@ -124,7 +124,6 @@ public: CameraBinLocks *cameraLocksControl(); #endif - CameraBinZoom *cameraZoomControl() const { return m_cameraZoomControl; } CameraBinImageProcessing *imageProcessingControl() const { return m_imageProcessingControl; } CameraBinCaptureBufferFormat *captureBufferFormatControl() const { return m_captureBufferFormatControl; } @@ -241,7 +240,6 @@ private: CameraBinFocus *m_cameraFocusControl; CameraBinLocks *m_cameraLocksControl; #endif - CameraBinZoom *m_cameraZoomControl; CameraBinImageProcessing *m_imageProcessingControl; CameraBinCaptureBufferFormat *m_captureBufferFormatControl; diff --git a/src/plugins/gstreamer/camerabin/camerabinzoom.cpp b/src/plugins/gstreamer/camerabin/camerabinzoom.cpp deleted file mode 100644 index 401e13207..000000000 --- a/src/plugins/gstreamer/camerabin/camerabinzoom.cpp +++ /dev/null @@ -1,147 +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 "camerabinzoom.h" -#include "camerabinsession.h" - -#define ZOOM_PROPERTY "zoom" -#define MAX_ZOOM_PROPERTY "max-zoom" - -QT_BEGIN_NAMESPACE - -CameraBinZoom::CameraBinZoom(CameraBinSession *session) - : QCameraZoomControl(session) - , m_session(session) - , m_requestedOpticalZoom(1.0) - , m_requestedDigitalZoom(1.0) -{ - GstElement *camerabin = m_session->cameraBin(); - g_signal_connect(G_OBJECT(camerabin), "notify::zoom", G_CALLBACK(updateZoom), this); - g_signal_connect(G_OBJECT(camerabin), "notify::max-zoom", G_CALLBACK(updateMaxZoom), this); -} - -CameraBinZoom::~CameraBinZoom() -{ -} - -qreal CameraBinZoom::maximumOpticalZoom() const -{ - return 1.0; -} - -qreal CameraBinZoom::maximumDigitalZoom() const -{ - gfloat zoomFactor = 1.0; - g_object_get(GST_BIN(m_session->cameraBin()), MAX_ZOOM_PROPERTY, &zoomFactor, NULL); - return zoomFactor; -} - -qreal CameraBinZoom::requestedDigitalZoom() const -{ - return m_requestedDigitalZoom; -} - -qreal CameraBinZoom::requestedOpticalZoom() const -{ - return m_requestedOpticalZoom; -} - -qreal CameraBinZoom::currentOpticalZoom() const -{ - return 1.0; -} - -qreal CameraBinZoom::currentDigitalZoom() const -{ - gfloat zoomFactor = 1.0; - g_object_get(GST_BIN(m_session->cameraBin()), ZOOM_PROPERTY, &zoomFactor, NULL); - return zoomFactor; -} - -void CameraBinZoom::zoomTo(qreal optical, qreal digital) -{ - qreal oldDigitalZoom = currentDigitalZoom(); - - if (m_requestedDigitalZoom != digital) { - m_requestedDigitalZoom = digital; - emit requestedDigitalZoomChanged(digital); - } - - if (m_requestedOpticalZoom != optical) { - m_requestedOpticalZoom = optical; - emit requestedOpticalZoomChanged(optical); - } - - digital = qBound(qreal(1.0), digital, maximumDigitalZoom()); - g_object_set(GST_BIN(m_session->cameraBin()), ZOOM_PROPERTY, digital, NULL); - - qreal newDigitalZoom = currentDigitalZoom(); - if (!qFuzzyCompare(oldDigitalZoom, newDigitalZoom)) - emit currentDigitalZoomChanged(digital); -} - -void CameraBinZoom::updateZoom(GObject *o, GParamSpec *p, gpointer d) -{ - Q_UNUSED(p); - - gfloat zoomFactor = 1.0; - g_object_get(o, ZOOM_PROPERTY, &zoomFactor, NULL); - - CameraBinZoom *zoom = reinterpret_cast(d); - - QMetaObject::invokeMethod(zoom, "currentDigitalZoomChanged", - Qt::QueuedConnection, - Q_ARG(qreal, zoomFactor)); -} - -void CameraBinZoom::updateMaxZoom(GObject *o, GParamSpec *p, gpointer d) -{ - Q_UNUSED(p); - - gfloat zoomFactor = 1.0; - g_object_get(o, MAX_ZOOM_PROPERTY, &zoomFactor, NULL); - - CameraBinZoom *zoom = reinterpret_cast(d); - - QMetaObject::invokeMethod(zoom, "maximumDigitalZoomChanged", - Qt::QueuedConnection, - Q_ARG(qreal, zoomFactor)); -} - -QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/camerabin/camerabinzoom.h b/src/plugins/gstreamer/camerabin/camerabinzoom.h deleted file mode 100644 index 858ada2da..000000000 --- a/src/plugins/gstreamer/camerabin/camerabinzoom.h +++ /dev/null @@ -1,78 +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 CAMERABINZOOMCONTROL_H -#define CAMERABINZOOMCONTROL_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class CameraBinSession; - -class CameraBinZoom : public QCameraZoomControl -{ - Q_OBJECT -public: - CameraBinZoom(CameraBinSession *session); - virtual ~CameraBinZoom(); - - qreal maximumOpticalZoom() const override; - qreal maximumDigitalZoom() const override; - - qreal requestedOpticalZoom() const override; - qreal requestedDigitalZoom() const override; - qreal currentOpticalZoom() const override; - qreal currentDigitalZoom() const override; - - void zoomTo(qreal optical, qreal digital) override; - -private: - static void updateZoom(GObject *o, GParamSpec *p, gpointer d); - static void updateMaxZoom(GObject *o, GParamSpec *p, gpointer d); - - CameraBinSession *m_session; - qreal m_requestedOpticalZoom; - qreal m_requestedDigitalZoom; -}; - -QT_END_NAMESPACE - -#endif // CAMERABINZOOMCONTROL_H diff --git a/src/plugins/qnx/camera/bbcamerafocuscontrol.cpp b/src/plugins/qnx/camera/bbcamerafocuscontrol.cpp index a815882d2..8db39a7dd 100644 --- a/src/plugins/qnx/camera/bbcamerafocuscontrol.cpp +++ b/src/plugins/qnx/camera/bbcamerafocuscontrol.cpp @@ -51,6 +51,7 @@ BbCameraFocusControl::BbCameraFocusControl(BbCameraSession *session, QObject *pa , m_focusPointMode(QCameraFocus::FocusPointAuto) , m_customFocusPoint(QPointF(0, 0)) { + connect(m_session, SIGNAL(statusChanged(QCamera::Status)), this, SLOT(statusChanged(QCamera::Status))); } QCameraFocus::FocusModes BbCameraFocusControl::focusMode() const @@ -326,4 +327,102 @@ bool BbCameraFocusControl::retrieveViewfinderSize(int *width, int *height) return true; } + +qreal BbCameraFocusControl::maximumOpticalZoom() const +{ + //TODO: optical zoom support not available in BB10 API yet + return 1.0; +} + +qreal BbCameraFocusControl::maximumDigitalZoom() const +{ + return m_maximumZoomFactor; +} + +qreal BbCameraFocusControl::requestedOpticalZoom() const +{ + //TODO: optical zoom support not available in BB10 API yet + return 1.0; +} + +qreal BbCameraFocusControl::requestedDigitalZoom() const +{ + return currentDigitalZoom(); +} + +qreal BbCameraFocusControl::currentOpticalZoom() const +{ + //TODO: optical zoom support not available in BB10 API yet + return 1.0; +} + +qreal BbCameraFocusControl::currentDigitalZoom() const +{ + if (m_session->status() != QCamera::ActiveStatus) + return 1.0; + + unsigned int zoomFactor = 0; + camera_error_t result = CAMERA_EOK; + + if (m_session->captureMode() & QCamera::CaptureStillImage) + result = camera_get_photovf_property(m_session->handle(), CAMERA_IMGPROP_ZOOMFACTOR, &zoomFactor); + else if (m_session->captureMode() & QCamera::CaptureVideo) + result = camera_get_videovf_property(m_session->handle(), CAMERA_IMGPROP_ZOOMFACTOR, &zoomFactor); + + if (result != CAMERA_EOK) + return 1.0; + + return zoomFactor; +} + +void BbCameraFocusControl::zoomTo(qreal optical, qreal digital) +{ + Q_UNUSED(optical); + + if (m_session->status() != QCamera::ActiveStatus) + return; + + const qreal actualZoom = qBound(m_minimumZoomFactor, digital, m_maximumZoomFactor); + + const camera_error_t result = camera_set_zoom(m_session->handle(), actualZoom, false); + + if (result != CAMERA_EOK) { + qWarning() << "Unable to change zoom factor:" << result; + return; + } + + if (m_requestedZoomFactor != digital) { + m_requestedZoomFactor = digital; + emit requestedDigitalZoomChanged(m_requestedZoomFactor); + } + + emit currentDigitalZoomChanged(actualZoom); +} + +void BbCameraFocusControl::statusChanged(QCamera::Status status) +{ + if (status == QCamera::ActiveStatus) { + // retrieve information about zoom limits + unsigned int maximumZoomLimit = 0; + unsigned int minimumZoomLimit = 0; + bool smoothZoom = false; + + const camera_error_t result = camera_get_zoom_limits(m_session->handle(), &maximumZoomLimit, &minimumZoomLimit, &smoothZoom); + if (result == CAMERA_EOK) { + const qreal oldMaximumZoomFactor = m_maximumZoomFactor; + m_maximumZoomFactor = maximumZoomLimit; + + if (oldMaximumZoomFactor != m_maximumZoomFactor) + emit maximumDigitalZoomChanged(m_maximumZoomFactor); + + m_minimumZoomFactor = minimumZoomLimit; + m_supportsSmoothZoom = smoothZoom; + } else { + m_maximumZoomFactor = 1.0; + m_minimumZoomFactor = 1.0; + m_supportsSmoothZoom = false; + } + } +} + QT_END_NAMESPACE diff --git a/src/plugins/qnx/camera/bbcamerafocuscontrol.h b/src/plugins/qnx/camera/bbcamerafocuscontrol.h index bf11ea03e..1434b778d 100644 --- a/src/plugins/qnx/camera/bbcamerafocuscontrol.h +++ b/src/plugins/qnx/camera/bbcamerafocuscontrol.h @@ -61,6 +61,17 @@ public: void setCustomFocusPoint(const QPointF &point) override; QCameraFocusZoneList focusZones() const override; + qreal maximumOpticalZoom() const override; + qreal maximumDigitalZoom() const override; + qreal requestedOpticalZoom() const override; + qreal requestedDigitalZoom() const override; + qreal currentOpticalZoom() const override; + qreal currentDigitalZoom() const override; + void zoomTo(qreal optical, qreal digital) override; + +private Q_SLOTS: + void statusChanged(QCamera::Status status); + private: void updateCustomFocusRegion(); bool retrieveViewfinderSize(int *width, int *height); @@ -70,6 +81,11 @@ private: QCameraFocus::FocusModes m_focusMode; QCameraFocus::FocusPointMode m_focusPointMode; QPointF m_customFocusPoint; + + qreal m_minimumZoomFactor; + qreal m_maximumZoomFactor; + bool m_supportsSmoothZoom; + qreal m_requestedZoomFactor; }; QT_END_NAMESPACE diff --git a/src/plugins/qnx/camera/bbcameraservice.cpp b/src/plugins/qnx/camera/bbcameraservice.cpp index 5c0d7602c..ed18d694c 100644 --- a/src/plugins/qnx/camera/bbcameraservice.cpp +++ b/src/plugins/qnx/camera/bbcameraservice.cpp @@ -50,7 +50,6 @@ #include "bbcamerasession.h" #include "bbcameravideoencodersettingscontrol.h" #include "bbcameraviewfindersettingscontrol.h" -#include "bbcamerazoomcontrol.h" #include "bbimageencodercontrol.h" #include "bbvideodeviceselectorcontrol.h" #include "bbvideorenderercontrol.h" @@ -74,7 +73,6 @@ BbCameraService::BbCameraService(QObject *parent) , m_cameraMediaRecorderControl(new BbCameraMediaRecorderControl(m_cameraSession, this)) , m_cameraVideoEncoderSettingsControl(new BbCameraVideoEncoderSettingsControl(m_cameraSession, this)) , m_cameraViewfinderSettingsControl(new BbCameraViewfinderSettingsControl(m_cameraSession, this)) - , m_cameraZoomControl(new BbCameraZoomControl(m_cameraSession, this)) , m_imageEncoderControl(new BbImageEncoderControl(m_cameraSession, this)) , m_videoDeviceSelectorControl(new BbVideoDeviceSelectorControl(m_cameraSession, this)) , m_videoRendererControl(new BbVideoRendererControl(m_cameraSession, this)) @@ -109,8 +107,6 @@ QMediaControl* BbCameraService::requestControl(const char *name) return m_cameraVideoEncoderSettingsControl; else if (qstrcmp(name, QCameraViewfinderSettingsControl_iid) == 0) return m_cameraViewfinderSettingsControl; - else if (qstrcmp(name, QCameraZoomControl_iid) == 0) - return m_cameraZoomControl; else if (qstrcmp(name, QImageEncoderControl_iid) == 0) return m_imageEncoderControl; else if (qstrcmp(name, QVideoDeviceSelectorControl_iid) == 0) diff --git a/src/plugins/qnx/camera/bbcameraservice.h b/src/plugins/qnx/camera/bbcameraservice.h index 227a69843..005ed0bfe 100644 --- a/src/plugins/qnx/camera/bbcameraservice.h +++ b/src/plugins/qnx/camera/bbcameraservice.h @@ -57,7 +57,6 @@ class BbCameraMediaRecorderControl; class BbCameraSession; class BbCameraVideoEncoderSettingsControl; class BbCameraViewfinderSettingsControl; -class BbCameraZoomControl; class BbImageEncoderControl; class BbVideoDeviceSelectorControl; class BbVideoRendererControl; @@ -87,7 +86,6 @@ private: BbCameraMediaRecorderControl* m_cameraMediaRecorderControl; BbCameraVideoEncoderSettingsControl* m_cameraVideoEncoderSettingsControl; BbCameraViewfinderSettingsControl* m_cameraViewfinderSettingsControl; - BbCameraZoomControl* m_cameraZoomControl; BbImageEncoderControl* m_imageEncoderControl; BbVideoDeviceSelectorControl* m_videoDeviceSelectorControl; BbVideoRendererControl* m_videoRendererControl; diff --git a/src/plugins/qnx/camera/bbcamerazoomcontrol.cpp b/src/plugins/qnx/camera/bbcamerazoomcontrol.cpp deleted file mode 100644 index 21f328b4f..000000000 --- a/src/plugins/qnx/camera/bbcamerazoomcontrol.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Research In Motion -** 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 "bbcamerazoomcontrol.h" - -#include "bbcamerasession.h" - -#include - -QT_BEGIN_NAMESPACE - -BbCameraZoomControl::BbCameraZoomControl(BbCameraSession *session, QObject *parent) - : QCameraZoomControl(parent) - , m_session(session) - , m_minimumZoomFactor(1.0) - , m_maximumZoomFactor(1.0) - , m_supportsSmoothZoom(false) - , m_requestedZoomFactor(1.0) -{ - connect(m_session, SIGNAL(statusChanged(QCamera::Status)), this, SLOT(statusChanged(QCamera::Status))); -} - -qreal BbCameraZoomControl::maximumOpticalZoom() const -{ - //TODO: optical zoom support not available in BB10 API yet - return 1.0; -} - -qreal BbCameraZoomControl::maximumDigitalZoom() const -{ - return m_maximumZoomFactor; -} - -qreal BbCameraZoomControl::requestedOpticalZoom() const -{ - //TODO: optical zoom support not available in BB10 API yet - return 1.0; -} - -qreal BbCameraZoomControl::requestedDigitalZoom() const -{ - return currentDigitalZoom(); -} - -qreal BbCameraZoomControl::currentOpticalZoom() const -{ - //TODO: optical zoom support not available in BB10 API yet - return 1.0; -} - -qreal BbCameraZoomControl::currentDigitalZoom() const -{ - if (m_session->status() != QCamera::ActiveStatus) - return 1.0; - - unsigned int zoomFactor = 0; - camera_error_t result = CAMERA_EOK; - - if (m_session->captureMode() & QCamera::CaptureStillImage) - result = camera_get_photovf_property(m_session->handle(), CAMERA_IMGPROP_ZOOMFACTOR, &zoomFactor); - else if (m_session->captureMode() & QCamera::CaptureVideo) - result = camera_get_videovf_property(m_session->handle(), CAMERA_IMGPROP_ZOOMFACTOR, &zoomFactor); - - if (result != CAMERA_EOK) - return 1.0; - - return zoomFactor; -} - -void BbCameraZoomControl::zoomTo(qreal optical, qreal digital) -{ - Q_UNUSED(optical); - - if (m_session->status() != QCamera::ActiveStatus) - return; - - const qreal actualZoom = qBound(m_minimumZoomFactor, digital, m_maximumZoomFactor); - - const camera_error_t result = camera_set_zoom(m_session->handle(), actualZoom, false); - - if (result != CAMERA_EOK) { - qWarning() << "Unable to change zoom factor:" << result; - return; - } - - if (m_requestedZoomFactor != digital) { - m_requestedZoomFactor = digital; - emit requestedDigitalZoomChanged(m_requestedZoomFactor); - } - - emit currentDigitalZoomChanged(actualZoom); -} - -void BbCameraZoomControl::statusChanged(QCamera::Status status) -{ - if (status == QCamera::ActiveStatus) { - // retrieve information about zoom limits - unsigned int maximumZoomLimit = 0; - unsigned int minimumZoomLimit = 0; - bool smoothZoom = false; - - const camera_error_t result = camera_get_zoom_limits(m_session->handle(), &maximumZoomLimit, &minimumZoomLimit, &smoothZoom); - if (result == CAMERA_EOK) { - const qreal oldMaximumZoomFactor = m_maximumZoomFactor; - m_maximumZoomFactor = maximumZoomLimit; - - if (oldMaximumZoomFactor != m_maximumZoomFactor) - emit maximumDigitalZoomChanged(m_maximumZoomFactor); - - m_minimumZoomFactor = minimumZoomLimit; - m_supportsSmoothZoom = smoothZoom; - } else { - m_maximumZoomFactor = 1.0; - m_minimumZoomFactor = 1.0; - m_supportsSmoothZoom = false; - } - } -} - -QT_END_NAMESPACE diff --git a/src/plugins/qnx/camera/bbcamerazoomcontrol.h b/src/plugins/qnx/camera/bbcamerazoomcontrol.h deleted file mode 100644 index 7b5e06f8d..000000000 --- a/src/plugins/qnx/camera/bbcamerazoomcontrol.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Research In Motion -** 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 BBCAMERAZOOMCONTROL_H -#define BBCAMERAZOOMCONTROL_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class BbCameraSession; - -class BbCameraZoomControl : public QCameraZoomControl -{ - Q_OBJECT -public: - explicit BbCameraZoomControl(BbCameraSession *session, QObject *parent = 0); - - qreal maximumOpticalZoom() const override; - qreal maximumDigitalZoom() const override; - qreal requestedOpticalZoom() const override; - qreal requestedDigitalZoom() const override; - qreal currentOpticalZoom() const override; - qreal currentDigitalZoom() const override; - void zoomTo(qreal optical, qreal digital) override; - -private Q_SLOTS: - void statusChanged(QCamera::Status status); - -private: - BbCameraSession *m_session; - - qreal m_minimumZoomFactor; - qreal m_maximumZoomFactor; - bool m_supportsSmoothZoom; - qreal m_requestedZoomFactor; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/qnx/camera/camera.pri b/src/plugins/qnx/camera/camera.pri index b6214c75c..18c61352d 100644 --- a/src/plugins/qnx/camera/camera.pri +++ b/src/plugins/qnx/camera/camera.pri @@ -15,7 +15,6 @@ HEADERS += \ $$PWD/bbcamerasession.h \ $$PWD/bbcameravideoencodersettingscontrol.h \ $$PWD/bbcameraviewfindersettingscontrol.h \ - $$PWD/bbcamerazoomcontrol.h \ $$PWD/bbimageencodercontrol.h \ $$PWD/bbmediastoragelocation.h \ $$PWD/bbvideodeviceselectorcontrol.h \ @@ -36,7 +35,6 @@ SOURCES += \ $$PWD/bbcamerasession.cpp \ $$PWD/bbcameravideoencodersettingscontrol.cpp \ $$PWD/bbcameraviewfindersettingscontrol.cpp \ - $$PWD/bbcamerazoomcontrol.cpp \ $$PWD/bbimageencodercontrol.cpp \ $$PWD/bbmediastoragelocation.cpp \ $$PWD/bbvideodeviceselectorcontrol.cpp \ diff --git a/tests/auto/unit/qcamera/CMakeLists.txt b/tests/auto/unit/qcamera/CMakeLists.txt index 98f1e683b..c982d7120 100644 --- a/tests/auto/unit/qcamera/CMakeLists.txt +++ b/tests/auto/unit/qcamera/CMakeLists.txt @@ -15,7 +15,6 @@ qt_add_test(tst_qcamera ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h - ../qmultimedia_common/mockcamerazoomcontrol.h ../qmultimedia_common/mockimageencodercontrol.h ../qmultimedia_common/mockmediaobject.h ../qmultimedia_common/mockmediaservice.h diff --git a/tests/auto/unit/qcameraimagecapture/CMakeLists.txt b/tests/auto/unit/qcameraimagecapture/CMakeLists.txt index 80f24144c..5e7643803 100644 --- a/tests/auto/unit/qcameraimagecapture/CMakeLists.txt +++ b/tests/auto/unit/qcameraimagecapture/CMakeLists.txt @@ -15,7 +15,6 @@ qt_add_test(tst_qcameraimagecapture ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h - ../qmultimedia_common/mockcamerazoomcontrol.h ../qmultimedia_common/mockimageencodercontrol.h ../qmultimedia_common/mockmediaobject.h ../qmultimedia_common/mockmediaservice.h diff --git a/tests/auto/unit/qcamerainfo/CMakeLists.txt b/tests/auto/unit/qcamerainfo/CMakeLists.txt index 74d59e8c7..1fed27667 100644 --- a/tests/auto/unit/qcamerainfo/CMakeLists.txt +++ b/tests/auto/unit/qcamerainfo/CMakeLists.txt @@ -15,7 +15,6 @@ qt_add_test(tst_qcamerainfo ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h - ../qmultimedia_common/mockcamerazoomcontrol.h ../qmultimedia_common/mockimageencodercontrol.h ../qmultimedia_common/mockmediaobject.h ../qmultimedia_common/mockmediaservice.h diff --git a/tests/auto/unit/qcameraviewfinder/CMakeLists.txt b/tests/auto/unit/qcameraviewfinder/CMakeLists.txt index c7cc40e28..5f298ce2e 100644 --- a/tests/auto/unit/qcameraviewfinder/CMakeLists.txt +++ b/tests/auto/unit/qcameraviewfinder/CMakeLists.txt @@ -15,7 +15,6 @@ qt_add_test(tst_qcameraviewfinder ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h - ../qmultimedia_common/mockcamerazoomcontrol.h ../qmultimedia_common/mockimageencodercontrol.h ../qmultimedia_common/mockmediaobject.h ../qmultimedia_common/mockmediaservice.h diff --git a/tests/auto/unit/qcamerawidgets/CMakeLists.txt b/tests/auto/unit/qcamerawidgets/CMakeLists.txt index 30739126d..178ea2f9e 100644 --- a/tests/auto/unit/qcamerawidgets/CMakeLists.txt +++ b/tests/auto/unit/qcamerawidgets/CMakeLists.txt @@ -15,7 +15,6 @@ qt_add_test(tst_qcamerawidgets ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h - ../qmultimedia_common/mockcamerazoomcontrol.h ../qmultimedia_common/mockimageencodercontrol.h ../qmultimedia_common/mockmediaobject.h ../qmultimedia_common/mockmediaservice.h diff --git a/tests/auto/unit/qdeclarativecamera/CMakeLists.txt b/tests/auto/unit/qdeclarativecamera/CMakeLists.txt index 1a0098976..3bcc630f6 100644 --- a/tests/auto/unit/qdeclarativecamera/CMakeLists.txt +++ b/tests/auto/unit/qdeclarativecamera/CMakeLists.txt @@ -17,7 +17,6 @@ qt_add_test(tst_qdeclarativecamera ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h - ../qmultimedia_common/mockcamerazoomcontrol.h ../qmultimedia_common/mockimageencodercontrol.h ../qmultimedia_common/mockmediaobject.h ../qmultimedia_common/mockmediaservice.h diff --git a/tests/auto/unit/qdeclarativemultimediaglobal/CMakeLists.txt b/tests/auto/unit/qdeclarativemultimediaglobal/CMakeLists.txt index 00db536b0..75af082e2 100644 --- a/tests/auto/unit/qdeclarativemultimediaglobal/CMakeLists.txt +++ b/tests/auto/unit/qdeclarativemultimediaglobal/CMakeLists.txt @@ -17,7 +17,6 @@ qt_add_test(tst_qdeclarativemultimediaglobal ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h - ../qmultimedia_common/mockcamerazoomcontrol.h ../qmultimedia_common/mockimageencodercontrol.h ../qmultimedia_common/mockmediaobject.h ../qmultimedia_common/mockmediaservice.h diff --git a/tests/auto/unit/qmultimedia_common/mockcamera.pri b/tests/auto/unit/qmultimedia_common/mockcamera.pri index 9222b12a2..edf537eeb 100644 --- a/tests/auto/unit/qmultimedia_common/mockcamera.pri +++ b/tests/auto/unit/qmultimedia_common/mockcamera.pri @@ -8,7 +8,6 @@ HEADERS *= \ ../qmultimedia_common/mockcameraservice.h \ ../qmultimedia_common/mockcameralockscontrol.h \ ../qmultimedia_common/mockcamerafocuscontrol.h \ - ../qmultimedia_common/mockcamerazoomcontrol.h \ ../qmultimedia_common/mockcameraimageprocessingcontrol.h \ ../qmultimedia_common/mockcameraimagecapturecontrol.h \ ../qmultimedia_common/mockcameraexposurecontrol.h \ diff --git a/tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h b/tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h index 579f70f20..508b243d2 100644 --- a/tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h +++ b/tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h @@ -113,12 +113,81 @@ public: } } + qreal maximumOpticalZoom() const + { + return m_maxOpticalZoom; + } + + qreal maximumDigitalZoom() const + { + return m_maxDigitalZoom; + } + + qreal currentOpticalZoom() const + { + return m_opticalZoom; + } + + qreal currentDigitalZoom() const + { + return m_digitalZoom; + } + + qreal requestedOpticalZoom() const + { + return m_opticalZoom; + } + + qreal requestedDigitalZoom() const + { + return m_digitalZoom; + } + + void zoomTo(qreal optical, qreal digital) + { + optical = qBound(1.0, optical, maximumOpticalZoom()); + digital = qBound(1.0, digital, maximumDigitalZoom()); + + if (!qFuzzyCompare(digital, m_digitalZoom)) { + m_digitalZoom = digital; + emit requestedDigitalZoomChanged(m_digitalZoom); + emit currentDigitalZoomChanged(m_digitalZoom); + } + + if (!qFuzzyCompare(optical, m_opticalZoom)) { + m_opticalZoom = optical; + emit requestedOpticalZoomChanged(m_opticalZoom); + emit currentOpticalZoomChanged(m_opticalZoom); + } + + maxOpticalDigitalZoomChange(4.0, 5.0); + } + + // helper function to emit maximum Optical and Digital Zoom Changed signals + void maxOpticalDigitalZoomChange(qreal maxOptical, qreal maxDigital) + { + if (maxOptical != m_maxOpticalZoom) { + m_maxOpticalZoom = maxOptical; + emit maximumOpticalZoomChanged(m_maxOpticalZoom); + } + + if (maxDigital != m_maxDigitalZoom) { + m_maxDigitalZoom = maxDigital; + emit maximumDigitalZoomChanged(m_maxDigitalZoom); + } + } + private: QCameraFocus::FocusModes m_focusMode; QCameraFocus::FocusPointMode m_focusPointMode; QPointF m_focusPoint; // to emit focus zone changed signal QCameraFocusZoneList m_zones; + + qreal m_opticalZoom = 1.; + qreal m_digitalZoom = 1.; + qreal m_maxOpticalZoom = 3.; + qreal m_maxDigitalZoom = 4.; }; #endif // MOCKCAMERAFOCUSCONTROL_H diff --git a/tests/auto/unit/qmultimedia_common/mockcameraservice.h b/tests/auto/unit/qmultimedia_common/mockcameraservice.h index 98ee6c99a..11dcb39f1 100644 --- a/tests/auto/unit/qmultimedia_common/mockcameraservice.h +++ b/tests/auto/unit/qmultimedia_common/mockcameraservice.h @@ -32,7 +32,6 @@ #include "qmediaservice.h" #include "../qmultimedia_common/mockcameralockscontrol.h" #include "../qmultimedia_common/mockcamerafocuscontrol.h" -#include "../qmultimedia_common/mockcamerazoomcontrol.h" #include "../qmultimedia_common/mockcameraimageprocessingcontrol.h" #include "../qmultimedia_common/mockcameraimagecapturecontrol.h" #include "../qmultimedia_common/mockcameraexposurecontrol.h" @@ -83,7 +82,6 @@ public: mockLocksControl = new MockCameraLocksControl(this); mockExposureControl = new MockCameraExposureControl(this); mockFocusControl = new MockCameraFocusControl(this); - mockZoomControl = new MockCameraZoomControl(this); mockCaptureControl = new MockCaptureControl(mockControl, this); mockCaptureBufferControl = new MockCaptureBufferFormatControl(this); mockImageProcessingControl = new MockImageProcessingControl(this); @@ -114,9 +112,6 @@ public: if (qstrcmp(iid, QCameraFocusControl_iid) == 0) return mockFocusControl; - if (qstrcmp(iid, QCameraZoomControl_iid) == 0) - return mockZoomControl; - if (qstrcmp(iid, QCameraImageCaptureControl_iid) == 0) return mockCaptureControl; @@ -166,7 +161,6 @@ public: MockCaptureBufferFormatControl *mockCaptureBufferControl; MockCameraExposureControl *mockExposureControl; MockCameraFocusControl *mockFocusControl; - MockCameraZoomControl *mockZoomControl; MockImageProcessingControl *mockImageProcessingControl; MockImageEncoderControl *mockImageEncoderControl; MockVideoRendererControl *rendererControl; diff --git a/tests/auto/unit/qmultimedia_common/mockcamerazoomcontrol.h b/tests/auto/unit/qmultimedia_common/mockcamerazoomcontrol.h deleted file mode 100644 index 9a56fd2cd..000000000 --- a/tests/auto/unit/qmultimedia_common/mockcamerazoomcontrol.h +++ /dev/null @@ -1,121 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** 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-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef MOCKCAMERAZOOMCONTROL_H -#define MOCKCAMERAZOOMCONTROL_H - -#include "qcamerazoomcontrol.h" - -class MockCameraZoomControl : public QCameraZoomControl -{ - Q_OBJECT -public: - MockCameraZoomControl(QObject *parent = 0): - QCameraZoomControl(parent), - m_opticalZoom(1.0), - m_digitalZoom(1.0), - m_maxOpticalZoom(3.0), - m_maxDigitalZoom(4.0) - - { - } - - ~MockCameraZoomControl() {} - - qreal maximumOpticalZoom() const - { - return m_maxOpticalZoom; - } - - qreal maximumDigitalZoom() const - { - return m_maxDigitalZoom; - } - - qreal currentOpticalZoom() const - { - return m_opticalZoom; - } - - qreal currentDigitalZoom() const - { - return m_digitalZoom; - } - - qreal requestedOpticalZoom() const - { - return m_opticalZoom; - } - - qreal requestedDigitalZoom() const - { - return m_digitalZoom; - } - - void zoomTo(qreal optical, qreal digital) - { - optical = qBound(1.0, optical, maximumOpticalZoom()); - digital = qBound(1.0, digital, maximumDigitalZoom()); - - if (!qFuzzyCompare(digital, m_digitalZoom)) { - m_digitalZoom = digital; - emit requestedDigitalZoomChanged(m_digitalZoom); - emit currentDigitalZoomChanged(m_digitalZoom); - } - - if (!qFuzzyCompare(optical, m_opticalZoom)) { - m_opticalZoom = optical; - emit requestedOpticalZoomChanged(m_opticalZoom); - emit currentOpticalZoomChanged(m_opticalZoom); - } - - maxOpticalDigitalZoomChange(4.0, 5.0); - } - - // helper function to emit maximum Optical and Digital Zoom Changed signals - void maxOpticalDigitalZoomChange(qreal maxOptical, qreal maxDigital) - { - if (maxOptical != m_maxOpticalZoom) { - m_maxOpticalZoom = maxOptical; - emit maximumOpticalZoomChanged(m_maxOpticalZoom); - } - - if (maxDigital != m_maxDigitalZoom) { - m_maxDigitalZoom = maxDigital; - emit maximumDigitalZoomChanged(m_maxDigitalZoom); - } - } - -private: - qreal m_opticalZoom; - qreal m_digitalZoom; - qreal m_maxOpticalZoom; - qreal m_maxDigitalZoom; -}; - -#endif // MOCKCAMERAZOOMCONTROL_H -- cgit v1.2.3