summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-12-22 15:58:21 +0100
committerLars Knoll <lars.knoll@qt.io>2021-01-21 19:55:26 +0000
commitb3284a1583f5e3d5cef360af279cfbe473245e97 (patch)
tree22340dcebf2bf40fa1fca5e04f3182f34dd7ade2
parent652cd926157c8738f896b6e04aac690283f6a8df (diff)
Merge QCameraZoomControl into QCameraFocusControl
The public API also only uses one class to control both. Change-Id: I55ba5ae168d77d7a05a21f22164aaf0752482020 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--src/multimedia/CMakeLists.txt1
-rw-r--r--src/multimedia/camera/qcamerafocus.cpp53
-rw-r--r--src/multimedia/controls/controls.pri2
-rw-r--r--src/multimedia/controls/qcamerafocuscontrol.cpp92
-rw-r--r--src/multimedia/controls/qcamerafocuscontrol.h18
-rw-r--r--src/multimedia/controls/qcamerazoomcontrol.cpp188
-rw-r--r--src/multimedia/controls/qcamerazoomcontrol.h86
-rw-r--r--src/plugins/android/src/CMakeLists.txt1
-rw-r--r--src/plugins/android/src/mediacapture/mediacapture.pri2
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp74
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.h13
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.cpp133
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerazoomcontrol.h78
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcaptureservice.cpp8
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcaptureservice.h2
-rw-r--r--src/plugins/avfoundation/camera/CMakeLists.txt1
-rw-r--r--src/plugins/avfoundation/camera/avfcamerafocuscontrol.h20
-rw-r--r--src/plugins/avfoundation/camera/avfcamerafocuscontrol.mm116
-rw-r--r--src/plugins/avfoundation/camera/avfcameraservice.h3
-rw-r--r--src/plugins/avfoundation/camera/avfcameraservice.mm13
-rw-r--r--src/plugins/avfoundation/camera/avfcamerazoomcontrol.h85
-rw-r--r--src/plugins/avfoundation/camera/avfcamerazoomcontrol.mm179
-rw-r--r--src/plugins/avfoundation/camera/camera.pro5
-rw-r--r--src/plugins/gstreamer/camerabin/camerabin.pro2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinfocus.cpp91
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinfocus.h18
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinservice.cpp4
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.cpp2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.h2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinzoom.cpp147
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinzoom.h78
-rw-r--r--src/plugins/qnx/camera/bbcamerafocuscontrol.cpp99
-rw-r--r--src/plugins/qnx/camera/bbcamerafocuscontrol.h16
-rw-r--r--src/plugins/qnx/camera/bbcameraservice.cpp4
-rw-r--r--src/plugins/qnx/camera/bbcameraservice.h2
-rw-r--r--src/plugins/qnx/camera/bbcamerazoomcontrol.cpp155
-rw-r--r--src/plugins/qnx/camera/bbcamerazoomcontrol.h77
-rw-r--r--src/plugins/qnx/camera/camera.pri2
-rw-r--r--tests/auto/unit/qcamera/CMakeLists.txt1
-rw-r--r--tests/auto/unit/qcameraimagecapture/CMakeLists.txt1
-rw-r--r--tests/auto/unit/qcamerainfo/CMakeLists.txt1
-rw-r--r--tests/auto/unit/qcameraviewfinder/CMakeLists.txt1
-rw-r--r--tests/auto/unit/qcamerawidgets/CMakeLists.txt1
-rw-r--r--tests/auto/unit/qdeclarativecamera/CMakeLists.txt1
-rw-r--r--tests/auto/unit/qdeclarativemultimediaglobal/CMakeLists.txt1
-rw-r--r--tests/auto/unit/qmultimedia_common/mockcamera.pri1
-rw-r--r--tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h69
-rw-r--r--tests/auto/unit/qmultimedia_common/mockcameraservice.h6
-rw-r--r--tests/auto/unit/qmultimedia_common/mockcamerazoomcontrol.h121
49 files changed, 647 insertions, 1429 deletions
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 <qcameracontrol.h>
#include <qcameraexposurecontrol.h>
#include <qcamerafocuscontrol.h>
-#include <qcamerazoomcontrol.h>
#include <qcameraimagecapturecontrol.h>
#include <qvideodeviceselectorcontrol.h>
@@ -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<QCameraFocusControl *>(service->requestControl(QCameraFocusControl_iid));
- zoomControl = qobject_cast<QCameraZoomControl *>(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 <qcamerazoomcontrol.h>
-#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 <QtMultimedia/qmediacontrol.h>
-#include <QtMultimedia/qmediaobject.h>
-
-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 <qmath.h>
+
QT_BEGIN_NAMESPACE
static QRect adjustedArea(const QRectF &area)
@@ -225,6 +228,22 @@ void QAndroidCameraFocusControl::onCameraOpened()
setFocusMode(m_focusMode);
setCustomFocusPoint(m_customFocusPoint);
setFocusPointMode(m_focusPointMode);
+
+ if (m_session->camera()->isZoomSupported()) {
+ m_zoomRatios = m_session->camera()->getZoomRatios();
+ qreal maxZoom = m_zoomRatios.last() / qreal(100);
+ if (m_maximumZoom != maxZoom) {
+ m_maximumZoom = maxZoom;
+ emit maximumDigitalZoomChanged(m_maximumZoom);
+ }
+ zoomTo(1, m_requestedZoom);
+ } else {
+ m_zoomRatios.clear();
+ if (!qFuzzyCompare(m_maximumZoom, qreal(1))) {
+ m_maximumZoom = 1.0;
+ emit maximumDigitalZoomChanged(m_maximumZoom);
+ }
+ }
}
void QAndroidCameraFocusControl::updateFocusZones(QCameraFocusZone::FocusZoneStatus status)
@@ -306,4 +325,59 @@ void QAndroidCameraFocusControl::onAutoFocusComplete(bool success)
updateFocusZones(QCameraFocusZone::Focused);
}
+
+qreal QAndroidCameraFocusControl::maximumOpticalZoom() const
+{
+ // Optical zoom not supported
+ return 1.0;
+}
+
+qreal QAndroidCameraFocusControl::maximumDigitalZoom() const
+{
+ return m_maximumZoom;
+}
+
+qreal QAndroidCameraFocusControl::requestedOpticalZoom() const
+{
+ // Optical zoom not supported
+ return 1.0;
+}
+
+qreal QAndroidCameraFocusControl::requestedDigitalZoom() const
+{
+ return m_requestedZoom;
+}
+
+qreal QAndroidCameraFocusControl::currentOpticalZoom() const
+{
+ // Optical zoom not supported
+ return 1.0;
+}
+
+qreal QAndroidCameraFocusControl::currentDigitalZoom() const
+{
+ return m_currentZoom;
+}
+
+void QAndroidCameraFocusControl::zoomTo(qreal optical, qreal digital)
+{
+ Q_UNUSED(optical);
+
+ if (!qFuzzyCompare(m_requestedZoom, digital)) {
+ m_requestedZoom = digital;
+ emit requestedDigitalZoomChanged(m_requestedZoom);
+ }
+
+ if (m_session->camera()) {
+ digital = qBound(qreal(1), digital, m_maximumZoom);
+ int validZoomIndex = qt_findClosestValue(m_zoomRatios, qRound(digital * 100));
+ qreal newZoom = m_zoomRatios.at(validZoomIndex) / qreal(100);
+ if (!qFuzzyCompare(m_currentZoom, newZoom)) {
+ m_session->camera()->setZoom(validZoomIndex);
+ m_currentZoom = newZoom;
+ emit currentDigitalZoomChanged(m_currentZoom);
+ }
+ }
+}
+
QT_END_NAMESPACE
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<QCameraFocus::FocusPointMode> m_supportedFocusPointModes;
+
+ qreal m_maximumZoom;
+ QList<int> 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 <qmath.h>
-
-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 <qcamerazoomcontrol.h>
-#include <qcamera.h>
-
-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<int> 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 <qcamerafocuscontrol.h>
+#include <AVFoundation/AVFoundation.h>
+
@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 <QtMultimedia/qcamerazoomcontrol.h>
-#include <QtMultimedia/qcamera.h>
-
-#include <AVFoundation/AVFoundation.h>
-
-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 <QtCore/qglobal.h>
-#include <QtCore/qdebug.h>
-
-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 <private/qgstutils_p.h>
+#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<CameraBinFocus *>(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<CameraBinFocus *>(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<QRect> 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 <private/qgstreamerbushelper_p.h>
#include <private/qgstutils_p.h>
@@ -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<CameraBinZoom *>(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<CameraBinZoom *>(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 <qcamerazoomcontrol.h>
-#include <gst/gst.h>
-
-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 <QDebug>
-
-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 <qcamera.h>
-#include <qcamerazoomcontrol.h>
-
-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<qreal>(1.0, optical, maximumOpticalZoom());
+ digital = qBound<qreal>(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<qreal>(1.0, optical, maximumOpticalZoom());
- digital = qBound<qreal>(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