diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2012-01-24 10:56:52 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-27 08:26:47 +0100 |
commit | 155c48b97e7ff5f4d70b777e0a954f42826276f0 (patch) | |
tree | 69caa387b99025df91fe57e8617e1dbc55c82f89 | |
parent | 817fb006c7583a852ca07df004994d1a5226d162 (diff) |
Moved zoom related properties out of QCameraFocusControl
Change-Id: I16f9b80ebbacc0b325530e81c291dc030763b65e
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
-rw-r--r-- | src/multimedia/camera/qcamerafocus.cpp | 125 | ||||
-rw-r--r-- | src/multimedia/controls/controls.pri | 2 | ||||
-rw-r--r-- | src/multimedia/controls/qcamerafocuscontrol.cpp | 68 | ||||
-rw-r--r-- | src/multimedia/controls/qcamerafocuscontrol.h | 17 | ||||
-rw-r--r-- | src/multimedia/controls/qcamerazoomcontrol.cpp | 189 | ||||
-rw-r--r-- | src/multimedia/controls/qcamerazoomcontrol.h | 92 | ||||
-rw-r--r-- | tests/auto/unit/qcamera/tst_qcamera.cpp | 6 | ||||
-rw-r--r-- | tests/auto/unit/qmultimedia_common/mockcamera.pri | 1 | ||||
-rw-r--r-- | tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h | 66 | ||||
-rw-r--r-- | tests/auto/unit/qmultimedia_common/mockcameraservice.h | 6 | ||||
-rw-r--r-- | tests/auto/unit/qmultimedia_common/mockcamerazoomcontrol.h | 134 |
11 files changed, 529 insertions, 177 deletions
diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp index e952bd039..f6f9ddc8d 100644 --- a/src/multimedia/camera/qcamerafocus.cpp +++ b/src/multimedia/camera/qcamerafocus.cpp @@ -46,6 +46,7 @@ #include <qcameracontrol.h> #include <qcameraexposurecontrol.h> #include <qcamerafocuscontrol.h> +#include <qcamerazoomcontrol.h> #include <qmediarecordercontrol.h> #include <qcameraimagecapturecontrol.h> #include <qvideodevicecontrol.h> @@ -67,6 +68,43 @@ public: } _registerCameraFocusMetaTypes; } +class QCameraFocusFakeZoomControl : public QCameraZoomControl +{ +public: + QCameraFocusFakeZoomControl(QObject *parent) : + QCameraZoomControl(parent) {} + + qreal maximumOpticalZoom() const { return 1.0; } + qreal maximumDigitalZoom() const { return 1.0; } + + qreal requestedOpticalZoom() const { return 1.0; } + qreal requestedDigitalZoom() const { return 1.0; } + qreal currentOpticalZoom() const { return 1.0; } + qreal currentDigitalZoom() const { return 1.0; } + + void zoomTo(qreal, qreal) { qWarning("The camera doesn't support zooming."); } +}; + +class QCameraFocusFakeFocusControl : public QCameraFocusControl +{ +public: + QCameraFocusFakeFocusControl(QObject *parent) : + QCameraFocusControl(parent) {} + + QCameraFocus::FocusMode focusMode() const { return QCameraFocus::AutoFocus; } + void setFocusMode(QCameraFocus::FocusMode) { qWarning("Focus mode selection is not supported"); } + bool isFocusModeSupported(QCameraFocus::FocusMode) const { return false; } + + QCameraFocus::FocusPointMode focusPointMode() const { return QCameraFocus::FocusPointAuto; } + void setFocusPointMode(QCameraFocus::FocusPointMode) { qWarning("Focus points mode selection is not supported"); } + bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const { return false; } + QPointF customFocusPoint() const { return QPointF(0.5,0.5); } + void setCustomFocusPoint(const QPointF &) { qWarning("Focus points selection is not supported"); } + + QCameraFocusZoneList focusZones() const { return QCameraFocusZoneList(); } +}; + + class QCameraFocusZoneData : public QSharedData { @@ -295,7 +333,10 @@ public: QCameraFocus *q_ptr; QCamera *camera; + QCameraFocusControl *focusControl; + QCameraZoomControl *zoomControl; + bool available; }; @@ -304,20 +345,32 @@ void QCameraFocusPrivate::initControls() Q_Q(QCameraFocus); focusControl = 0; + zoomControl = 0; QMediaService *service = camera->service(); - if (service) + if (service) { focusControl = qobject_cast<QCameraFocusControl *>(service->requestControl(QCameraFocusControl_iid)); - - if (focusControl) { - q->connect(focusControl, SIGNAL(opticalZoomChanged(qreal)), q, SIGNAL(opticalZoomChanged(qreal))); - q->connect(focusControl, SIGNAL(digitalZoomChanged(qreal)), q, SIGNAL(digitalZoomChanged(qreal))); - q->connect(focusControl, SIGNAL(maximumOpticalZoomChanged(qreal)), - q, SIGNAL(maximumOpticalZoomChanged(qreal))); - q->connect(focusControl, SIGNAL(maximumDigitalZoomChanged(qreal)), - q, SIGNAL(maximumDigitalZoomChanged(qreal))); - q->connect(focusControl, SIGNAL(focusZonesChanged()), q, SIGNAL(focusZonesChanged())); + zoomControl = qobject_cast<QCameraZoomControl *>(service->requestControl(QCameraZoomControl_iid)); } + + available = focusControl != 0; + + if (!focusControl) + focusControl = new QCameraFocusFakeFocusControl(q); + + if (!zoomControl) + zoomControl = new QCameraFocusFakeZoomControl(q); + + q->connect(focusControl, SIGNAL(focusZonesChanged()), q, SIGNAL(focusZonesChanged())); + + q->connect(zoomControl, SIGNAL(currentOpticalZoomChanged(qreal)), + q, SIGNAL(opticalZoomChanged(qreal))); + q->connect(zoomControl, SIGNAL(currentDigitalZoomChanged(qreal)), + q, SIGNAL(digitalZoomChanged(qreal))); + q->connect(zoomControl, SIGNAL(maximumOpticalZoomChanged(qreal)), + q, SIGNAL(maximumOpticalZoomChanged(qreal))); + q->connect(zoomControl, SIGNAL(maximumDigitalZoomChanged(qreal)), + q, SIGNAL(maximumDigitalZoomChanged(qreal))); } /*! @@ -350,7 +403,7 @@ QCameraFocus::~QCameraFocus() */ bool QCameraFocus::isAvailable() const { - return d_func()->focusControl != 0; + return d_func()->available; } /*! @@ -365,22 +418,21 @@ bool QCameraFocus::isAvailable() const QCameraFocus::FocusMode QCameraFocus::focusMode() const { - return d_func()->focusControl ? d_func()->focusControl->focusMode() : QCameraFocus::AutoFocus; + return d_func()->focusControl->focusMode(); } void QCameraFocus::setFocusMode(QCameraFocus::FocusMode mode) { - if (d_func()->focusControl) - d_func()->focusControl->setFocusMode(mode); + d_func()->focusControl->setFocusMode(mode); } /*! Returns true if the focus \a mode is supported by camera. */ -bool QCameraFocus::isFocusModeSupported(QCameraFocus::FocusMode mode) const +bool QCameraFocus::isFocusModeSupported(FocusMode mode) const { - return d_func()->focusControl ? d_func()->focusControl->isFocusModeSupported(mode) : false; + return d_func()->focusControl->isFocusModeSupported(mode); } /*! @@ -396,17 +448,12 @@ bool QCameraFocus::isFocusModeSupported(QCameraFocus::FocusMode mode) const QCameraFocus::FocusPointMode QCameraFocus::focusPointMode() const { - return d_func()->focusControl ? - d_func()->focusControl->focusPointMode() : - QCameraFocus::FocusPointAuto; + return d_func()->focusControl->focusPointMode(); } void QCameraFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode) { - if (d_func()->focusControl) - d_func()->focusControl->setFocusPointMode(mode); - else - qWarning("Focus points mode selection is not supported"); + d_func()->focusControl->setFocusPointMode(mode); } /*! @@ -414,10 +461,7 @@ void QCameraFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode) */ bool QCameraFocus::isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const { - return d_func()->focusControl ? - d_func()->focusControl->isFocusPointModeSupported(mode) : - false; - + return d_func()->focusControl->isFocusPointModeSupported(mode); } /*! @@ -431,18 +475,12 @@ bool QCameraFocus::isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) QPointF QCameraFocus::customFocusPoint() const { - return d_func()->focusControl ? - d_func()->focusControl->customFocusPoint() : - QPointF(0.5,0.5); + return d_func()->focusControl->customFocusPoint(); } void QCameraFocus::setCustomFocusPoint(const QPointF &point) { - if (d_func()->focusControl) - d_func()->focusControl->setCustomFocusPoint(point); - else - qWarning("Focus points selection is not supported"); - + d_func()->focusControl->setCustomFocusPoint(point); } /*! @@ -458,9 +496,7 @@ void QCameraFocus::setCustomFocusPoint(const QPointF &point) */ QCameraFocusZoneList QCameraFocus::focusZones() const { - return d_func()->focusControl ? - d_func()->focusControl->focusZones() : - QCameraFocusZoneList(); + return d_func()->focusControl->focusZones(); } /*! @@ -471,7 +507,7 @@ QCameraFocusZoneList QCameraFocus::focusZones() const qreal QCameraFocus::maximumOpticalZoom() const { - return d_func()->focusControl ? d_func()->focusControl->maximumOpticalZoom() : 1.0; + return d_func()->zoomControl->maximumOpticalZoom(); } /*! @@ -482,7 +518,7 @@ qreal QCameraFocus::maximumOpticalZoom() const qreal QCameraFocus::maximumDigitalZoom() const { - return d_func()->focusControl ? d_func()->focusControl->maximumDigitalZoom() : 1.0; + return d_func()->zoomControl->maximumDigitalZoom(); } /*! @@ -494,7 +530,7 @@ qreal QCameraFocus::maximumDigitalZoom() const qreal QCameraFocus::opticalZoom() const { - return d_func()->focusControl ? d_func()->focusControl->opticalZoom() : 1.0; + return d_func()->zoomControl->currentOpticalZoom(); } /*! @@ -505,7 +541,7 @@ qreal QCameraFocus::opticalZoom() const */ qreal QCameraFocus::digitalZoom() const { - return d_func()->focusControl ? d_func()->focusControl->digitalZoom() : 1.0; + return d_func()->zoomControl->currentDigitalZoom(); } @@ -518,10 +554,7 @@ qreal QCameraFocus::digitalZoom() const */ void QCameraFocus::zoomTo(qreal optical, qreal digital) { - if (d_func()->focusControl) - d_func()->focusControl->zoomTo(optical, digital); - else - qWarning("The camera doesn't support zooming."); + d_func()->zoomControl->zoomTo(optical, digital); } /*! diff --git a/src/multimedia/controls/controls.pri b/src/multimedia/controls/controls.pri index 050b5c374..25d94c114 100644 --- a/src/multimedia/controls/controls.pri +++ b/src/multimedia/controls/controls.pri @@ -10,6 +10,7 @@ PUBLIC_HEADERS += \ controls/qcamerafeedbackcontrol.h \ controls/qcameraflashcontrol.h \ controls/qcamerafocuscontrol.h \ + controls/qcamerazoomcontrol.h \ controls/qcameraimagecapturecontrol.h \ controls/qcameraimageprocessingcontrol.h \ controls/qcameralockscontrol.h \ @@ -41,6 +42,7 @@ SOURCES += \ controls/qcamerafeedbackcontrol.cpp \ controls/qcameraflashcontrol.cpp \ controls/qcamerafocuscontrol.cpp \ + controls/qcamerazoomcontrol.cpp \ controls/qcameraimagecapturecontrol.cpp \ controls/qcameraimageprocessingcontrol.cpp \ controls/qcameralockscontrol.cpp \ diff --git a/src/multimedia/controls/qcamerafocuscontrol.cpp b/src/multimedia/controls/qcamerafocuscontrol.cpp index abbb015ab..6618d0cfa 100644 --- a/src/multimedia/controls/qcamerafocuscontrol.cpp +++ b/src/multimedia/controls/qcamerafocuscontrol.cpp @@ -111,40 +111,6 @@ QCameraFocusControl::~QCameraFocusControl() Returns true if focus \a mode is supported. */ - -/*! - \fn qreal QCameraFocusControl::maximumOpticalZoom() const - - Returns the maximum optical zoom value, or 1.0 if optical zoom is not supported. -*/ - - -/*! - \fn qreal QCameraFocusControl::maximumDigitalZoom() const - - Returns the maximum digital zoom value, or 1.0 if digital zoom is not supported. -*/ - - -/*! - \fn qreal QCameraFocusControl::opticalZoom() const - - Return the current optical zoom value. -*/ - -/*! - \fn qreal QCameraFocusControl::digitalZoom() const - - Return the current digital zoom value. -*/ - - -/*! - \fn void QCameraFocusControl::zoomTo(qreal optical, qreal digital) - - Sets \a optical and \a digital zoom values. -*/ - /*! \fn QCameraFocusControl::focusPointMode() const @@ -191,41 +157,39 @@ QCameraFocusControl::~QCameraFocusControl() */ /*! - \fn void QCameraFocusControl::opticalZoomChanged(qreal zoom) + \fn QCameraFocusControl::focusZonesChanged() - Signal emitted when the optical \a zoom value changed. -*/ + Signal is emitted when the set of zones, camera focused on is changed. -/*! - \fn void QCameraFocusControl::digitalZoomChanged(qreal zoom) + Usually the zones list is changed when the camera is focused. - Signal emitted when the digital \a zoom value changed. + \sa QCameraFocusControl::focusZones() */ /*! - \fn void QCameraFocusControl::maximumOpticalZoomChanged(qreal zoom) + \fn QCameraFocusControl::focusModeChanged + + Signal is emitted when the focus mode is chaged, + usually in result of QCameraFocusControl::setFocusMode call or capture mode changes. - Signal emitted when the maximum supported optical \a zoom value changed. + \sa QCameraFocusControl::focusMode QCameraFocusControl::setFocusMode */ /*! - \fn void QCameraFocusControl::maximumDigitalZoomChanged(qreal zoom) + \fn QCameraFocusControl::focusPointModeChanged - Signal emitted when the maximum supported digital \a zoom value changed. + Signal is emitted when the focus point mode is chaged, + usually in result of QCameraFocusControl::setFocusPointMode call or capture mode changes. - The maximum supported zoom value can depend on other camera settings, - like capture mode or resolution. + \sa QCameraFocusControl::focusPointMode QCameraFocusControl::setFocusPointMode */ - /*! - \fn QCameraFocusControl::focusZonesChanged() + \fn QCameraFocusControl::customFocusPointChanged - Signal is emitted when the set of zones, camera focused on is changed. - - Usually the zones list is changed when the camera is focused. + Signal is emitted when the custom focus point is changed. - \sa QCameraFocusControl::focusZones() + \sa QCameraFocusControl::customFocusPoint QCameraFocusControl::setCustomFocusPoint */ diff --git a/src/multimedia/controls/qcamerafocuscontrol.h b/src/multimedia/controls/qcamerafocuscontrol.h index 43b3122cb..7da4a24c7 100644 --- a/src/multimedia/controls/qcamerafocuscontrol.h +++ b/src/multimedia/controls/qcamerafocuscontrol.h @@ -65,13 +65,6 @@ public: virtual void setFocusMode(QCameraFocus::FocusMode mode) = 0; virtual bool isFocusModeSupported(QCameraFocus::FocusMode mode) const = 0; - virtual qreal maximumOpticalZoom() const = 0; - virtual qreal maximumDigitalZoom() const = 0; - virtual qreal opticalZoom() const = 0; - virtual qreal digitalZoom() const = 0; - - virtual void zoomTo(qreal optical, qreal digital) = 0; - virtual QCameraFocus::FocusPointMode focusPointMode() const = 0; virtual void setFocusPointMode(QCameraFocus::FocusPointMode mode) = 0; virtual bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const = 0; @@ -81,17 +74,17 @@ public: virtual QCameraFocusZoneList focusZones() const = 0; Q_SIGNALS: - void opticalZoomChanged(qreal opticalZoom); - void digitalZoomChanged(qreal digitalZoom); + void focusModeChanged(QCameraFocus::FocusMode mode); + void focusPointModeChanged(QCameraFocus::FocusPointMode mode); + void customFocusPointChanged(const QPointF &point); + void focusZonesChanged(); - void maximumOpticalZoomChanged(qreal); - void maximumDigitalZoomChanged(qreal); protected: QCameraFocusControl(QObject* parent = 0); }; -#define QCameraFocusControl_iid "com.nokia.Qt.QCameraFocusingControl/1.0" +#define QCameraFocusControl_iid "com.nokia.Qt.QCameraFocusControl/1.0" Q_MEDIA_DECLARE_CONTROL(QCameraFocusControl, QCameraFocusControl_iid) QT_END_NAMESPACE diff --git a/src/multimedia/controls/qcamerazoomcontrol.cpp b/src/multimedia/controls/qcamerazoomcontrol.cpp new file mode 100644 index 000000000..82666c673 --- /dev/null +++ b/src/multimedia/controls/qcamerazoomcontrol.cpp @@ -0,0 +1,189 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: http://www.qt-project.org/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <qcamerazoomcontrol.h> +#include "qmediacontrol_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \class QCameraZoomControl + + + \brief The QCameraZoomControl class supplies control for + optical and digital camera zoom. + + \inmodule QtMultimedia + + \ingroup multimedia + \ingroup multimedia_control + + The interface name of QCameraZoomControl is \c com.nokia.Qt.QCameraZoomControl/1.0 as + defined in QCameraZoomControl_iid. + + + \sa QMediaService::requestControl(), QCamera +*/ + +/*! + \macro QCameraZoomControl_iid + + \c com.nokia.Qt.QCameraZoomControl/1.0 + + Defines the interface name of the QCameraZoomControl class. + + \relates QCameraZoomControl +*/ + +/*! + Constructs a camera zoom control object with \a parent. +*/ + +QCameraZoomControl::QCameraZoomControl(QObject *parent): + QMediaControl(*new QMediaControlPrivate, parent) +{ +} + +/*! + Destruct the camera zoom control object. +*/ + +QCameraZoomControl::~QCameraZoomControl() +{ +} + +/*! + \fn qreal QCameraZoomControl::maximumOpticalZoom() const + + Returns the maximum optical zoom value, or 1.0 if optical zoom is not supported. +*/ + + +/*! + \fn qreal QCameraZoomControl::maximumDigitalZoom() const + + Returns the maximum digital zoom value, or 1.0 if digital zoom is not supported. +*/ + + +/*! + \fn qreal QCameraZoomControl::requestedOpticalZoom() const + + Return the requested optical zoom value. +*/ + +/*! + \fn qreal QCameraZoomControl::requestedDigitalZoom() const + + Return the requested digital zoom value. +*/ + +/*! + \fn qreal QCameraZoomControl::currentOpticalZoom() const + + Return the current optical zoom value. +*/ + +/*! + \fn qreal QCameraZoomControl::currentDigitalZoom() const + + Return the current digital zoom value. +*/ + +/*! + \fn void QCameraZoomControl::zoomTo(qreal optical, qreal digital) + + Sets \a optical and \a digital zoom values. + + Zooming can be asynchronous with value changes reported with + currentDigitalZoomChanged() and currentOpticalZoomChanged() signals. + + The backend should expect and correctly handle frequent zoomTo() calls + during zoom animations or slider movements. +*/ + + +/*! + \fn void QCameraZoomControl::currentOpticalZoomChanged(qreal zoom) + + Signal emitted when the current optical \a zoom value changed. +*/ + +/*! + \fn void QCameraZoomControl::currentDigitalZoomChanged(qreal zoom) + + Signal emitted when the current digital \a zoom value changed. +*/ + +/*! + \fn void QCameraZoomControl::requestedOpticalZoomChanged(qreal zoom) + + Signal emitted when the requested optical \a zoom value changed. +*/ + +/*! + \fn void QCameraZoomControl::requestedDigitalZoomChanged(qreal zoom) + + Signal emitted when the requested digital \a zoom value changed. +*/ + + +/*! + \fn void QCameraZoomControl::maximumOpticalZoomChanged(qreal zoom) + + Signal emitted when the maximum supported optical \a zoom value changed. + + The maximum supported zoom value can depend on other camera settings, + like focusing mode. +*/ + +/*! + \fn void QCameraZoomControl::maximumDigitalZoomChanged(qreal zoom) + + Signal emitted when the maximum supported digital \a zoom value changed. + + The maximum supported zoom value can depend on other camera settings, + like capture mode or resolution. +*/ + +#include "moc_qcamerazoomcontrol.cpp" +QT_END_NAMESPACE + diff --git a/src/multimedia/controls/qcamerazoomcontrol.h b/src/multimedia/controls/qcamerazoomcontrol.h new file mode 100644 index 000000000..d33b9cd45 --- /dev/null +++ b/src/multimedia/controls/qcamerazoomcontrol.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: http://www.qt-project.org/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QCAMERAZOOMCONTROL_H +#define QCAMERAZOOMCONTROL_H + +#include <qmediacontrol.h> +#include <qmediaobject.h> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Multimedia) + + +class Q_MULTIMEDIA_EXPORT QCameraZoomControl : public QMediaControl +{ + Q_OBJECT + +public: + ~QCameraZoomControl(); + + virtual qreal maximumOpticalZoom() const = 0; + virtual qreal maximumDigitalZoom() const = 0; + + virtual qreal requestedOpticalZoom() const = 0; + virtual qreal requestedDigitalZoom() const = 0; + virtual qreal currentOpticalZoom() const = 0; + virtual qreal currentDigitalZoom() const = 0; + + virtual void zoomTo(qreal optical, qreal digital) = 0; + +Q_SIGNALS: + void maximumOpticalZoomChanged(qreal); + void maximumDigitalZoomChanged(qreal); + + void requestedOpticalZoomChanged(qreal opticalZoom); + void requestedDigitalZoomChanged(qreal digitalZoom); + void currentOpticalZoomChanged(qreal opticalZoom); + void currentDigitalZoomChanged(qreal digitalZoom); + +protected: + QCameraZoomControl(QObject* parent = 0); +}; + +#define QCameraZoomControl_iid "com.nokia.Qt.QCameraZoomControl/1.0" +Q_MEDIA_DECLARE_CONTROL(QCameraZoomControl, QCameraZoomControl_iid) + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QCAMERAZOOMCONTROL_H diff --git a/tests/auto/unit/qcamera/tst_qcamera.cpp b/tests/auto/unit/qcamera/tst_qcamera.cpp index c244bfa50..5e9399b7d 100644 --- a/tests/auto/unit/qcamera/tst_qcamera.cpp +++ b/tests/auto/unit/qcamera/tst_qcamera.cpp @@ -290,7 +290,7 @@ void tst_QCamera::testSimpleCameraFocus() QVERIFY(!cameraFocus->isFocusModeSupported(QCameraFocus::InfinityFocus)); QCOMPARE(cameraFocus->focusMode(), QCameraFocus::AutoFocus); - QTest::ignoreMessage(QtWarningMsg, "Focus points mode selection is not supported"); + QTest::ignoreMessage(QtWarningMsg, "Focus mode selection is not supported"); cameraFocus->setFocusMode(QCameraFocus::ContinuousFocus); QCOMPARE(cameraFocus->focusMode(), QCameraFocus::AutoFocus); @@ -308,7 +308,7 @@ void tst_QCamera::testSimpleCameraFocus() QVERIFY(!cameraFocus->isFocusPointModeSupported(QCameraFocus::FocusPointAuto)); QCOMPARE(cameraFocus->focusPointMode(), QCameraFocus::FocusPointAuto); - + QTest::ignoreMessage(QtWarningMsg, "Focus points mode selection is not supported"); cameraFocus->setFocusPointMode( QCameraFocus::FocusPointCenter ); QCOMPARE(cameraFocus->focusPointMode(), QCameraFocus::FocusPointAuto); @@ -1751,7 +1751,7 @@ void tst_QCamera::testfocusZonesChangedSignal() QVERIFY(cameraFocus != 0); QSignalSpy spy(cameraFocus,SIGNAL(focusZonesChanged())); - cameraFocus->zoomTo(5.0,6.0); + cameraFocus->setCustomFocusPoint(QPointF(0.1, 0.1)); QVERIFY(spy.count() == 1); } diff --git a/tests/auto/unit/qmultimedia_common/mockcamera.pri b/tests/auto/unit/qmultimedia_common/mockcamera.pri index 233d5b8a2..22a9dc155 100644 --- a/tests/auto/unit/qmultimedia_common/mockcamera.pri +++ b/tests/auto/unit/qmultimedia_common/mockcamera.pri @@ -9,6 +9,7 @@ HEADERS *= \ ../qmultimedia_common/mockcameraflashcontrol.h \ ../qmultimedia_common/mockcameralockscontrol.h \ ../qmultimedia_common/mockcamerafocuscontrol.h \ + ../qmultimedia_common/mockcamerazoomcontrol.h \ ../qmultimedia_common/mockcameraimageprocessingcontrol.h \ ../qmultimedia_common/mockcameraimagecapturecontrol.h \ ../qmultimedia_common/mockcameraexposurecontrol.h \ diff --git a/tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h b/tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h index 8cccb4dc0..64524619c 100644 --- a/tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h +++ b/tests/auto/unit/qmultimedia_common/mockcamerafocuscontrol.h @@ -51,14 +51,9 @@ class MockCameraFocusControl : public QCameraFocusControl public: MockCameraFocusControl(QObject *parent = 0): QCameraFocusControl(parent), - m_opticalZoom(1.0), - m_digitalZoom(1.0), m_focusMode(QCameraFocus::AutoFocus), m_focusPointMode(QCameraFocus::FocusPointAuto), - m_focusPoint(0.5, 0.5), - m_maxOpticalZoom(3.0), - m_maxDigitalZoom(4.0) - + m_focusPoint(0.5, 0.5) { m_zones << QCameraFocusZone(QRectF(0.45, 0.45, 0.1, 0.1)); } @@ -81,45 +76,6 @@ public: return mode == QCameraFocus::AutoFocus || mode == QCameraFocus::ContinuousFocus; } - qreal maximumOpticalZoom() const - { - return m_maxOpticalZoom; - } - - qreal maximumDigitalZoom() const - { - return m_maxDigitalZoom; - } - - qreal opticalZoom() const - { - return m_opticalZoom; - } - - qreal digitalZoom() const - { - return m_digitalZoom; - } - - void zoomTo(qreal optical, qreal digital) - { - optical = qBound<qreal>(1.0, optical, maximumOpticalZoom()); - digital = qBound<qreal>(1.0, digital, maximumDigitalZoom()); - - if (!qFuzzyCompare(digital, m_digitalZoom)) { - m_digitalZoom = digital; - emit digitalZoomChanged(m_digitalZoom); - } - - if (!qFuzzyCompare(optical, m_opticalZoom)) { - m_opticalZoom = optical; - emit opticalZoomChanged(m_opticalZoom); - } - - maxOpticalDigitalZoomChange(4.0, 5.0); - focusZonesChange(0.50, 0.50, 0.3, 0.3); - } - QCameraFocus::FocusPointMode focusPointMode() const { return m_focusPointMode; @@ -151,6 +107,7 @@ public: void setCustomFocusPoint(const QPointF &point) { m_focusPoint = point; + focusZonesChange(0.50, 0.50, 0.3, 0.3); } QCameraFocusZoneList focusZones() const @@ -158,20 +115,6 @@ public: return m_zones; } - // helper function to emit maximum Optical and Digital Zoom Changed signals - void maxOpticalDigitalZoomChange(qreal maxOptical, qreal maxDigital) - { - if (maxOptical != m_maxOpticalZoom) { - m_maxOpticalZoom = maxOptical; - emit maximumOpticalZoomChanged(m_maxOpticalZoom); - } - - if (maxDigital != m_maxDigitalZoom) { - m_maxDigitalZoom = maxDigital; - emit maximumDigitalZoomChanged(m_maxDigitalZoom); - } - } - // helper function to emit Focus Zones Changed signals void focusZonesChange(qreal left, qreal top, qreal width, qreal height) { @@ -184,14 +127,9 @@ public: } private: - qreal m_opticalZoom; - qreal m_digitalZoom; QCameraFocus::FocusMode m_focusMode; QCameraFocus::FocusPointMode m_focusPointMode; QPointF m_focusPoint; - // to emit maximum Optical and Digital Zoom Changed signals - qreal m_maxOpticalZoom; - qreal m_maxDigitalZoom; // to emit focus zone changed signal QCameraFocusZoneList m_zones; }; diff --git a/tests/auto/unit/qmultimedia_common/mockcameraservice.h b/tests/auto/unit/qmultimedia_common/mockcameraservice.h index 2d3d810c1..53cdf7be6 100644 --- a/tests/auto/unit/qmultimedia_common/mockcameraservice.h +++ b/tests/auto/unit/qmultimedia_common/mockcameraservice.h @@ -46,6 +46,7 @@ #include "../qmultimedia_common/mockcameraflashcontrol.h" #include "../qmultimedia_common/mockcameralockscontrol.h" #include "../qmultimedia_common/mockcamerafocuscontrol.h" +#include "../qmultimedia_common/mockcamerazoomcontrol.h" #include "../qmultimedia_common/mockcameraimageprocessingcontrol.h" #include "../qmultimedia_common/mockcameraimagecapturecontrol.h" #include "../qmultimedia_common/mockcameraexposurecontrol.h" @@ -99,6 +100,7 @@ public: mockExposureControl = new MockCameraExposureControl(this); mockFlashControl = new MockCameraFlashControl(this); mockFocusControl = new MockCameraFocusControl(this); + mockZoomControl = new MockCameraZoomControl(this); mockCaptureControl = new MockCaptureControl(mockControl, this); mockCaptureBufferControl = new MockCaptureBufferFormatControl(this); mockCaptureDestinationControl = new MockCaptureDestinationControl(this); @@ -133,6 +135,9 @@ public: if (qstrcmp(iid, QCameraFocusControl_iid) == 0) return mockFocusControl; + if (qstrcmp(iid, QCameraZoomControl_iid) == 0) + return mockZoomControl; + if (qstrcmp(iid, QCameraImageCaptureControl_iid) == 0) return mockCaptureControl; @@ -183,6 +188,7 @@ public: MockCameraExposureControl *mockExposureControl; MockCameraFlashControl *mockFlashControl; MockCameraFocusControl *mockFocusControl; + MockCameraZoomControl *mockZoomControl; MockImageProcessingControl *mockImageProcessingControl; MockImageEncoderControl *mockImageEncoderControl; MockVideoRendererControl *rendererControl; diff --git a/tests/auto/unit/qmultimedia_common/mockcamerazoomcontrol.h b/tests/auto/unit/qmultimedia_common/mockcamerazoomcontrol.h new file mode 100644 index 000000000..a8c209272 --- /dev/null +++ b/tests/auto/unit/qmultimedia_common/mockcamerazoomcontrol.h @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MOCKCAMERAZOOMCONTROL_H +#define MOCKCAMERAZOOMCONTROL_H + +#include "qcamerazoomcontrol.h" + +class MockCameraZoomControl : public QCameraZoomControl +{ + Q_OBJECT +public: + MockCameraZoomControl(QObject *parent = 0): + QCameraZoomControl(parent), + m_opticalZoom(1.0), + m_digitalZoom(1.0), + m_maxOpticalZoom(3.0), + m_maxDigitalZoom(4.0) + + { + } + + ~MockCameraZoomControl() {} + + qreal maximumOpticalZoom() const + { + return m_maxOpticalZoom; + } + + qreal maximumDigitalZoom() const + { + return m_maxDigitalZoom; + } + + qreal currentOpticalZoom() const + { + return m_opticalZoom; + } + + qreal currentDigitalZoom() const + { + return m_digitalZoom; + } + + qreal requestedOpticalZoom() const + { + return m_opticalZoom; + } + + qreal requestedDigitalZoom() const + { + return m_digitalZoom; + } + + void zoomTo(qreal optical, qreal digital) + { + optical = qBound<qreal>(1.0, optical, maximumOpticalZoom()); + digital = qBound<qreal>(1.0, digital, maximumDigitalZoom()); + + if (!qFuzzyCompare(digital, m_digitalZoom)) { + m_digitalZoom = digital; + emit requestedDigitalZoomChanged(m_digitalZoom); + emit currentDigitalZoomChanged(m_digitalZoom); + } + + if (!qFuzzyCompare(optical, m_opticalZoom)) { + m_opticalZoom = optical; + emit requestedOpticalZoomChanged(m_opticalZoom); + emit currentOpticalZoomChanged(m_opticalZoom); + } + + maxOpticalDigitalZoomChange(4.0, 5.0); + } + + // helper function to emit maximum Optical and Digital Zoom Changed signals + void maxOpticalDigitalZoomChange(qreal maxOptical, qreal maxDigital) + { + if (maxOptical != m_maxOpticalZoom) { + m_maxOpticalZoom = maxOptical; + emit maximumOpticalZoomChanged(m_maxOpticalZoom); + } + + if (maxDigital != m_maxDigitalZoom) { + m_maxDigitalZoom = maxDigital; + emit maximumDigitalZoomChanged(m_maxDigitalZoom); + } + } + +private: + qreal m_opticalZoom; + qreal m_digitalZoom; + qreal m_maxOpticalZoom; + qreal m_maxDigitalZoom; +}; + +#endif // MOCKCAMERAZOOMCONTROL_H |