diff options
49 files changed, 829 insertions, 1451 deletions
diff --git a/src/multimedia/CMakeLists.txt b/src/multimedia/CMakeLists.txt index b5ecce120..405313f09 100644 --- a/src/multimedia/CMakeLists.txt +++ b/src/multimedia/CMakeLists.txt @@ -38,7 +38,6 @@ qt_add_module(Multimedia controls/qcamerafocuscontrol.cpp controls/qcamerafocuscontrol.h controls/qcameraimagecapturecontrol.cpp controls/qcameraimagecapturecontrol.h controls/qcameraimageprocessingcontrol.cpp controls/qcameraimageprocessingcontrol.h - controls/qcameralockscontrol.cpp controls/qcameralockscontrol.h controls/qcameraviewfindersettingscontrol.cpp controls/qcameraviewfindersettingscontrol.h controls/qimageencodercontrol.cpp controls/qimageencodercontrol.h controls/qmediaaudioprobecontrol.cpp controls/qmediaaudioprobecontrol.h diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp index 64236e721..31de5822a 100644 --- a/src/multimedia/camera/qcamera.cpp +++ b/src/multimedia/camera/qcamera.cpp @@ -43,7 +43,6 @@ #include <qcamerainfo.h> #include <qcameracontrol.h> -#include <qcameralockscontrol.h> #include <qcameraexposurecontrol.h> #include <qcamerafocuscontrol.h> #include <qcameraimageprocessingcontrol.h> @@ -181,7 +180,6 @@ void QCameraPrivate::initControls() if (service) { control = qobject_cast<QCameraControl *>(service->requestControl(QCameraControl_iid)); - locksControl = qobject_cast<QCameraLocksControl *>(service->requestControl(QCameraLocksControl_iid)); deviceControl = qobject_cast<QVideoDeviceSelectorControl*>(service->requestControl(QVideoDeviceSelectorControl_iid)); viewfinderSettingsControl2 = qobject_cast<QCameraViewfinderSettingsControl2*>(service->requestControl(QCameraViewfinderSettingsControl2_iid)); if (!viewfinderSettingsControl2) @@ -193,18 +191,13 @@ void QCameraPrivate::initControls() q->connect(control, SIGNAL(captureModeChanged(QCamera::CaptureModes)), q, SIGNAL(captureModeChanged(QCamera::CaptureModes))); q->connect(control, SIGNAL(error(int,QString)), q, SLOT(_q_error(int,QString))); - - } - - if (locksControl) { - q->connect(locksControl, SIGNAL(lockStatusChanged(QCamera::LockType,QCamera::LockStatus,QCamera::LockChangeReason)), + q->connect(control, SIGNAL(lockStatusChanged(QCamera::LockType,QCamera::LockStatus,QCamera::LockChangeReason)), q, SLOT(_q_updateLockStatus(QCamera::LockType,QCamera::LockStatus,QCamera::LockChangeReason))); } error = QCamera::NoError; } else { control = nullptr; - locksControl = nullptr; deviceControl = nullptr; viewfinderSettingsControl = nullptr; viewfinderSettingsControl2 = nullptr; @@ -223,8 +216,6 @@ void QCameraPrivate::clear() if (service) { if (control) service->releaseControl(control); - if (locksControl) - service->releaseControl(locksControl); if (deviceControl) service->releaseControl(deviceControl); if (viewfinderSettingsControl) @@ -239,7 +230,6 @@ void QCameraPrivate::clear() cameraFocus = nullptr; imageProcessing = nullptr; control = nullptr; - locksControl = nullptr; deviceControl = nullptr; viewfinderSettingsControl = nullptr; viewfinderSettingsControl2 = nullptr; @@ -888,8 +878,8 @@ QCamera::LockTypes QCamera::supportedLocks() const { Q_D(const QCamera); - return d->locksControl - ? d->locksControl->supportedLocks() + return d->control + ? d->control->supportedLocks() : QCamera::LockTypes(); } @@ -919,8 +909,8 @@ QCamera::LockStatus QCamera::lockStatus(QCamera::LockType lockType) const if (!(lockType & d->requestedLocks)) return QCamera::Unlocked; - if (d->locksControl) - return d->locksControl->lockStatus(lockType); + if (d->control) + return d->control->lockStatus(lockType); return QCamera::Locked; } @@ -957,10 +947,10 @@ void QCamera::searchAndLock(QCamera::LockTypes locks) QCamera::LockStatus oldStatus = d->lockStatus; d->supressLockChangedSignal = true; - if (d->locksControl) { - locks &= d->locksControl->supportedLocks(); + if (d->control) { + locks &= d->control->supportedLocks(); d->requestedLocks |= locks; - d->locksControl->searchAndLock(locks); + d->control->searchAndLock(locks); } d->supressLockChangedSignal = false; @@ -989,9 +979,9 @@ void QCamera::unlock(QCamera::LockTypes locks) d->requestedLocks &= ~locks; - if (d->locksControl) { - locks &= d->locksControl->supportedLocks(); - d->locksControl->unlock(locks); + if (d->control) { + locks &= d->control->supportedLocks(); + d->control->unlock(locks); } d->supressLockChangedSignal = false; diff --git a/src/multimedia/camera/qcamera_p.h b/src/multimedia/camera/qcamera_p.h index 258c894e0..ebee9dada 100644 --- a/src/multimedia/camera/qcamera_p.h +++ b/src/multimedia/camera/qcamera_p.h @@ -60,7 +60,6 @@ QT_BEGIN_NAMESPACE class QMediaServiceProvider; class QCameraControl; class QVideoDeviceSelectorControl; -class QCameraLocksControl; class QCameraViewfinderSettingsControl; class QCameraViewfinderSettingsControl2; @@ -73,7 +72,6 @@ public: provider(nullptr), control(nullptr), deviceControl(nullptr), - locksControl(nullptr), viewfinderSettingsControl(nullptr), viewfinderSettingsControl2(nullptr), cameraExposure(nullptr), @@ -100,7 +98,6 @@ public: QCameraControl *control; QVideoDeviceSelectorControl *deviceControl; - QCameraLocksControl *locksControl; QCameraViewfinderSettingsControl *viewfinderSettingsControl; QCameraViewfinderSettingsControl2 *viewfinderSettingsControl2; diff --git a/src/multimedia/controls/controls.pri b/src/multimedia/controls/controls.pri index fb6138280..bcec75e5e 100644 --- a/src/multimedia/controls/controls.pri +++ b/src/multimedia/controls/controls.pri @@ -12,7 +12,6 @@ PUBLIC_HEADERS += \ controls/qcamerafocuscontrol.h \ controls/qcameraimagecapturecontrol.h \ controls/qcameraimageprocessingcontrol.h \ - controls/qcameralockscontrol.h \ controls/qcameraviewfindersettingscontrol.h \ controls/qimageencodercontrol.h \ controls/qmediacontainercontrol.h \ @@ -35,7 +34,6 @@ SOURCES += \ controls/qcamerafocuscontrol.cpp \ controls/qcameraimagecapturecontrol.cpp \ controls/qcameraimageprocessingcontrol.cpp \ - controls/qcameralockscontrol.cpp \ controls/qcameraviewfindersettingscontrol.cpp \ controls/qimageencodercontrol.cpp \ controls/qmediacontainercontrol.cpp \ diff --git a/src/multimedia/controls/qcameracontrol.cpp b/src/multimedia/controls/qcameracontrol.cpp index d33fa94c9..736f59888 100644 --- a/src/multimedia/controls/qcameracontrol.cpp +++ b/src/multimedia/controls/qcameracontrol.cpp @@ -200,6 +200,36 @@ QCameraControl::~QCameraControl() \value ViewfinderSettings Viewfinder settings are changed. */ +/*! + \fn QCameraControl::supportedLocks() const + + Returns the lock types, the camera supports. +*/ + +/*! + \fn QCameraControl::lockStatus(QCamera::LockType lock) const + + Returns the camera \a lock status. +*/ + +/*! + \fn QCameraControl::searchAndLock(QCamera::LockTypes locks) + + Request camera \a locks. +*/ + +/*! + \fn QCameraControl::unlock(QCamera::LockTypes locks) + + Unlock camera \a locks. +*/ + +/*! + \fn QCameraControl::lockStatusChanged(QCamera::LockType lock, QCamera::LockStatus status, QCamera::LockChangeReason reason) + + Signals the lock \a type \a status was changed with the specified \a reason. +*/ + QT_END_NAMESPACE #include "moc_qcameracontrol.cpp" diff --git a/src/multimedia/controls/qcameracontrol.h b/src/multimedia/controls/qcameracontrol.h index 6c5163118..75464fdaa 100644 --- a/src/multimedia/controls/qcameracontrol.h +++ b/src/multimedia/controls/qcameracontrol.h @@ -76,11 +76,19 @@ public: virtual bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const = 0; + virtual QCamera::LockTypes supportedLocks() const = 0; + + virtual QCamera::LockStatus lockStatus(QCamera::LockType lock) const = 0; + + virtual void searchAndLock(QCamera::LockTypes locks) = 0; + virtual void unlock(QCamera::LockTypes locks) = 0; + Q_SIGNALS: void stateChanged(QCamera::State); void statusChanged(QCamera::Status); void error(int error, const QString &errorString); void captureModeChanged(QCamera::CaptureModes mode); + void lockStatusChanged(QCamera::LockType type, QCamera::LockStatus status, QCamera::LockChangeReason reason); protected: explicit QCameraControl(QObject *parent = nullptr); diff --git a/src/multimedia/controls/qcameralockscontrol.cpp b/src/multimedia/controls/qcameralockscontrol.cpp deleted file mode 100644 index 27b68cf2c..000000000 --- a/src/multimedia/controls/qcameralockscontrol.cpp +++ /dev/null @@ -1,128 +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 <qcameralockscontrol.h> -#include "qmediacontrol_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QCameraLocksControl - \obsolete - - - - \brief The QCameraLocksControl class is an abstract base class for - classes that control still cameras or video cameras. - - \inmodule QtMultimedia - - - \ingroup multimedia_control - - This service is provided by a QMediaService object via - QMediaService::control(). It is used by QCamera. - - The interface name of QCameraLocksControl is \c org.qt-project.qt.cameralockscontrol/5.0 as - defined in QCameraLocksControl_iid. - - - \sa QMediaService::requestControl(), QCamera -*/ - -/*! - \macro QCameraLocksControl_iid - - \c org.qt-project.qt.cameralockscontrol/5.0 - - Defines the interface name of the QCameraLocksControl class. - - \relates QCameraLocksControl -*/ - -/*! - Constructs a camera locks control object with \a parent. -*/ - -QCameraLocksControl::QCameraLocksControl(QObject *parent): - QMediaControl(*new QMediaControlPrivate, parent) -{ -} - -/*! - Destruct the camera locks control object. -*/ - -QCameraLocksControl::~QCameraLocksControl() -{ -} - -/*! - \fn QCameraLocksControl::supportedLocks() const - - Returns the lock types, the camera supports. -*/ - -/*! - \fn QCameraLocksControl::lockStatus(QCamera::LockType lock) const - - Returns the camera \a lock status. -*/ - -/*! - \fn QCameraLocksControl::searchAndLock(QCamera::LockTypes locks) - - Request camera \a locks. -*/ - -/*! - \fn QCameraLocksControl::unlock(QCamera::LockTypes locks) - - Unlock camera \a locks. -*/ - -/*! - \fn QCameraLocksControl::lockStatusChanged(QCamera::LockType lock, QCamera::LockStatus status, QCamera::LockChangeReason reason) - - Signals the lock \a type \a status was changed with the specified \a reason. -*/ - -QT_END_NAMESPACE - -#include "moc_qcameralockscontrol.cpp" diff --git a/src/multimedia/controls/qcameralockscontrol.h b/src/multimedia/controls/qcameralockscontrol.h deleted file mode 100644 index d545d971e..000000000 --- a/src/multimedia/controls/qcameralockscontrol.h +++ /dev/null @@ -1,80 +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 QCAMERALOCKSCONTROL_H -#define QCAMERALOCKSCONTROL_H - -#include <QtMultimedia/qmediacontrol.h> -#include <QtMultimedia/qmediaobject.h> - -#include <QtMultimedia/qcamera.h> - -QT_BEGIN_NAMESPACE - -// Required for QDoc workaround -class QString; - -class Q_MULTIMEDIA_EXPORT QCameraLocksControl : public QMediaControl -{ - Q_OBJECT -public: - ~QCameraLocksControl(); - - virtual QCamera::LockTypes supportedLocks() const = 0; - - virtual QCamera::LockStatus lockStatus(QCamera::LockType lock) const = 0; - - virtual void searchAndLock(QCamera::LockTypes locks) = 0; - virtual void unlock(QCamera::LockTypes locks) = 0; - -Q_SIGNALS: - void lockStatusChanged(QCamera::LockType type, QCamera::LockStatus status, QCamera::LockChangeReason reason); - -protected: - explicit QCameraLocksControl(QObject *parent = nullptr); -}; - -#define QCameraLocksControl_iid "org.qt-project.qt.cameralockscontrol/5.0" -Q_MEDIA_DECLARE_CONTROL(QCameraLocksControl, QCameraLocksControl_iid) - -QT_END_NAMESPACE - - -#endif // QCAMERALOCKSCONTROL_H - diff --git a/src/plugins/android/src/CMakeLists.txt b/src/plugins/android/src/CMakeLists.txt index b799a02c1..c63582fbd 100644 --- a/src/plugins/android/src/CMakeLists.txt +++ b/src/plugins/android/src/CMakeLists.txt @@ -19,7 +19,6 @@ qt_internal_add_plugin(QAndroidMediaServicePlugin mediacapture/qandroidcamerafocuscontrol.cpp mediacapture/qandroidcamerafocuscontrol.h mediacapture/qandroidcameraimagecapturecontrol.cpp mediacapture/qandroidcameraimagecapturecontrol.h mediacapture/qandroidcameraimageprocessingcontrol.cpp mediacapture/qandroidcameraimageprocessingcontrol.h - mediacapture/qandroidcameralockscontrol.cpp mediacapture/qandroidcameralockscontrol.h mediacapture/qandroidcamerasession.cpp mediacapture/qandroidcamerasession.h mediacapture/qandroidcameravideorenderercontrol.cpp mediacapture/qandroidcameravideorenderercontrol.h mediacapture/qandroidcaptureservice.cpp mediacapture/qandroidcaptureservice.h diff --git a/src/plugins/android/src/mediacapture/mediacapture.pri b/src/plugins/android/src/mediacapture/mediacapture.pri index 6c8595a4b..78bc0a862 100644 --- a/src/plugins/android/src/mediacapture/mediacapture.pri +++ b/src/plugins/android/src/mediacapture/mediacapture.pri @@ -12,7 +12,6 @@ SOURCES += \ $$PWD/qandroidcameracapturebufferformatcontrol.cpp \ $$PWD/qandroidcamerafocuscontrol.cpp \ $$PWD/qandroidviewfindersettingscontrol.cpp \ - $$PWD/qandroidcameralockscontrol.cpp \ $$PWD/qandroidcapturesession.cpp \ $$PWD/qandroidmediarecordercontrol.cpp \ $$PWD/qandroidaudioencodersettingscontrol.cpp \ @@ -34,7 +33,6 @@ HEADERS += \ $$PWD/qandroidcameracapturebufferformatcontrol.h \ $$PWD/qandroidcamerafocuscontrol.h \ $$PWD/qandroidviewfindersettingscontrol.h \ - $$PWD/qandroidcameralockscontrol.h \ $$PWD/qandroidcapturesession.h \ $$PWD/qandroidmediarecordercontrol.h \ $$PWD/qandroidaudioencodersettingscontrol.h \ diff --git a/src/plugins/android/src/mediacapture/qandroidcameracontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcameracontrol.cpp index a75215920..551df7965 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameracontrol.cpp +++ b/src/plugins/android/src/mediacapture/qandroidcameracontrol.cpp @@ -38,8 +38,8 @@ ****************************************************************************/ #include "qandroidcameracontrol.h" - #include "qandroidcamerasession.h" +#include <qtimer.h> QT_BEGIN_NAMESPACE @@ -58,6 +58,13 @@ QAndroidCameraControl::QAndroidCameraControl(QAndroidCameraSession *session) connect(m_cameraSession, SIGNAL(captureModeChanged(QCamera::CaptureModes)), this, SIGNAL(captureModeChanged(QCamera::CaptureModes))); + + connect(m_cameraSession, SIGNAL(opened()), this, SLOT(onCameraOpened())); + + m_recalculateTimer = new QTimer(this); + m_recalculateTimer->setInterval(1000); + m_recalculateTimer->setSingleShot(true); + connect(m_recalculateTimer, SIGNAL(timeout()), this, SLOT(onRecalculateTimeOut())); } QAndroidCameraControl::~QAndroidCameraControl() @@ -109,4 +116,192 @@ bool QAndroidCameraControl::canChangeProperty(PropertyChangeType changeType, QCa } } + +QCamera::LockTypes QAndroidCameraControl::supportedLocks() const +{ + return m_supportedLocks; +} + +QCamera::LockStatus QAndroidCameraControl::lockStatus(QCamera::LockType lock) const +{ + if (!m_supportedLocks.testFlag(lock) || !m_cameraSession->camera()) + return QCamera::Unlocked; + + if (lock == QCamera::LockFocus) + return m_focusLockStatus; + + if (lock == QCamera::LockExposure) + return m_exposureLockStatus; + + if (lock == QCamera::LockWhiteBalance) + return m_whiteBalanceLockStatus; + + return QCamera::Unlocked; +} + +void QAndroidCameraControl::searchAndLock(QCamera::LockTypes locks) +{ + if (!m_cameraSession->camera()) + return; + + // filter out unsupported locks + locks &= m_supportedLocks; + + if (locks.testFlag(QCamera::LockFocus)) { + QString focusMode = m_cameraSession->camera()->getFocusMode(); + if (focusMode == QLatin1String("auto") + || focusMode == QLatin1String("macro") + || focusMode == QLatin1String("continuous-picture") + || focusMode == QLatin1String("continuous-video")) { + + if (m_focusLockStatus == QCamera::Searching) + m_cameraSession->camera()->cancelAutoFocus(); + else + setFocusLockStatus(QCamera::Searching, QCamera::UserRequest); + + m_cameraSession->camera()->autoFocus(); + + } else { + setFocusLockStatus(QCamera::Locked, QCamera::LockAcquired); + } + } + + if (locks.testFlag(QCamera::LockExposure) && m_exposureLockStatus != QCamera::Searching) { + if (m_cameraSession->camera()->getAutoExposureLock()) { + // if already locked, unlock and give some time to recalculate exposure + m_cameraSession->camera()->setAutoExposureLock(false); + setExposureLockStatus(QCamera::Searching, QCamera::UserRequest); + } else { + m_cameraSession->camera()->setAutoExposureLock(true); + setExposureLockStatus(QCamera::Locked, QCamera::LockAcquired); + } + } + + if (locks.testFlag(QCamera::LockWhiteBalance) && m_whiteBalanceLockStatus != QCamera::Searching) { + if (m_cameraSession->camera()->getAutoWhiteBalanceLock()) { + // if already locked, unlock and give some time to recalculate white balance + m_cameraSession->camera()->setAutoWhiteBalanceLock(false); + setWhiteBalanceLockStatus(QCamera::Searching, QCamera::UserRequest); + } else { + m_cameraSession->camera()->setAutoWhiteBalanceLock(true); + setWhiteBalanceLockStatus(QCamera::Locked, QCamera::LockAcquired); + } + } + + if (m_exposureLockStatus == QCamera::Searching || m_whiteBalanceLockStatus == QCamera::Searching) + m_recalculateTimer->start(); +} + +void QAndroidCameraControl::unlock(QCamera::LockTypes locks) +{ + if (!m_cameraSession->camera()) + return; + + if (m_recalculateTimer->isActive()) + m_recalculateTimer->stop(); + + // filter out unsupported locks + locks &= m_supportedLocks; + + if (locks.testFlag(QCamera::LockFocus)) { + m_cameraSession->camera()->cancelAutoFocus(); + setFocusLockStatus(QCamera::Unlocked, QCamera::UserRequest); + } + + if (locks.testFlag(QCamera::LockExposure)) { + m_cameraSession->camera()->setAutoExposureLock(false); + setExposureLockStatus(QCamera::Unlocked, QCamera::UserRequest); + } + + if (locks.testFlag(QCamera::LockWhiteBalance)) { + m_cameraSession->camera()->setAutoWhiteBalanceLock(false); + setWhiteBalanceLockStatus(QCamera::Unlocked, QCamera::UserRequest); + } +} + +void QAndroidCameraControl::onCameraOpened() +{ + m_supportedLocks = QCamera::NoLock; + m_focusLockStatus = QCamera::Unlocked; + m_exposureLockStatus = QCamera::Unlocked; + m_whiteBalanceLockStatus = QCamera::Unlocked; + + // check if focus lock is supported + QStringList focusModes = m_cameraSession->camera()->getSupportedFocusModes(); + for (int i = 0; i < focusModes.size(); ++i) { + const QString &focusMode = focusModes.at(i); + if (focusMode == QLatin1String("auto") + || focusMode == QLatin1String("continuous-picture") + || focusMode == QLatin1String("continuous-video") + || focusMode == QLatin1String("macro")) { + + m_supportedLocks |= QCamera::LockFocus; + setFocusLockStatus(QCamera::Unlocked, QCamera::UserRequest); + + connect(m_cameraSession->camera(), SIGNAL(autoFocusComplete(bool)), + this, SLOT(onCameraAutoFocusComplete(bool))); + + break; + } + } + + if (m_cameraSession->camera()->isAutoExposureLockSupported()) { + m_supportedLocks |= QCamera::LockExposure; + setExposureLockStatus(QCamera::Unlocked, QCamera::UserRequest); + } + + if (m_cameraSession->camera()->isAutoWhiteBalanceLockSupported()) { + m_supportedLocks |= QCamera::LockWhiteBalance; + setWhiteBalanceLockStatus(QCamera::Unlocked, QCamera::UserRequest); + + connect(m_cameraSession->camera(), SIGNAL(whiteBalanceChanged()), + this, SLOT(onWhiteBalanceChanged())); + } +} + +void QAndroidCameraControl::onCameraAutoFocusComplete(bool success) +{ + m_focusLockStatus = success ? QCamera::Locked : QCamera::Unlocked; + QCamera::LockChangeReason reason = success ? QCamera::LockAcquired : QCamera::LockFailed; + emit lockStatusChanged(QCamera::LockFocus, m_focusLockStatus, reason); +} + +void QAndroidCameraControl::onRecalculateTimeOut() +{ + if (m_exposureLockStatus == QCamera::Searching) { + m_cameraSession->camera()->setAutoExposureLock(true); + setExposureLockStatus(QCamera::Locked, QCamera::LockAcquired); + } + + if (m_whiteBalanceLockStatus == QCamera::Searching) { + m_cameraSession->camera()->setAutoWhiteBalanceLock(true); + setWhiteBalanceLockStatus(QCamera::Locked, QCamera::LockAcquired); + } +} + +void QAndroidCameraControl::onWhiteBalanceChanged() +{ + // changing the white balance mode releases the white balance lock + if (m_whiteBalanceLockStatus != QCamera::Unlocked) + setWhiteBalanceLockStatus(QCamera::Unlocked, QCamera::LockLost); +} + +void QAndroidCameraControl::setFocusLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason) +{ + m_focusLockStatus = status; + emit lockStatusChanged(QCamera::LockFocus, m_focusLockStatus, reason); +} + +void QAndroidCameraControl::setWhiteBalanceLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason) +{ + m_whiteBalanceLockStatus = status; + emit lockStatusChanged(QCamera::LockWhiteBalance, m_whiteBalanceLockStatus, reason); +} + +void QAndroidCameraControl::setExposureLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason) +{ + m_exposureLockStatus = status; + emit lockStatusChanged(QCamera::LockExposure, m_exposureLockStatus, reason); +} + QT_END_NAMESPACE diff --git a/src/plugins/android/src/mediacapture/qandroidcameracontrol.h b/src/plugins/android/src/mediacapture/qandroidcameracontrol.h index 80eead627..5d8dad1b8 100644 --- a/src/plugins/android/src/mediacapture/qandroidcameracontrol.h +++ b/src/plugins/android/src/mediacapture/qandroidcameracontrol.h @@ -54,19 +54,42 @@ public: explicit QAndroidCameraControl(QAndroidCameraSession *session); virtual ~QAndroidCameraControl(); - QCamera::State state() const; - void setState(QCamera::State state); + QCamera::State state() const override; + void setState(QCamera::State state) override; - QCamera::Status status() const; + QCamera::Status status() const override; - QCamera::CaptureModes captureMode() const; - void setCaptureMode(QCamera::CaptureModes mode); - bool isCaptureModeSupported(QCamera::CaptureModes mode) const; + QCamera::CaptureModes captureMode() const override; + void setCaptureMode(QCamera::CaptureModes mode) override; + bool isCaptureModeSupported(QCamera::CaptureModes mode) const override; - bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const; + bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override; + + QCamera::LockTypes supportedLocks() const override; + QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; + void searchAndLock(QCamera::LockTypes locks) override; + void unlock(QCamera::LockTypes locks) override; + +private Q_SLOTS: + void onCameraOpened(); + void onCameraAutoFocusComplete(bool success); + void onRecalculateTimeOut(); + void onWhiteBalanceChanged(); private: + void setFocusLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason); + void setWhiteBalanceLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason); + void setExposureLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason); + QAndroidCameraSession *m_cameraSession; + + QTimer *m_recalculateTimer; + + QCamera::LockTypes m_supportedLocks; + + QCamera::LockStatus m_focusLockStatus; + QCamera::LockStatus m_exposureLockStatus; + QCamera::LockStatus m_whiteBalanceLockStatus; }; QT_END_NAMESPACE diff --git a/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.cpp deleted file mode 100644 index 180a2f483..000000000 --- a/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.cpp +++ /dev/null @@ -1,252 +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 "qandroidcameralockscontrol.h" - -#include "qandroidcamerasession.h" -#include "androidcamera.h" -#include <qtimer.h> - -QT_BEGIN_NAMESPACE - -QAndroidCameraLocksControl::QAndroidCameraLocksControl(QAndroidCameraSession *session) - : QCameraLocksControl() - , m_session(session) - , m_supportedLocks(QCamera::NoLock) - , m_focusLockStatus(QCamera::Unlocked) - , m_exposureLockStatus(QCamera::Unlocked) - , m_whiteBalanceLockStatus(QCamera::Unlocked) -{ - connect(m_session, SIGNAL(opened()), - this, SLOT(onCameraOpened())); - - m_recalculateTimer = new QTimer(this); - m_recalculateTimer->setInterval(1000); - m_recalculateTimer->setSingleShot(true); - connect(m_recalculateTimer, SIGNAL(timeout()), this, SLOT(onRecalculateTimeOut())); -} - -QCamera::LockTypes QAndroidCameraLocksControl::supportedLocks() const -{ - return m_supportedLocks; -} - -QCamera::LockStatus QAndroidCameraLocksControl::lockStatus(QCamera::LockType lock) const -{ - if (!m_supportedLocks.testFlag(lock) || !m_session->camera()) - return QCamera::Unlocked; - - if (lock == QCamera::LockFocus) - return m_focusLockStatus; - - if (lock == QCamera::LockExposure) - return m_exposureLockStatus; - - if (lock == QCamera::LockWhiteBalance) - return m_whiteBalanceLockStatus; - - return QCamera::Unlocked; -} - -void QAndroidCameraLocksControl::searchAndLock(QCamera::LockTypes locks) -{ - if (!m_session->camera()) - return; - - // filter out unsupported locks - locks &= m_supportedLocks; - - if (locks.testFlag(QCamera::LockFocus)) { - QString focusMode = m_session->camera()->getFocusMode(); - if (focusMode == QLatin1String("auto") - || focusMode == QLatin1String("macro") - || focusMode == QLatin1String("continuous-picture") - || focusMode == QLatin1String("continuous-video")) { - - if (m_focusLockStatus == QCamera::Searching) - m_session->camera()->cancelAutoFocus(); - else - setFocusLockStatus(QCamera::Searching, QCamera::UserRequest); - - m_session->camera()->autoFocus(); - - } else { - setFocusLockStatus(QCamera::Locked, QCamera::LockAcquired); - } - } - - if (locks.testFlag(QCamera::LockExposure) && m_exposureLockStatus != QCamera::Searching) { - if (m_session->camera()->getAutoExposureLock()) { - // if already locked, unlock and give some time to recalculate exposure - m_session->camera()->setAutoExposureLock(false); - setExposureLockStatus(QCamera::Searching, QCamera::UserRequest); - } else { - m_session->camera()->setAutoExposureLock(true); - setExposureLockStatus(QCamera::Locked, QCamera::LockAcquired); - } - } - - if (locks.testFlag(QCamera::LockWhiteBalance) && m_whiteBalanceLockStatus != QCamera::Searching) { - if (m_session->camera()->getAutoWhiteBalanceLock()) { - // if already locked, unlock and give some time to recalculate white balance - m_session->camera()->setAutoWhiteBalanceLock(false); - setWhiteBalanceLockStatus(QCamera::Searching, QCamera::UserRequest); - } else { - m_session->camera()->setAutoWhiteBalanceLock(true); - setWhiteBalanceLockStatus(QCamera::Locked, QCamera::LockAcquired); - } - } - - if (m_exposureLockStatus == QCamera::Searching || m_whiteBalanceLockStatus == QCamera::Searching) - m_recalculateTimer->start(); -} - -void QAndroidCameraLocksControl::unlock(QCamera::LockTypes locks) -{ - if (!m_session->camera()) - return; - - if (m_recalculateTimer->isActive()) - m_recalculateTimer->stop(); - - // filter out unsupported locks - locks &= m_supportedLocks; - - if (locks.testFlag(QCamera::LockFocus)) { - m_session->camera()->cancelAutoFocus(); - setFocusLockStatus(QCamera::Unlocked, QCamera::UserRequest); - } - - if (locks.testFlag(QCamera::LockExposure)) { - m_session->camera()->setAutoExposureLock(false); - setExposureLockStatus(QCamera::Unlocked, QCamera::UserRequest); - } - - if (locks.testFlag(QCamera::LockWhiteBalance)) { - m_session->camera()->setAutoWhiteBalanceLock(false); - setWhiteBalanceLockStatus(QCamera::Unlocked, QCamera::UserRequest); - } -} - -void QAndroidCameraLocksControl::onCameraOpened() -{ - m_supportedLocks = QCamera::NoLock; - m_focusLockStatus = QCamera::Unlocked; - m_exposureLockStatus = QCamera::Unlocked; - m_whiteBalanceLockStatus = QCamera::Unlocked; - - // check if focus lock is supported - QStringList focusModes = m_session->camera()->getSupportedFocusModes(); - for (int i = 0; i < focusModes.size(); ++i) { - const QString &focusMode = focusModes.at(i); - if (focusMode == QLatin1String("auto") - || focusMode == QLatin1String("continuous-picture") - || focusMode == QLatin1String("continuous-video") - || focusMode == QLatin1String("macro")) { - - m_supportedLocks |= QCamera::LockFocus; - setFocusLockStatus(QCamera::Unlocked, QCamera::UserRequest); - - connect(m_session->camera(), SIGNAL(autoFocusComplete(bool)), - this, SLOT(onCameraAutoFocusComplete(bool))); - - break; - } - } - - if (m_session->camera()->isAutoExposureLockSupported()) { - m_supportedLocks |= QCamera::LockExposure; - setExposureLockStatus(QCamera::Unlocked, QCamera::UserRequest); - } - - if (m_session->camera()->isAutoWhiteBalanceLockSupported()) { - m_supportedLocks |= QCamera::LockWhiteBalance; - setWhiteBalanceLockStatus(QCamera::Unlocked, QCamera::UserRequest); - - connect(m_session->camera(), SIGNAL(whiteBalanceChanged()), - this, SLOT(onWhiteBalanceChanged())); - } -} - -void QAndroidCameraLocksControl::onCameraAutoFocusComplete(bool success) -{ - m_focusLockStatus = success ? QCamera::Locked : QCamera::Unlocked; - QCamera::LockChangeReason reason = success ? QCamera::LockAcquired : QCamera::LockFailed; - emit lockStatusChanged(QCamera::LockFocus, m_focusLockStatus, reason); -} - -void QAndroidCameraLocksControl::onRecalculateTimeOut() -{ - if (m_exposureLockStatus == QCamera::Searching) { - m_session->camera()->setAutoExposureLock(true); - setExposureLockStatus(QCamera::Locked, QCamera::LockAcquired); - } - - if (m_whiteBalanceLockStatus == QCamera::Searching) { - m_session->camera()->setAutoWhiteBalanceLock(true); - setWhiteBalanceLockStatus(QCamera::Locked, QCamera::LockAcquired); - } -} - -void QAndroidCameraLocksControl::onWhiteBalanceChanged() -{ - // changing the white balance mode releases the white balance lock - if (m_whiteBalanceLockStatus != QCamera::Unlocked) - setWhiteBalanceLockStatus(QCamera::Unlocked, QCamera::LockLost); -} - -void QAndroidCameraLocksControl::setFocusLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason) -{ - m_focusLockStatus = status; - emit lockStatusChanged(QCamera::LockFocus, m_focusLockStatus, reason); -} - -void QAndroidCameraLocksControl::setWhiteBalanceLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason) -{ - m_whiteBalanceLockStatus = status; - emit lockStatusChanged(QCamera::LockWhiteBalance, m_whiteBalanceLockStatus, reason); -} - -void QAndroidCameraLocksControl::setExposureLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason) -{ - m_exposureLockStatus = status; - emit lockStatusChanged(QCamera::LockExposure, m_exposureLockStatus, reason); -} - -QT_END_NAMESPACE diff --git a/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.h b/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.h deleted file mode 100644 index 149da0f32..000000000 --- a/src/plugins/android/src/mediacapture/qandroidcameralockscontrol.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 QANDROIDCAMERALOCKSCONTROL_H -#define QANDROIDCAMERALOCKSCONTROL_H - -#include <qcameralockscontrol.h> - -QT_BEGIN_NAMESPACE - -class QAndroidCameraSession; -class QTimer; - -class QAndroidCameraLocksControl : public QCameraLocksControl -{ - Q_OBJECT -public: - explicit QAndroidCameraLocksControl(QAndroidCameraSession *session); - - QCamera::LockTypes supportedLocks() const override; - QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; - void searchAndLock(QCamera::LockTypes locks) override; - void unlock(QCamera::LockTypes locks) override; - -private Q_SLOTS: - void onCameraOpened(); - void onCameraAutoFocusComplete(bool success); - void onRecalculateTimeOut(); - void onWhiteBalanceChanged(); - -private: - void setFocusLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason); - void setWhiteBalanceLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason); - void setExposureLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason); - - QAndroidCameraSession *m_session; - - QTimer *m_recalculateTimer; - - QCamera::LockTypes m_supportedLocks; - - QCamera::LockStatus m_focusLockStatus; - QCamera::LockStatus m_exposureLockStatus; - QCamera::LockStatus m_whiteBalanceLockStatus; -}; - -QT_END_NAMESPACE - -#endif // QANDROIDCAMERALOCKSCONTROL_H diff --git a/src/plugins/android/src/mediacapture/qandroidcaptureservice.cpp b/src/plugins/android/src/mediacapture/qandroidcaptureservice.cpp index a666028e7..26586c3bb 100644 --- a/src/plugins/android/src/mediacapture/qandroidcaptureservice.cpp +++ b/src/plugins/android/src/mediacapture/qandroidcaptureservice.cpp @@ -50,7 +50,6 @@ #include "qandroidcameraexposurecontrol.h" #include "qandroidcamerafocuscontrol.h" #include "qandroidviewfindersettingscontrol.h" -#include "qandroidcameralockscontrol.h" #include "qandroidcameraimageprocessingcontrol.h" #include "qandroidimageencodercontrol.h" #include "qandroidcameraimagecapturecontrol.h" @@ -76,7 +75,6 @@ QAndroidCaptureService::QAndroidCaptureService(const QString &service, QObject * m_cameraExposureControl = new QAndroidCameraExposureControl(m_cameraSession); m_cameraFocusControl = new QAndroidCameraFocusControl(m_cameraSession); m_viewfinderSettingsControl2 = new QAndroidViewfinderSettingsControl2(m_cameraSession); - m_cameraLocksControl = new QAndroidCameraLocksControl(m_cameraSession); m_cameraImageProcessingControl = new QAndroidCameraImageProcessingControl(m_cameraSession); m_imageEncoderControl = new QAndroidImageEncoderControl(m_cameraSession); m_imageCaptureControl = new QAndroidCameraImageCaptureControl(m_cameraSession); @@ -89,7 +87,6 @@ QAndroidCaptureService::QAndroidCaptureService(const QString &service, QObject * m_cameraExposureControl = 0; m_cameraFocusControl = 0; m_viewfinderSettingsControl2 = 0; - m_cameraLocksControl = 0; m_cameraImageProcessingControl = 0; m_imageEncoderControl = 0; m_imageCaptureControl = 0; @@ -124,7 +121,6 @@ QAndroidCaptureService::~QAndroidCaptureService() delete m_cameraExposureControl; delete m_cameraFocusControl; delete m_viewfinderSettingsControl2; - delete m_cameraLocksControl; delete m_cameraImageProcessingControl; delete m_imageEncoderControl; delete m_imageCaptureControl; @@ -164,9 +160,6 @@ QMediaControl *QAndroidCaptureService::requestControl(const char *name) if (qstrcmp(name, QCameraViewfinderSettingsControl2_iid) == 0) return m_viewfinderSettingsControl2; - if (qstrcmp(name, QCameraLocksControl_iid) == 0) - return m_cameraLocksControl; - if (qstrcmp(name, QCameraImageProcessingControl_iid) == 0) return m_cameraImageProcessingControl; diff --git a/src/plugins/android/src/mediacapture/qandroidcaptureservice.h b/src/plugins/android/src/mediacapture/qandroidcaptureservice.h index 88eb5b7a7..9ec6d1852 100644 --- a/src/plugins/android/src/mediacapture/qandroidcaptureservice.h +++ b/src/plugins/android/src/mediacapture/qandroidcaptureservice.h @@ -56,7 +56,6 @@ class QAndroidCameraVideoRendererControl; class QAndroidCameraExposureControl; class QAndroidCameraFocusControl; class QAndroidViewfinderSettingsControl2; -class QAndroidCameraLocksControl; class QAndroidCameraImageProcessingControl; class QAndroidImageEncoderControl; class QAndroidCameraImageCaptureControl; @@ -89,7 +88,6 @@ private: QAndroidCameraExposureControl *m_cameraExposureControl; QAndroidCameraFocusControl *m_cameraFocusControl; QAndroidViewfinderSettingsControl2 *m_viewfinderSettingsControl2; - QAndroidCameraLocksControl *m_cameraLocksControl; QAndroidCameraImageProcessingControl *m_cameraImageProcessingControl; QAndroidImageEncoderControl *m_imageEncoderControl; QAndroidCameraImageCaptureControl *m_imageCaptureControl; diff --git a/src/plugins/avfoundation/camera/avfcameracontrol.h b/src/plugins/avfoundation/camera/avfcameracontrol.h index df371e864..5d2e48329 100644 --- a/src/plugins/avfoundation/camera/avfcameracontrol.h +++ b/src/plugins/avfoundation/camera/avfcameracontrol.h @@ -67,6 +67,13 @@ public: bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override; + QCamera::LockTypes supportedLocks() const override; + + QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; + + void searchAndLock(QCamera::LockTypes locks) override; + void unlock(QCamera::LockTypes locks) override; + private Q_SLOTS: void updateStatus(); diff --git a/src/plugins/avfoundation/camera/avfcameracontrol.mm b/src/plugins/avfoundation/camera/avfcameracontrol.mm index c47eecfdf..50a218a33 100644 --- a/src/plugins/avfoundation/camera/avfcameracontrol.mm +++ b/src/plugins/avfoundation/camera/avfcameracontrol.mm @@ -131,4 +131,24 @@ bool AVFCameraControl::canChangeProperty(QCameraControl::PropertyChangeType chan return true; } +QCamera::LockTypes AVFCameraControl::supportedLocks() const +{ + return {}; +} + +QCamera::LockStatus AVFCameraControl::lockStatus(QCamera::LockType) const +{ + return QCamera::Unlocked; +} + +void AVFCameraControl::searchAndLock(QCamera::LockTypes locks) +{ + Q_UNUSED(locks); +} + +void AVFCameraControl::unlock(QCamera::LockTypes locks) +{ + Q_UNUSED(locks); +} + #include "moc_avfcameracontrol.cpp" diff --git a/src/plugins/gstreamer/camerabin/camerabin.pro b/src/plugins/gstreamer/camerabin/camerabin.pro index a50914929..ed47ec9c0 100644 --- a/src/plugins/gstreamer/camerabin/camerabin.pro +++ b/src/plugins/gstreamer/camerabin/camerabin.pro @@ -48,12 +48,10 @@ qtConfig(gstreamer_photography) { HEADERS += \ $$PWD/camerabinfocus.h \ $$PWD/camerabinexposure.h \ - $$PWD/camerabinlocks.h SOURCES += \ $$PWD/camerabinexposure.cpp \ $$PWD/camerabinfocus.cpp \ - $$PWD/camerabinlocks.cpp QMAKE_USE += gstreamer_photography DEFINES += GST_USE_UNSTABLE_API #prevents warnings because of unstable photography API diff --git a/src/plugins/gstreamer/camerabin/camerabincontrol.cpp b/src/plugins/gstreamer/camerabin/camerabincontrol.cpp index 0d9d7ff84..bd3db7bf4 100644 --- a/src/plugins/gstreamer/camerabin/camerabincontrol.cpp +++ b/src/plugins/gstreamer/camerabin/camerabincontrol.cpp @@ -43,10 +43,13 @@ #include "camerabinaudioencoder.h" #include "camerabinvideoencoder.h" #include "camerabinimageencoder.h" +#include "camerabinfocus.h" +#include "camerabinimageprocessing.h" #include <QtCore/qdebug.h> #include <QtCore/qfile.h> #include <QtCore/qmetaobject.h> +#include <QtCore/qcoreevent.h> QT_BEGIN_NAMESPACE @@ -57,7 +60,8 @@ CameraBinControl::CameraBinControl(CameraBinSession *session) :QCameraControl(session), m_session(session), m_state(QCamera::UnloadedState), - m_reloadPending(false) + m_reloadPending(false), + m_focus(m_session->cameraFocusControl()) { connect(m_session, SIGNAL(statusChanged(QCamera::Status)), this, SIGNAL(statusChanged(QCamera::Status))); @@ -71,6 +75,9 @@ CameraBinControl::CameraBinControl(CameraBinSession *session) connect(m_session, SIGNAL(busyChanged(bool)), SLOT(handleBusyChanged(bool))); + + connect(m_focus, SIGNAL(_q_focusStatusChanged(QCamera::LockStatus,QCamera::LockChangeReason)), + this, SLOT(updateFocusStatus(QCamera::LockStatus,QCamera::LockChangeReason))); } CameraBinControl::~CameraBinControl() @@ -229,4 +236,182 @@ void CameraBinControl::setViewfinderColorSpaceConversion(bool enabled) g_object_set(G_OBJECT(m_session->cameraBin()), "flags", flags, NULL); } +QCamera::LockTypes CameraBinControl::supportedLocks() const +{ + QCamera::LockTypes locks = QCamera::LockFocus; + + if (GstPhotography *photography = m_session->photography()) { + if (gst_photography_get_capabilities(photography) & GST_PHOTOGRAPHY_CAPS_WB_MODE) + locks |= QCamera::LockWhiteBalance; + + if (GstElement *source = m_session->cameraSource()) { + if (g_object_class_find_property( + G_OBJECT_GET_CLASS(source), "exposure-mode")) { + locks |= QCamera::LockExposure; + } + } + } + + return locks; +} + +QCamera::LockStatus CameraBinControl::lockStatus(QCamera::LockType lock) const +{ + switch (lock) { + case QCamera::LockFocus: + return m_focus->focusStatus(); + case QCamera::LockExposure: + if (m_pendingLocks & QCamera::LockExposure) + return QCamera::Searching; + return isExposureLocked() ? QCamera::Locked : QCamera::Unlocked; + case QCamera::LockWhiteBalance: + if (m_pendingLocks & QCamera::LockWhiteBalance) + return QCamera::Searching; + return isWhiteBalanceLocked() ? QCamera::Locked : QCamera::Unlocked; + default: + return QCamera::Unlocked; + } +} + +void CameraBinControl::searchAndLock(QCamera::LockTypes locks) +{ + m_pendingLocks &= ~locks; + + if (locks & QCamera::LockFocus) { + m_pendingLocks |= QCamera::LockFocus; + m_focus->_q_startFocusing(); + } + if (!m_pendingLocks) + m_lockTimer.stop(); + + if (locks & QCamera::LockExposure) { + if (isExposureLocked()) { + unlockExposure(QCamera::Searching, QCamera::UserRequest); + m_pendingLocks |= QCamera::LockExposure; + m_lockTimer.start(1000, this); + } else { + lockExposure(QCamera::UserRequest); + } + } + if (locks & QCamera::LockWhiteBalance) { + if (isWhiteBalanceLocked()) { + unlockWhiteBalance(QCamera::Searching, QCamera::UserRequest); + m_pendingLocks |= QCamera::LockWhiteBalance; + m_lockTimer.start(1000, this); + } else { + lockWhiteBalance(QCamera::UserRequest); + } + } +} + +void CameraBinControl::unlock(QCamera::LockTypes locks) +{ + m_pendingLocks &= ~locks; + + if (locks & QCamera::LockFocus) + m_focus->_q_stopFocusing(); + + if (!m_pendingLocks) + m_lockTimer.stop(); + + if (locks & QCamera::LockExposure) + unlockExposure(QCamera::Unlocked, QCamera::UserRequest); + if (locks & QCamera::LockWhiteBalance) + unlockWhiteBalance(QCamera::Unlocked, QCamera::UserRequest); +} + +void CameraBinControl::updateFocusStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason) +{ + if (status != QCamera::Searching) + m_pendingLocks &= ~QCamera::LockFocus; + + if (status == QCamera::Locked && !m_lockTimer.isActive()) { + if (m_pendingLocks & QCamera::LockExposure) + lockExposure(QCamera::LockAcquired); + if (m_pendingLocks & QCamera::LockWhiteBalance) + lockWhiteBalance(QCamera::LockAcquired); + } + emit lockStatusChanged(QCamera::LockFocus, status, reason); +} + +void CameraBinControl::timerEvent(QTimerEvent *event) +{ + if (event->timerId() != m_lockTimer.timerId()) + return QCameraControl::timerEvent(event); + + m_lockTimer.stop(); + + if (!(m_pendingLocks & QCamera::LockFocus)) { + if (m_pendingLocks & QCamera::LockExposure) + lockExposure(QCamera::LockAcquired); + if (m_pendingLocks & QCamera::LockWhiteBalance) + lockWhiteBalance(QCamera::LockAcquired); + } +} + +bool CameraBinControl::isExposureLocked() const +{ + if (GstElement *source = m_session->cameraSource()) { + GstPhotographyExposureMode exposureMode = GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO; + g_object_get (G_OBJECT(source), "exposure-mode", &exposureMode, NULL); + return exposureMode == GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL; + } else { + return false; + } +} + +void CameraBinControl::lockExposure(QCamera::LockChangeReason reason) +{ + GstElement *source = m_session->cameraSource(); + if (!source) + return; + + m_pendingLocks &= ~QCamera::LockExposure; + g_object_set( + G_OBJECT(source), + "exposure-mode", + GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL, + NULL); + emit lockStatusChanged(QCamera::LockExposure, QCamera::Locked, reason); +} + +void CameraBinControl::unlockExposure(QCamera::LockStatus status, QCamera::LockChangeReason reason) +{ + GstElement *source = m_session->cameraSource(); + if (!source) + return; + + g_object_set( + G_OBJECT(source), + "exposure-mode", + GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO, + NULL); + emit lockStatusChanged(QCamera::LockExposure, status, reason); +} + +bool CameraBinControl::isWhiteBalanceLocked() const +{ + if (GstPhotography *photography = m_session->photography()) { + GstPhotographyWhiteBalanceMode whiteBalanceMode; + return gst_photography_get_white_balance_mode(photography, &whiteBalanceMode) + && whiteBalanceMode == GST_PHOTOGRAPHY_WB_MODE_MANUAL; + } else { + return false; + } +} + +void CameraBinControl::lockWhiteBalance(QCamera::LockChangeReason reason) +{ + m_pendingLocks &= ~QCamera::LockWhiteBalance; + m_session->imageProcessingControl()->lockWhiteBalance(); + emit lockStatusChanged(QCamera::LockWhiteBalance, QCamera::Locked, reason); +} + +void CameraBinControl::unlockWhiteBalance( + QCamera::LockStatus status, QCamera::LockChangeReason reason) +{ + m_session->imageProcessingControl()->lockWhiteBalance(); + emit lockStatusChanged(QCamera::LockWhiteBalance, status, reason); +} + QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/camerabin/camerabincontrol.h b/src/plugins/gstreamer/camerabin/camerabincontrol.h index 7210fa090..4b72e3d14 100644 --- a/src/plugins/gstreamer/camerabin/camerabincontrol.h +++ b/src/plugins/gstreamer/camerabin/camerabincontrol.h @@ -42,6 +42,7 @@ #define CAMERABINCONTROL_H #include <QHash> +#include <qbasictimer.h> #include <qcameracontrol.h> #include "camerabinsession.h" @@ -69,6 +70,13 @@ public: bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override; bool viewfinderColorSpaceConversion() const; + QCamera::LockTypes supportedLocks() const override; + + QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; + + void searchAndLock(QCamera::LockTypes locks) override; + void unlock(QCamera::LockTypes locks) override; + public slots: void reloadLater(); void setViewfinderColorSpaceConversion(bool enabled); @@ -82,10 +90,29 @@ private slots: private: void updateSupportedResolutions(const QString &device); +protected: + void timerEvent(QTimerEvent *event) override; + +private slots: + void updateFocusStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason); + +private: + bool isExposureLocked() const; + void lockExposure(QCamera::LockChangeReason reason); + void unlockExposure(QCamera::LockStatus status, QCamera::LockChangeReason reason); + + bool isWhiteBalanceLocked() const; + void lockWhiteBalance(QCamera::LockChangeReason reason); + void unlockWhiteBalance(QCamera::LockStatus status, QCamera::LockChangeReason reason); + CameraBinSession *m_session; QCamera::State m_state; bool m_reloadPending; + + CameraBinFocus *m_focus; + QBasicTimer m_lockTimer; + QCamera::LockTypes m_pendingLocks; }; QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/camerabin/camerabinlocks.cpp b/src/plugins/gstreamer/camerabin/camerabinlocks.cpp deleted file mode 100644 index 9891ace84..000000000 --- a/src/plugins/gstreamer/camerabin/camerabinlocks.cpp +++ /dev/null @@ -1,244 +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 "camerabinlocks.h" -#include "camerabinsession.h" -#include "camerabinfocus.h" -#include "camerabinimageprocessing.h" - -#include <QtCore/qcoreevent.h> - -#include <gst/interfaces/photography.h> - -#include <QDebug> - -QT_BEGIN_NAMESPACE - -CameraBinLocks::CameraBinLocks(CameraBinSession *session) - :QCameraLocksControl(session), - m_session(session), - m_focus(m_session->cameraFocusControl()) -{ - connect(m_focus, SIGNAL(_q_focusStatusChanged(QCamera::LockStatus,QCamera::LockChangeReason)), - this, SLOT(updateFocusStatus(QCamera::LockStatus,QCamera::LockChangeReason))); -} - -CameraBinLocks::~CameraBinLocks() -{ -} - -QCamera::LockTypes CameraBinLocks::supportedLocks() const -{ - QCamera::LockTypes locks = QCamera::LockFocus; - - if (GstPhotography *photography = m_session->photography()) { - if (gst_photography_get_capabilities(photography) & GST_PHOTOGRAPHY_CAPS_WB_MODE) - locks |= QCamera::LockWhiteBalance; - - if (GstElement *source = m_session->cameraSource()) { - if (g_object_class_find_property( - G_OBJECT_GET_CLASS(source), "exposure-mode")) { - locks |= QCamera::LockExposure; - } - } - } - - return locks; -} - -QCamera::LockStatus CameraBinLocks::lockStatus(QCamera::LockType lock) const -{ - switch (lock) { - case QCamera::LockFocus: - return m_focus->focusStatus(); - case QCamera::LockExposure: - if (m_pendingLocks & QCamera::LockExposure) - return QCamera::Searching; - return isExposureLocked() ? QCamera::Locked : QCamera::Unlocked; - case QCamera::LockWhiteBalance: - if (m_pendingLocks & QCamera::LockWhiteBalance) - return QCamera::Searching; - return isWhiteBalanceLocked() ? QCamera::Locked : QCamera::Unlocked; - default: - return QCamera::Unlocked; - } -} - -void CameraBinLocks::searchAndLock(QCamera::LockTypes locks) -{ - m_pendingLocks &= ~locks; - - if (locks & QCamera::LockFocus) { - m_pendingLocks |= QCamera::LockFocus; - m_focus->_q_startFocusing(); - } - if (!m_pendingLocks) - m_lockTimer.stop(); - - if (locks & QCamera::LockExposure) { - if (isExposureLocked()) { - unlockExposure(QCamera::Searching, QCamera::UserRequest); - m_pendingLocks |= QCamera::LockExposure; - m_lockTimer.start(1000, this); - } else { - lockExposure(QCamera::UserRequest); - } - } - if (locks & QCamera::LockWhiteBalance) { - if (isWhiteBalanceLocked()) { - unlockWhiteBalance(QCamera::Searching, QCamera::UserRequest); - m_pendingLocks |= QCamera::LockWhiteBalance; - m_lockTimer.start(1000, this); - } else { - lockWhiteBalance(QCamera::UserRequest); - } - } -} - -void CameraBinLocks::unlock(QCamera::LockTypes locks) -{ - m_pendingLocks &= ~locks; - - if (locks & QCamera::LockFocus) - m_focus->_q_stopFocusing(); - - if (!m_pendingLocks) - m_lockTimer.stop(); - - if (locks & QCamera::LockExposure) - unlockExposure(QCamera::Unlocked, QCamera::UserRequest); - if (locks & QCamera::LockWhiteBalance) - unlockWhiteBalance(QCamera::Unlocked, QCamera::UserRequest); -} - -void CameraBinLocks::updateFocusStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason) -{ - if (status != QCamera::Searching) - m_pendingLocks &= ~QCamera::LockFocus; - - if (status == QCamera::Locked && !m_lockTimer.isActive()) { - if (m_pendingLocks & QCamera::LockExposure) - lockExposure(QCamera::LockAcquired); - if (m_pendingLocks & QCamera::LockWhiteBalance) - lockWhiteBalance(QCamera::LockAcquired); - } - emit lockStatusChanged(QCamera::LockFocus, status, reason); -} - -void CameraBinLocks::timerEvent(QTimerEvent *event) -{ - if (event->timerId() != m_lockTimer.timerId()) - return QCameraLocksControl::timerEvent(event); - - m_lockTimer.stop(); - - if (!(m_pendingLocks & QCamera::LockFocus)) { - if (m_pendingLocks & QCamera::LockExposure) - lockExposure(QCamera::LockAcquired); - if (m_pendingLocks & QCamera::LockWhiteBalance) - lockWhiteBalance(QCamera::LockAcquired); - } -} - -bool CameraBinLocks::isExposureLocked() const -{ - if (GstElement *source = m_session->cameraSource()) { - GstPhotographyExposureMode exposureMode = GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO; - g_object_get (G_OBJECT(source), "exposure-mode", &exposureMode, NULL); - return exposureMode == GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL; - } else { - return false; - } -} - -void CameraBinLocks::lockExposure(QCamera::LockChangeReason reason) -{ - GstElement *source = m_session->cameraSource(); - if (!source) - return; - - m_pendingLocks &= ~QCamera::LockExposure; - g_object_set( - G_OBJECT(source), - "exposure-mode", - GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL, - NULL); - emit lockStatusChanged(QCamera::LockExposure, QCamera::Locked, reason); -} - -void CameraBinLocks::unlockExposure(QCamera::LockStatus status, QCamera::LockChangeReason reason) -{ - GstElement *source = m_session->cameraSource(); - if (!source) - return; - - g_object_set( - G_OBJECT(source), - "exposure-mode", - GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO, - NULL); - emit lockStatusChanged(QCamera::LockExposure, status, reason); -} - -bool CameraBinLocks::isWhiteBalanceLocked() const -{ - if (GstPhotography *photography = m_session->photography()) { - GstPhotographyWhiteBalanceMode whiteBalanceMode; - return gst_photography_get_white_balance_mode(photography, &whiteBalanceMode) - && whiteBalanceMode == GST_PHOTOGRAPHY_WB_MODE_MANUAL; - } else { - return false; - } -} - -void CameraBinLocks::lockWhiteBalance(QCamera::LockChangeReason reason) -{ - m_pendingLocks &= ~QCamera::LockWhiteBalance; - m_session->imageProcessingControl()->lockWhiteBalance(); - emit lockStatusChanged(QCamera::LockWhiteBalance, QCamera::Locked, reason); -} - -void CameraBinLocks::unlockWhiteBalance( - QCamera::LockStatus status, QCamera::LockChangeReason reason) -{ - m_session->imageProcessingControl()->lockWhiteBalance(); - emit lockStatusChanged(QCamera::LockWhiteBalance, status, reason); -} - -QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/camerabin/camerabinlocks.h b/src/plugins/gstreamer/camerabin/camerabinlocks.h deleted file mode 100644 index dcc960e8e..000000000 --- a/src/plugins/gstreamer/camerabin/camerabinlocks.h +++ /dev/null @@ -1,94 +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 CAMERABINLOCKSCONTROL_H -#define CAMERABINLOCKSCONTROL_H - -#include <qcamera.h> -#include <qcameralockscontrol.h> - -#include <QtCore/qbasictimer.h> - -#include <gst/gst.h> -#include <glib.h> - -QT_BEGIN_NAMESPACE - -class CameraBinSession; -class CameraBinFocus; - -class CameraBinLocks : public QCameraLocksControl -{ - Q_OBJECT - -public: - CameraBinLocks(CameraBinSession *session); - virtual ~CameraBinLocks(); - - QCamera::LockTypes supportedLocks() const override; - - QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; - - void searchAndLock(QCamera::LockTypes locks) override; - void unlock(QCamera::LockTypes locks) override; - -protected: - void timerEvent(QTimerEvent *event) override; - -private slots: - void updateFocusStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason); - -private: - bool isExposureLocked() const; - void lockExposure(QCamera::LockChangeReason reason); - void unlockExposure(QCamera::LockStatus status, QCamera::LockChangeReason reason); - - bool isWhiteBalanceLocked() const; - void lockWhiteBalance(QCamera::LockChangeReason reason); - void unlockWhiteBalance(QCamera::LockStatus status, QCamera::LockChangeReason reason); - - CameraBinSession *m_session; - CameraBinFocus *m_focus; - QBasicTimer m_lockTimer; - QCamera::LockTypes m_pendingLocks; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/gstreamer/camerabin/camerabinservice.cpp b/src/plugins/gstreamer/camerabin/camerabinservice.cpp index fde52d2ad..6c643cb6f 100644 --- a/src/plugins/gstreamer/camerabin/camerabinservice.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinservice.cpp @@ -51,7 +51,6 @@ #if QT_CONFIG(gstreamer_photography) #include "camerabinexposure.h" #include "camerabinfocus.h" -#include "camerabinlocks.h" #endif #include "camerabinimagecapture.h" @@ -203,9 +202,6 @@ QMediaControl *CameraBinService::requestControl(const char *name) if (qstrcmp(name, QCameraFocusControl_iid) == 0) return m_captureSession->cameraFocusControl(); - - if (qstrcmp(name, QCameraLocksControl_iid) == 0) - return m_captureSession->cameraLocksControl(); #endif if (qstrcmp(name, QCameraImageProcessingControl_iid) == 0) diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp index df26afbdd..39a552ae8 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp @@ -49,7 +49,6 @@ #if QT_CONFIG(gstreamer_photography) #include "camerabinexposure.h" #include "camerabinfocus.h" -#include "camerabinlocks.h" #endif #include "camerabinimageprocessing.h" @@ -131,7 +130,6 @@ CameraBinSession::CameraBinSession(GstElementFactory *sourceFactory, QObject *pa #if QT_CONFIG(gstreamer_photography) m_cameraExposureControl(0), m_cameraFocusControl(0), - m_cameraLocksControl(0), #endif m_cameraSrc(0), m_videoSrc(0), @@ -240,13 +238,6 @@ CameraBinFocus *CameraBinSession::cameraFocusControl() m_cameraFocusControl = new CameraBinFocus(this); return m_cameraFocusControl; } - -CameraBinLocks *CameraBinSession::cameraLocksControl() -{ - if (!m_cameraLocksControl && photography()) - m_cameraLocksControl = new CameraBinLocks(this); - return m_cameraLocksControl; -} #endif bool CameraBinSession::setupCameraBin() diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.h b/src/plugins/gstreamer/camerabin/camerabinsession.h index 39f71c7e9..5c528a1e2 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.h +++ b/src/plugins/gstreamer/camerabin/camerabinsession.h @@ -121,7 +121,6 @@ public: #if QT_CONFIG(gstreamer_photography) CameraBinExposure *cameraExposureControl(); CameraBinFocus *cameraFocusControl(); - CameraBinLocks *cameraLocksControl(); #endif CameraBinImageProcessing *imageProcessingControl() const { return m_imageProcessingControl; } @@ -238,7 +237,6 @@ private: #if QT_CONFIG(gstreamer_photography) CameraBinExposure *m_cameraExposureControl; CameraBinFocus *m_cameraFocusControl; - CameraBinLocks *m_cameraLocksControl; #endif CameraBinImageProcessing *m_imageProcessingControl; CameraBinCaptureBufferFormat *m_captureBufferFormatControl; diff --git a/src/plugins/qnx/camera/bbcameracontrol.cpp b/src/plugins/qnx/camera/bbcameracontrol.cpp index 8652c0528..d47b31dc9 100644 --- a/src/plugins/qnx/camera/bbcameracontrol.cpp +++ b/src/plugins/qnx/camera/bbcameracontrol.cpp @@ -50,6 +50,9 @@ BbCameraControl::BbCameraControl(BbCameraSession *session, QObject *parent) connect(m_session, SIGNAL(stateChanged(QCamera::State)), this, SIGNAL(stateChanged(QCamera::State))); connect(m_session, SIGNAL(error(int,QString)), this, SIGNAL(error(int,QString))); connect(m_session, SIGNAL(captureModeChanged(QCamera::CaptureModes)), this, SIGNAL(captureModeChanged(QCamera::CaptureModes))); + + connect(m_session, SIGNAL(cameraOpened()), SLOT(cameraOpened())); + connect(m_session, SIGNAL(focusStatusChanged(int)), SLOT(focusStatusChanged(int))); } QCamera::State BbCameraControl::state() const @@ -87,4 +90,201 @@ bool BbCameraControl::canChangeProperty(PropertyChangeType /* changeType */, QCa return false; } +QCamera::LockTypes BbCameraControl::supportedLocks() const +{ + return (QCamera::LockFocus | QCamera::LockExposure | QCamera::LockWhiteBalance); +} + +QCamera::LockStatus BbCameraControl::lockStatus(QCamera::LockType lock) const +{ + if (!m_supportedLockTypes.testFlag(lock) || (m_session->handle() == CAMERA_HANDLE_INVALID)) + return QCamera::Locked; + + switch (lock) { + case QCamera::LockExposure: + return m_exposureLockStatus; + case QCamera::LockWhiteBalance: + return m_whiteBalanceLockStatus; + case QCamera::LockFocus: + return m_focusLockStatus; + default: + return QCamera::Locked; + } +} + +void BbCameraControl::searchAndLock(QCamera::LockTypes locks) +{ + if (m_session->handle() == CAMERA_HANDLE_INVALID) + return; + + // filter out unsupported locks + locks &= m_supportedLockTypes; + + m_currentLockTypes |= locks; + + uint32_t lockModes = CAMERA_3A_NONE; + + switch (m_locksApplyMode) { + case IndependentMode: + if (m_currentLockTypes & QCamera::LockExposure) + lockModes |= CAMERA_3A_AUTOEXPOSURE; + if (m_currentLockTypes & QCamera::LockWhiteBalance) + lockModes |= CAMERA_3A_AUTOWHITEBALANCE; + if (m_currentLockTypes & QCamera::LockFocus) + lockModes |= CAMERA_3A_AUTOFOCUS; + break; + case FocusExposureBoundMode: + if ((m_currentLockTypes & QCamera::LockExposure) || (m_currentLockTypes & QCamera::LockFocus)) + lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS); + break; + case AllBoundMode: + lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOWHITEBALANCE); + break; + case FocusOnlyMode: + lockModes = CAMERA_3A_AUTOFOCUS; + break; + } + + const camera_error_t result = camera_set_3a_lock(m_session->handle(), lockModes); + + if (result != CAMERA_EOK) { + qWarning() << "Unable to set lock modes:" << result; + } else { + if (lockModes & CAMERA_3A_AUTOFOCUS) { + // handled by focusStatusChanged() + } + + if (lockModes & CAMERA_3A_AUTOEXPOSURE) { + m_exposureLockStatus = QCamera::Locked; + emit lockStatusChanged(QCamera::LockExposure, QCamera::Locked, QCamera::LockAcquired); + } + + if (lockModes & CAMERA_3A_AUTOWHITEBALANCE) { + m_whiteBalanceLockStatus = QCamera::Locked; + emit lockStatusChanged(QCamera::LockWhiteBalance, QCamera::Locked, QCamera::LockAcquired); + } + } +} + +void BbCameraControl::unlock(QCamera::LockTypes locks) +{ + // filter out unsupported locks + locks &= m_supportedLockTypes; + + m_currentLockTypes &= ~locks; + + uint32_t lockModes = CAMERA_3A_NONE; + + switch (m_locksApplyMode) { + case IndependentMode: + if (m_currentLockTypes & QCamera::LockExposure) + lockModes |= CAMERA_3A_AUTOEXPOSURE; + if (m_currentLockTypes & QCamera::LockWhiteBalance) + lockModes |= CAMERA_3A_AUTOWHITEBALANCE; + if (m_currentLockTypes & QCamera::LockFocus) + lockModes |= CAMERA_3A_AUTOFOCUS; + break; + case FocusExposureBoundMode: + if ((m_currentLockTypes & QCamera::LockExposure) || (m_currentLockTypes & QCamera::LockFocus)) + lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS); + break; + case AllBoundMode: + lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOWHITEBALANCE); + break; + case FocusOnlyMode: + lockModes = CAMERA_3A_AUTOFOCUS; + break; + } + + const camera_error_t result = camera_set_3a_lock(m_session->handle(), lockModes); + + if (result != CAMERA_EOK) { + qWarning() << "Unable to set lock modes:" << result; + } else { + if (locks.testFlag(QCamera::LockFocus)) { + // handled by focusStatusChanged() + } + + if (locks.testFlag(QCamera::LockExposure)) { + m_exposureLockStatus = QCamera::Unlocked; + emit lockStatusChanged(QCamera::LockExposure, QCamera::Unlocked, QCamera::UserRequest); + } + + if (locks.testFlag(QCamera::LockWhiteBalance)) { + m_whiteBalanceLockStatus = QCamera::Unlocked; + emit lockStatusChanged(QCamera::LockWhiteBalance, QCamera::Unlocked, QCamera::UserRequest); + } + } +} + +void BbCameraControl::cameraOpened() +{ + // retrieve information about lock apply modes + int supported = 0; + uint32_t modes[20]; + + const camera_error_t result = camera_get_3a_lock_modes(m_session->handle(), 20, &supported, modes); + + if (result == CAMERA_EOK) { + // see API documentation of camera_get_3a_lock_modes for explanation of case discrimination below + if (supported == 4) { + m_locksApplyMode = IndependentMode; + } else if (supported == 3) { + m_locksApplyMode = FocusExposureBoundMode; + } else if (supported == 2) { + if (modes[0] == (CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOWHITEBALANCE)) + m_locksApplyMode = AllBoundMode; + else + m_locksApplyMode = FocusOnlyMode; + } + } + + // retrieve information about supported lock types + m_supportedLockTypes = QCamera::NoLock; + + if (camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOFOCUS)) + m_supportedLockTypes |= QCamera::LockFocus; + + if (camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOEXPOSURE)) + m_supportedLockTypes |= QCamera::LockExposure; + + if (camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOWHITEBALANCE)) + m_supportedLockTypes |= QCamera::LockWhiteBalance; + + m_focusLockStatus = QCamera::Unlocked; + m_exposureLockStatus = QCamera::Unlocked; + m_whiteBalanceLockStatus = QCamera::Unlocked; +} + +void BbCameraControl::focusStatusChanged(int value) +{ + const camera_focusstate_t focusState = static_cast<camera_focusstate_t>(value); + + switch (focusState) { + case CAMERA_FOCUSSTATE_NONE: + m_focusLockStatus = QCamera::Unlocked; + emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::UserRequest); + break; + case CAMERA_FOCUSSTATE_WAITING: + case CAMERA_FOCUSSTATE_SEARCHING: + m_focusLockStatus = QCamera::Searching; + emit lockStatusChanged(QCamera::LockFocus, QCamera::Searching, QCamera::UserRequest); + break; + case CAMERA_FOCUSSTATE_FAILED: + m_focusLockStatus = QCamera::Unlocked; + emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::LockFailed); + break; + case CAMERA_FOCUSSTATE_LOCKED: + m_focusLockStatus = QCamera::Locked; + emit lockStatusChanged(QCamera::LockFocus, QCamera::Locked, QCamera::LockAcquired); + break; + case CAMERA_FOCUSSTATE_SCENECHANGE: + m_focusLockStatus = QCamera::Unlocked; + emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::LockTemporaryLost); + break; + default: + break; + } +} + QT_END_NAMESPACE diff --git a/src/plugins/qnx/camera/bbcameracontrol.h b/src/plugins/qnx/camera/bbcameracontrol.h index 0c97bd83c..8401b5b26 100644 --- a/src/plugins/qnx/camera/bbcameracontrol.h +++ b/src/plugins/qnx/camera/bbcameracontrol.h @@ -62,6 +62,33 @@ public: bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const override; + enum LocksApplyMode + { + IndependentMode, + FocusExposureBoundMode, + AllBoundMode, + FocusOnlyMode + }; + + QCamera::LockTypes supportedLocks() const override; + QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; + void searchAndLock(QCamera::LockTypes locks) override; + void unlock(QCamera::LockTypes locks) override; + +private Q_SLOTS: + void cameraOpened(); + void focusStatusChanged(int value); + +private: + BbCameraSession *m_session; + + LocksApplyMode m_locksApplyMode = IndependentMode; + QCamera::LockStatus m_focusLockStatus = QCamera::Unlocked; + QCamera::LockStatus m_exposureLockStatus = QCamera::Unlocked; + QCamera::LockStatus m_whiteBalanceLockStatus = QCamera::Unlocked; + QCamera::LockTypes m_currentLockTypes = QCamera::NoLock; + QCamera::LockTypes m_supportedLockTypes = QCamera::NoLock; + private: BbCameraSession *m_session; }; diff --git a/src/plugins/qnx/camera/bbcameralockscontrol.cpp b/src/plugins/qnx/camera/bbcameralockscontrol.cpp deleted file mode 100644 index 5802064e6..000000000 --- a/src/plugins/qnx/camera/bbcameralockscontrol.cpp +++ /dev/null @@ -1,256 +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 "bbcameralockscontrol.h" - -#include "bbcamerasession.h" - -QT_BEGIN_NAMESPACE - -BbCameraLocksControl::BbCameraLocksControl(BbCameraSession *session, QObject *parent) - : QCameraLocksControl(parent) - , m_session(session) - , m_locksApplyMode(IndependentMode) - , m_focusLockStatus(QCamera::Unlocked) - , m_exposureLockStatus(QCamera::Unlocked) - , m_whiteBalanceLockStatus(QCamera::Unlocked) - , m_currentLockTypes(QCamera::NoLock) - , m_supportedLockTypes(QCamera::NoLock) -{ - connect(m_session, SIGNAL(cameraOpened()), SLOT(cameraOpened())); - connect(m_session, SIGNAL(focusStatusChanged(int)), SLOT(focusStatusChanged(int))); -} - -QCamera::LockTypes BbCameraLocksControl::supportedLocks() const -{ - return (QCamera::LockFocus | QCamera::LockExposure | QCamera::LockWhiteBalance); -} - -QCamera::LockStatus BbCameraLocksControl::lockStatus(QCamera::LockType lock) const -{ - if (!m_supportedLockTypes.testFlag(lock) || (m_session->handle() == CAMERA_HANDLE_INVALID)) - return QCamera::Locked; - - switch (lock) { - case QCamera::LockExposure: - return m_exposureLockStatus; - case QCamera::LockWhiteBalance: - return m_whiteBalanceLockStatus; - case QCamera::LockFocus: - return m_focusLockStatus; - default: - return QCamera::Locked; - } -} - -void BbCameraLocksControl::searchAndLock(QCamera::LockTypes locks) -{ - if (m_session->handle() == CAMERA_HANDLE_INVALID) - return; - - // filter out unsupported locks - locks &= m_supportedLockTypes; - - m_currentLockTypes |= locks; - - uint32_t lockModes = CAMERA_3A_NONE; - - switch (m_locksApplyMode) { - case IndependentMode: - if (m_currentLockTypes & QCamera::LockExposure) - lockModes |= CAMERA_3A_AUTOEXPOSURE; - if (m_currentLockTypes & QCamera::LockWhiteBalance) - lockModes |= CAMERA_3A_AUTOWHITEBALANCE; - if (m_currentLockTypes & QCamera::LockFocus) - lockModes |= CAMERA_3A_AUTOFOCUS; - break; - case FocusExposureBoundMode: - if ((m_currentLockTypes & QCamera::LockExposure) || (m_currentLockTypes & QCamera::LockFocus)) - lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS); - break; - case AllBoundMode: - lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOWHITEBALANCE); - break; - case FocusOnlyMode: - lockModes = CAMERA_3A_AUTOFOCUS; - break; - } - - const camera_error_t result = camera_set_3a_lock(m_session->handle(), lockModes); - - if (result != CAMERA_EOK) { - qWarning() << "Unable to set lock modes:" << result; - } else { - if (lockModes & CAMERA_3A_AUTOFOCUS) { - // handled by focusStatusChanged() - } - - if (lockModes & CAMERA_3A_AUTOEXPOSURE) { - m_exposureLockStatus = QCamera::Locked; - emit lockStatusChanged(QCamera::LockExposure, QCamera::Locked, QCamera::LockAcquired); - } - - if (lockModes & CAMERA_3A_AUTOWHITEBALANCE) { - m_whiteBalanceLockStatus = QCamera::Locked; - emit lockStatusChanged(QCamera::LockWhiteBalance, QCamera::Locked, QCamera::LockAcquired); - } - } -} - -void BbCameraLocksControl::unlock(QCamera::LockTypes locks) -{ - // filter out unsupported locks - locks &= m_supportedLockTypes; - - m_currentLockTypes &= ~locks; - - uint32_t lockModes = CAMERA_3A_NONE; - - switch (m_locksApplyMode) { - case IndependentMode: - if (m_currentLockTypes & QCamera::LockExposure) - lockModes |= CAMERA_3A_AUTOEXPOSURE; - if (m_currentLockTypes & QCamera::LockWhiteBalance) - lockModes |= CAMERA_3A_AUTOWHITEBALANCE; - if (m_currentLockTypes & QCamera::LockFocus) - lockModes |= CAMERA_3A_AUTOFOCUS; - break; - case FocusExposureBoundMode: - if ((m_currentLockTypes & QCamera::LockExposure) || (m_currentLockTypes & QCamera::LockFocus)) - lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS); - break; - case AllBoundMode: - lockModes = (CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOWHITEBALANCE); - break; - case FocusOnlyMode: - lockModes = CAMERA_3A_AUTOFOCUS; - break; - } - - const camera_error_t result = camera_set_3a_lock(m_session->handle(), lockModes); - - if (result != CAMERA_EOK) { - qWarning() << "Unable to set lock modes:" << result; - } else { - if (locks.testFlag(QCamera::LockFocus)) { - // handled by focusStatusChanged() - } - - if (locks.testFlag(QCamera::LockExposure)) { - m_exposureLockStatus = QCamera::Unlocked; - emit lockStatusChanged(QCamera::LockExposure, QCamera::Unlocked, QCamera::UserRequest); - } - - if (locks.testFlag(QCamera::LockWhiteBalance)) { - m_whiteBalanceLockStatus = QCamera::Unlocked; - emit lockStatusChanged(QCamera::LockWhiteBalance, QCamera::Unlocked, QCamera::UserRequest); - } - } -} - -void BbCameraLocksControl::cameraOpened() -{ - // retrieve information about lock apply modes - int supported = 0; - uint32_t modes[20]; - - const camera_error_t result = camera_get_3a_lock_modes(m_session->handle(), 20, &supported, modes); - - if (result == CAMERA_EOK) { - // see API documentation of camera_get_3a_lock_modes for explanation of case discrimination below - if (supported == 4) { - m_locksApplyMode = IndependentMode; - } else if (supported == 3) { - m_locksApplyMode = FocusExposureBoundMode; - } else if (supported == 2) { - if (modes[0] == (CAMERA_3A_AUTOFOCUS | CAMERA_3A_AUTOEXPOSURE | CAMERA_3A_AUTOWHITEBALANCE)) - m_locksApplyMode = AllBoundMode; - else - m_locksApplyMode = FocusOnlyMode; - } - } - - // retrieve information about supported lock types - m_supportedLockTypes = QCamera::NoLock; - - if (camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOFOCUS)) - m_supportedLockTypes |= QCamera::LockFocus; - - if (camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOEXPOSURE)) - m_supportedLockTypes |= QCamera::LockExposure; - - if (camera_has_feature(m_session->handle(), CAMERA_FEATURE_AUTOWHITEBALANCE)) - m_supportedLockTypes |= QCamera::LockWhiteBalance; - - m_focusLockStatus = QCamera::Unlocked; - m_exposureLockStatus = QCamera::Unlocked; - m_whiteBalanceLockStatus = QCamera::Unlocked; -} - -void BbCameraLocksControl::focusStatusChanged(int value) -{ - const camera_focusstate_t focusState = static_cast<camera_focusstate_t>(value); - - switch (focusState) { - case CAMERA_FOCUSSTATE_NONE: - m_focusLockStatus = QCamera::Unlocked; - emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::UserRequest); - break; - case CAMERA_FOCUSSTATE_WAITING: - case CAMERA_FOCUSSTATE_SEARCHING: - m_focusLockStatus = QCamera::Searching; - emit lockStatusChanged(QCamera::LockFocus, QCamera::Searching, QCamera::UserRequest); - break; - case CAMERA_FOCUSSTATE_FAILED: - m_focusLockStatus = QCamera::Unlocked; - emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::LockFailed); - break; - case CAMERA_FOCUSSTATE_LOCKED: - m_focusLockStatus = QCamera::Locked; - emit lockStatusChanged(QCamera::LockFocus, QCamera::Locked, QCamera::LockAcquired); - break; - case CAMERA_FOCUSSTATE_SCENECHANGE: - m_focusLockStatus = QCamera::Unlocked; - emit lockStatusChanged(QCamera::LockFocus, QCamera::Unlocked, QCamera::LockTemporaryLost); - break; - default: - break; - } -} - -QT_END_NAMESPACE diff --git a/src/plugins/qnx/camera/bbcameralockscontrol.h b/src/plugins/qnx/camera/bbcameralockscontrol.h deleted file mode 100644 index be3d1bd02..000000000 --- a/src/plugins/qnx/camera/bbcameralockscontrol.h +++ /dev/null @@ -1,84 +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 BBCAMERALOCKSCONTROL_H -#define BBCAMERALOCKSCONTROL_H - -#include <qcameralockscontrol.h> - -QT_BEGIN_NAMESPACE - -class BbCameraSession; - -class BbCameraLocksControl : public QCameraLocksControl -{ - Q_OBJECT -public: - enum LocksApplyMode - { - IndependentMode, - FocusExposureBoundMode, - AllBoundMode, - FocusOnlyMode - }; - - explicit BbCameraLocksControl(BbCameraSession *session, QObject *parent = 0); - - QCamera::LockTypes supportedLocks() const override; - QCamera::LockStatus lockStatus(QCamera::LockType lock) const override; - void searchAndLock(QCamera::LockTypes locks) override; - void unlock(QCamera::LockTypes locks) override; - -private Q_SLOTS: - void cameraOpened(); - void focusStatusChanged(int value); - -private: - BbCameraSession *m_session; - - LocksApplyMode m_locksApplyMode; - QCamera::LockStatus m_focusLockStatus; - QCamera::LockStatus m_exposureLockStatus; - QCamera::LockStatus m_whiteBalanceLockStatus; - QCamera::LockTypes m_currentLockTypes; - QCamera::LockTypes m_supportedLockTypes; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/qnx/camera/bbcameraservice.cpp b/src/plugins/qnx/camera/bbcameraservice.cpp index ed18d694c..a5794220f 100644 --- a/src/plugins/qnx/camera/bbcameraservice.cpp +++ b/src/plugins/qnx/camera/bbcameraservice.cpp @@ -45,7 +45,6 @@ #include "bbcamerafocuscontrol.h" #include "bbcameraimagecapturecontrol.h" #include "bbcameraimageprocessingcontrol.h" -#include "bbcameralockscontrol.h" #include "bbcameramediarecordercontrol.h" #include "bbcamerasession.h" #include "bbcameravideoencodersettingscontrol.h" @@ -69,7 +68,6 @@ BbCameraService::BbCameraService(QObject *parent) , m_cameraFocusControl(new BbCameraFocusControl(m_cameraSession, this)) , m_cameraImageCaptureControl(new BbCameraImageCaptureControl(m_cameraSession, this)) , m_cameraImageProcessingControl(new BbCameraImageProcessingControl(m_cameraSession, this)) - , m_cameraLocksControl(new BbCameraLocksControl(m_cameraSession, this)) , m_cameraMediaRecorderControl(new BbCameraMediaRecorderControl(m_cameraSession, this)) , m_cameraVideoEncoderSettingsControl(new BbCameraVideoEncoderSettingsControl(m_cameraSession, this)) , m_cameraViewfinderSettingsControl(new BbCameraViewfinderSettingsControl(m_cameraSession, this)) @@ -99,8 +97,6 @@ QMediaControl* BbCameraService::requestControl(const char *name) return m_cameraImageCaptureControl; else if (qstrcmp(name, QCameraImageProcessingControl_iid) == 0) return m_cameraImageProcessingControl; - else if (qstrcmp(name, QCameraLocksControl_iid) == 0) - return m_cameraLocksControl; else if (qstrcmp(name, QMediaRecorderControl_iid) == 0) return m_cameraMediaRecorderControl; else if (qstrcmp(name, QVideoEncoderSettingsControl_iid) == 0) diff --git a/src/plugins/qnx/camera/bbcameraservice.h b/src/plugins/qnx/camera/bbcameraservice.h index 005ed0bfe..f3120dbe0 100644 --- a/src/plugins/qnx/camera/bbcameraservice.h +++ b/src/plugins/qnx/camera/bbcameraservice.h @@ -52,7 +52,6 @@ class BbCameraExposureControl; class BbCameraFocusControl; class BbCameraImageCaptureControl; class BbCameraImageProcessingControl; -class BbCameraLocksControl; class BbCameraMediaRecorderControl; class BbCameraSession; class BbCameraVideoEncoderSettingsControl; @@ -82,7 +81,6 @@ private: BbCameraFocusControl* m_cameraFocusControl; BbCameraImageCaptureControl* m_cameraImageCaptureControl; BbCameraImageProcessingControl* m_cameraImageProcessingControl; - BbCameraLocksControl* m_cameraLocksControl; BbCameraMediaRecorderControl* m_cameraMediaRecorderControl; BbCameraVideoEncoderSettingsControl* m_cameraVideoEncoderSettingsControl; BbCameraViewfinderSettingsControl* m_cameraViewfinderSettingsControl; diff --git a/src/plugins/qnx/camera/camera.pri b/src/plugins/qnx/camera/camera.pri index 18c61352d..aa9dccf8c 100644 --- a/src/plugins/qnx/camera/camera.pri +++ b/src/plugins/qnx/camera/camera.pri @@ -8,7 +8,6 @@ HEADERS += \ $$PWD/bbcamerafocuscontrol.h \ $$PWD/bbcameraimagecapturecontrol.h \ $$PWD/bbcameraimageprocessingcontrol.h \ - $$PWD/bbcameralockscontrol.h \ $$PWD/bbcameramediarecordercontrol.h \ $$PWD/bbcameraorientationhandler.h \ $$PWD/bbcameraservice.h \ @@ -28,7 +27,6 @@ SOURCES += \ $$PWD/bbcamerafocuscontrol.cpp \ $$PWD/bbcameraimagecapturecontrol.cpp \ $$PWD/bbcameraimageprocessingcontrol.cpp \ - $$PWD/bbcameralockscontrol.cpp \ $$PWD/bbcameramediarecordercontrol.cpp \ $$PWD/bbcameraorientationhandler.cpp \ $$PWD/bbcameraservice.cpp \ diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp index cd56ca1ac..d4c3972cf 100644 --- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp +++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp @@ -34,7 +34,6 @@ #include <qabstractvideosurface.h> #include <qcameracontrol.h> -#include <qcameralockscontrol.h> #include <qcameraexposurecontrol.h> #include <qcamerafocuscontrol.h> #include <qcameraimagecapturecontrol.h> diff --git a/tests/auto/integration/shared/mediafileselector.h b/tests/auto/integration/shared/mediafileselector.h index 984da6e2b..c1e585b02 100644 --- a/tests/auto/integration/shared/mediafileselector.h +++ b/tests/auto/integration/shared/mediafileselector.h @@ -31,6 +31,9 @@ #include <QMediaContent> #include <QMediaPlayer> +#include <qsignalspy.h> +#include <qfileinfo.h> +#include <qtest.h> QT_BEGIN_NAMESPACE diff --git a/tests/auto/unit/qcamera/CMakeLists.txt b/tests/auto/unit/qcamera/CMakeLists.txt index c982d7120..4fd2fb931 100644 --- a/tests/auto/unit/qcamera/CMakeLists.txt +++ b/tests/auto/unit/qcamera/CMakeLists.txt @@ -12,7 +12,6 @@ qt_add_test(tst_qcamera ../qmultimedia_common/mockcamerafocuscontrol.h ../qmultimedia_common/mockcameraimagecapturecontrol.h ../qmultimedia_common/mockcameraimageprocessingcontrol.h - ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h ../qmultimedia_common/mockimageencodercontrol.h diff --git a/tests/auto/unit/qcamera/tst_qcamera.cpp b/tests/auto/unit/qcamera/tst_qcamera.cpp index 971ba53c1..5f8f40eb0 100644 --- a/tests/auto/unit/qcamera/tst_qcamera.cpp +++ b/tests/auto/unit/qcamera/tst_qcamera.cpp @@ -33,7 +33,6 @@ #include <qabstractvideosurface.h> #include <qcameracontrol.h> -#include <qcameralockscontrol.h> #include <qcameraexposurecontrol.h> #include <qcamerafocuscontrol.h> #include <qcameraimagecapturecontrol.h> @@ -2106,7 +2105,7 @@ void tst_QCamera::testLockChangeReason() QSignalSpy lockStatusChangedSignalWithType(&camera, SIGNAL(lockStatusChanged(QCamera::LockType,QCamera::LockStatus,QCamera::LockChangeReason))); /* Set the lockChangeReason */ - service.mockLocksControl->setLockChangeReason(QCamera::LockAcquired); + service.mockControl->setLockChangeReason(QCamera::LockAcquired); /* Verify if lockChangeReson is eqaul toQCamera::LockAcquired */ QCOMPARE(lockStatusChangedSignalWithType.count(), 1); diff --git a/tests/auto/unit/qcameraimagecapture/CMakeLists.txt b/tests/auto/unit/qcameraimagecapture/CMakeLists.txt index 5e7643803..751b2b763 100644 --- a/tests/auto/unit/qcameraimagecapture/CMakeLists.txt +++ b/tests/auto/unit/qcameraimagecapture/CMakeLists.txt @@ -12,7 +12,6 @@ qt_add_test(tst_qcameraimagecapture ../qmultimedia_common/mockcamerafocuscontrol.h ../qmultimedia_common/mockcameraimagecapturecontrol.h ../qmultimedia_common/mockcameraimageprocessingcontrol.h - ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h ../qmultimedia_common/mockimageencodercontrol.h diff --git a/tests/auto/unit/qcameraimagecapture/tst_qcameraimagecapture.cpp b/tests/auto/unit/qcameraimagecapture/tst_qcameraimagecapture.cpp index cab3f8984..5340706fc 100644 --- a/tests/auto/unit/qcameraimagecapture/tst_qcameraimagecapture.cpp +++ b/tests/auto/unit/qcameraimagecapture/tst_qcameraimagecapture.cpp @@ -40,7 +40,6 @@ Reviewer Name Date Coverage ( Full / Test Case IDs ). #include <QDebug> #include <qcameracontrol.h> -#include <qcameralockscontrol.h> #include <qcameraexposurecontrol.h> #include <qcamerafocuscontrol.h> #include <qcameraimagecapturecontrol.h> diff --git a/tests/auto/unit/qcamerainfo/CMakeLists.txt b/tests/auto/unit/qcamerainfo/CMakeLists.txt index 1fed27667..83d0c2b87 100644 --- a/tests/auto/unit/qcamerainfo/CMakeLists.txt +++ b/tests/auto/unit/qcamerainfo/CMakeLists.txt @@ -12,7 +12,6 @@ qt_add_test(tst_qcamerainfo ../qmultimedia_common/mockcamerafocuscontrol.h ../qmultimedia_common/mockcameraimagecapturecontrol.h ../qmultimedia_common/mockcameraimageprocessingcontrol.h - ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h ../qmultimedia_common/mockimageencodercontrol.h diff --git a/tests/auto/unit/qcameraviewfinder/CMakeLists.txt b/tests/auto/unit/qcameraviewfinder/CMakeLists.txt index 5f298ce2e..022019f27 100644 --- a/tests/auto/unit/qcameraviewfinder/CMakeLists.txt +++ b/tests/auto/unit/qcameraviewfinder/CMakeLists.txt @@ -12,7 +12,6 @@ qt_add_test(tst_qcameraviewfinder ../qmultimedia_common/mockcamerafocuscontrol.h ../qmultimedia_common/mockcameraimagecapturecontrol.h ../qmultimedia_common/mockcameraimageprocessingcontrol.h - ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h ../qmultimedia_common/mockimageencodercontrol.h diff --git a/tests/auto/unit/qcamerawidgets/CMakeLists.txt b/tests/auto/unit/qcamerawidgets/CMakeLists.txt index 178ea2f9e..6b228bf7c 100644 --- a/tests/auto/unit/qcamerawidgets/CMakeLists.txt +++ b/tests/auto/unit/qcamerawidgets/CMakeLists.txt @@ -12,7 +12,6 @@ qt_add_test(tst_qcamerawidgets ../qmultimedia_common/mockcamerafocuscontrol.h ../qmultimedia_common/mockcameraimagecapturecontrol.h ../qmultimedia_common/mockcameraimageprocessingcontrol.h - ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h ../qmultimedia_common/mockimageencodercontrol.h diff --git a/tests/auto/unit/qcamerawidgets/tst_qcamerawidgets.cpp b/tests/auto/unit/qcamerawidgets/tst_qcamerawidgets.cpp index 72ef219a0..11221bf09 100644 --- a/tests/auto/unit/qcamerawidgets/tst_qcamerawidgets.cpp +++ b/tests/auto/unit/qcamerawidgets/tst_qcamerawidgets.cpp @@ -33,7 +33,6 @@ #include <qabstractvideosurface.h> #include <qcameracontrol.h> -#include <qcameralockscontrol.h> #include <qcameraexposurecontrol.h> #include <qcamerafocuscontrol.h> #include <qcameraimagecapturecontrol.h> diff --git a/tests/auto/unit/qdeclarativecamera/CMakeLists.txt b/tests/auto/unit/qdeclarativecamera/CMakeLists.txt index 3bcc630f6..9eec6604c 100644 --- a/tests/auto/unit/qdeclarativecamera/CMakeLists.txt +++ b/tests/auto/unit/qdeclarativecamera/CMakeLists.txt @@ -14,7 +14,6 @@ qt_add_test(tst_qdeclarativecamera ../qmultimedia_common/mockcamerafocuscontrol.h ../qmultimedia_common/mockcameraimagecapturecontrol.h ../qmultimedia_common/mockcameraimageprocessingcontrol.h - ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h ../qmultimedia_common/mockimageencodercontrol.h diff --git a/tests/auto/unit/qdeclarativemultimediaglobal/CMakeLists.txt b/tests/auto/unit/qdeclarativemultimediaglobal/CMakeLists.txt index 75af082e2..5d7911dbe 100644 --- a/tests/auto/unit/qdeclarativemultimediaglobal/CMakeLists.txt +++ b/tests/auto/unit/qdeclarativemultimediaglobal/CMakeLists.txt @@ -14,7 +14,6 @@ qt_add_test(tst_qdeclarativemultimediaglobal ../qmultimedia_common/mockcamerafocuscontrol.h ../qmultimedia_common/mockcameraimagecapturecontrol.h ../qmultimedia_common/mockcameraimageprocessingcontrol.h - ../qmultimedia_common/mockcameralockscontrol.h ../qmultimedia_common/mockcameraservice.h ../qmultimedia_common/mockcameraviewfindersettingscontrol.h ../qmultimedia_common/mockimageencodercontrol.h diff --git a/tests/auto/unit/qmultimedia_common/mockcamera.pri b/tests/auto/unit/qmultimedia_common/mockcamera.pri index edf537eeb..0c439f5ab 100644 --- a/tests/auto/unit/qmultimedia_common/mockcamera.pri +++ b/tests/auto/unit/qmultimedia_common/mockcamera.pri @@ -6,7 +6,6 @@ INCLUDEPATH += $$PWD \ HEADERS *= \ ../qmultimedia_common/mockcameraservice.h \ - ../qmultimedia_common/mockcameralockscontrol.h \ ../qmultimedia_common/mockcamerafocuscontrol.h \ ../qmultimedia_common/mockcameraimageprocessingcontrol.h \ ../qmultimedia_common/mockcameraimagecapturecontrol.h \ diff --git a/tests/auto/unit/qmultimedia_common/mockcameracontrol.h b/tests/auto/unit/qmultimedia_common/mockcameracontrol.h index 95e9be7b3..fb686f92f 100644 --- a/tests/auto/unit/qmultimedia_common/mockcameracontrol.h +++ b/tests/auto/unit/qmultimedia_common/mockcameracontrol.h @@ -30,6 +30,7 @@ #define MOCKCAMERACONTROL_H #include "qcameracontrol.h" +#include <qtimer.h> class MockCameraControl : public QCameraControl { @@ -92,11 +93,6 @@ public: return mode == QCamera::CaptureStillImage || mode == QCamera::CaptureVideo; } - QCamera::LockTypes supportedLocks() const - { - return QCamera::LockExposure | QCamera::LockFocus | QCamera::LockWhiteBalance; - } - bool canChangeProperty(PropertyChangeType changeType, QCamera::Status status) const { Q_UNUSED(status); @@ -108,6 +104,66 @@ public: return m_propertyChangesSupported; } + QCamera::LockTypes supportedLocks() const + { + return QCamera::LockExposure | QCamera::LockFocus; + } + + QCamera::LockStatus lockStatus(QCamera::LockType lock) const + { + switch (lock) { + case QCamera::LockExposure: + return m_exposureLock; + case QCamera::LockFocus: + return m_focusLock; + default: + return QCamera::Unlocked; + } + } + + void searchAndLock(QCamera::LockTypes locks) + { + if (locks & QCamera::LockExposure) { + QCamera::LockStatus newStatus = locks & QCamera::LockFocus ? QCamera::Searching : QCamera::Locked; + + if (newStatus != m_exposureLock) + emit lockStatusChanged(QCamera::LockExposure, + m_exposureLock = newStatus, + QCamera::UserRequest); + } + + if (locks & QCamera::LockFocus) { + emit lockStatusChanged(QCamera::LockFocus, + m_focusLock = QCamera::Searching, + QCamera::UserRequest); + + QTimer::singleShot(5, this, SLOT(focused())); + } + } + + void unlock(QCamera::LockTypes locks) { + if (locks & QCamera::LockFocus && m_focusLock != QCamera::Unlocked) { + emit lockStatusChanged(QCamera::LockFocus, + m_focusLock = QCamera::Unlocked, + QCamera::UserRequest); + } + + if (locks & QCamera::LockExposure && m_exposureLock != QCamera::Unlocked) { + emit lockStatusChanged(QCamera::LockExposure, + m_exposureLock = QCamera::Unlocked, + QCamera::UserRequest); + } + } + + /* helper method to emit the signal with LockChangeReason */ + void setLockChangeReason (QCamera::LockChangeReason lockChangeReason) + { + emit lockStatusChanged(QCamera::NoLock, + QCamera::Unlocked, + lockChangeReason); + + } + /* helper method to emit the signal error */ void setError(QCamera::Error err, QString errorString) { @@ -125,6 +181,28 @@ public: QCamera::CaptureModes m_captureMode; QCamera::Status m_status; bool m_propertyChangesSupported; + + +private slots: + void focused() + { + if (m_focusLock == QCamera::Searching) { + emit lockStatusChanged(QCamera::LockFocus, + m_focusLock = QCamera::Locked, + QCamera::UserRequest); + } + + if (m_exposureLock == QCamera::Searching) { + emit lockStatusChanged(QCamera::LockExposure, + m_exposureLock = QCamera::Locked, + QCamera::UserRequest); + } + } + + +private: + QCamera::LockStatus m_focusLock = QCamera::Unlocked; + QCamera::LockStatus m_exposureLock = QCamera::Unlocked; }; diff --git a/tests/auto/unit/qmultimedia_common/mockcameralockscontrol.h b/tests/auto/unit/qmultimedia_common/mockcameralockscontrol.h deleted file mode 100644 index a520ad055..000000000 --- a/tests/auto/unit/qmultimedia_common/mockcameralockscontrol.h +++ /dev/null @@ -1,131 +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 MOCKCAMERALOCKCONTROL_H -#define MOCKCAMERALOCKCONTROL_H - -#include <QTimer> -#include "qcameralockscontrol.h" - -class MockCameraLocksControl : public QCameraLocksControl -{ - Q_OBJECT -public: - MockCameraLocksControl(QObject *parent = 0): - QCameraLocksControl(parent), - m_focusLock(QCamera::Unlocked), - m_exposureLock(QCamera::Unlocked) - { - } - - ~MockCameraLocksControl() {} - - QCamera::LockTypes supportedLocks() const - { - return QCamera::LockExposure | QCamera::LockFocus; - } - - QCamera::LockStatus lockStatus(QCamera::LockType lock) const - { - switch (lock) { - case QCamera::LockExposure: - return m_exposureLock; - case QCamera::LockFocus: - return m_focusLock; - default: - return QCamera::Unlocked; - } - } - - void searchAndLock(QCamera::LockTypes locks) - { - if (locks & QCamera::LockExposure) { - QCamera::LockStatus newStatus = locks & QCamera::LockFocus ? QCamera::Searching : QCamera::Locked; - - if (newStatus != m_exposureLock) - emit lockStatusChanged(QCamera::LockExposure, - m_exposureLock = newStatus, - QCamera::UserRequest); - } - - if (locks & QCamera::LockFocus) { - emit lockStatusChanged(QCamera::LockFocus, - m_focusLock = QCamera::Searching, - QCamera::UserRequest); - - QTimer::singleShot(5, this, SLOT(focused())); - } - } - - void unlock(QCamera::LockTypes locks) { - if (locks & QCamera::LockFocus && m_focusLock != QCamera::Unlocked) { - emit lockStatusChanged(QCamera::LockFocus, - m_focusLock = QCamera::Unlocked, - QCamera::UserRequest); - } - - if (locks & QCamera::LockExposure && m_exposureLock != QCamera::Unlocked) { - emit lockStatusChanged(QCamera::LockExposure, - m_exposureLock = QCamera::Unlocked, - QCamera::UserRequest); - } - } - - /* helper method to emit the signal with LockChangeReason */ - void setLockChangeReason (QCamera::LockChangeReason lockChangeReason) - { - emit lockStatusChanged(QCamera::NoLock, - QCamera::Unlocked, - lockChangeReason); - - } - -private slots: - void focused() - { - if (m_focusLock == QCamera::Searching) { - emit lockStatusChanged(QCamera::LockFocus, - m_focusLock = QCamera::Locked, - QCamera::UserRequest); - } - - if (m_exposureLock == QCamera::Searching) { - emit lockStatusChanged(QCamera::LockExposure, - m_exposureLock = QCamera::Locked, - QCamera::UserRequest); - } - } - - -private: - QCamera::LockStatus m_focusLock; - QCamera::LockStatus m_exposureLock; -}; - - -#endif // MOCKCAMERALOCKCONTROL_H diff --git a/tests/auto/unit/qmultimedia_common/mockcameraservice.h b/tests/auto/unit/qmultimedia_common/mockcameraservice.h index 11dcb39f1..6c1665d05 100644 --- a/tests/auto/unit/qmultimedia_common/mockcameraservice.h +++ b/tests/auto/unit/qmultimedia_common/mockcameraservice.h @@ -30,7 +30,6 @@ #define MOCKCAMERASERVICE_H #include "qmediaservice.h" -#include "../qmultimedia_common/mockcameralockscontrol.h" #include "../qmultimedia_common/mockcamerafocuscontrol.h" #include "../qmultimedia_common/mockcameraimageprocessingcontrol.h" #include "../qmultimedia_common/mockcameraimagecapturecontrol.h" @@ -79,7 +78,6 @@ public: MockCameraService(): QMediaService(0) { mockControl = new MockCameraControl(this); - mockLocksControl = new MockCameraLocksControl(this); mockExposureControl = new MockCameraExposureControl(this); mockFocusControl = new MockCameraFocusControl(this); mockCaptureControl = new MockCaptureControl(mockControl, this); @@ -103,9 +101,6 @@ public: if (qstrcmp(iid, QCameraControl_iid) == 0) return mockControl; - if (qstrcmp(iid, QCameraLocksControl_iid) == 0) - return mockLocksControl; - if (qstrcmp(iid, QCameraExposureControl_iid) == 0) return mockExposureControl; @@ -156,7 +151,6 @@ public: } MockCameraControl *mockControl; - MockCameraLocksControl *mockLocksControl; MockCaptureControl *mockCaptureControl; MockCaptureBufferFormatControl *mockCaptureBufferControl; MockCameraExposureControl *mockExposureControl; |