summaryrefslogtreecommitdiffstats
path: root/src/multimedia/camera/qcamerafocus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/camera/qcamerafocus.cpp')
-rw-r--r--src/multimedia/camera/qcamerafocus.cpp614
1 files changed, 0 insertions, 614 deletions
diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp
deleted file mode 100644
index 980b9dc93..000000000
--- a/src/multimedia/camera/qcamerafocus.cpp
+++ /dev/null
@@ -1,614 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qcamerafocus.h"
-#include "qmediaobject_p.h"
-
-#include <qcamera.h>
-#include <qcameracontrol.h>
-#include <qcameraexposurecontrol.h>
-#include <qcamerafocuscontrol.h>
-#include <qcamerazoomcontrol.h>
-#include <qmediarecordercontrol.h>
-#include <qcameraimagecapturecontrol.h>
-#include <qvideodeviceselectorcontrol.h>
-
-#include <QtCore/QDebug>
-
-QT_BEGIN_NAMESPACE
-
-static void qRegisterCameraFocusMetaTypes()
-{
- qRegisterMetaType<QCameraFocus::FocusModes>("QCameraFocus::FocusModes");
- qRegisterMetaType<QCameraFocus::FocusPointMode>("QCameraFocus::FocusPointMode");
-}
-
-Q_CONSTRUCTOR_FUNCTION(qRegisterCameraFocusMetaTypes)
-
-
-class QCameraFocusFakeZoomControl : public QCameraZoomControl
-{
-public:
- QCameraFocusFakeZoomControl(QObject *parent) :
- QCameraZoomControl(parent) {}
-
- qreal maximumOpticalZoom() const override { return 1.0; }
- qreal maximumDigitalZoom() const override { return 1.0; }
-
- qreal requestedOpticalZoom() const override { return 1.0; }
- qreal requestedDigitalZoom() const override { return 1.0; }
- qreal currentOpticalZoom() const override { return 1.0; }
- qreal currentDigitalZoom() const override { return 1.0; }
-
- void zoomTo(qreal, qreal) override { qWarning("The camera doesn't support zooming."); }
-};
-
-class QCameraFocusFakeFocusControl : public QCameraFocusControl
-{
-public:
- QCameraFocusFakeFocusControl(QObject *parent) :
- QCameraFocusControl(parent) {}
-
- QCameraFocus::FocusModes focusMode() const override { return QCameraFocus::AutoFocus; }
- void setFocusMode(QCameraFocus::FocusModes) override { qWarning("Focus mode selection is not supported"); }
- bool isFocusModeSupported(QCameraFocus::FocusModes) const override { return false; }
-
- QCameraFocus::FocusPointMode focusPointMode() const override { return QCameraFocus::FocusPointAuto; }
- void setFocusPointMode(QCameraFocus::FocusPointMode) override { qWarning("Focus points mode selection is not supported"); }
- bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const override { return false; }
- QPointF customFocusPoint() const override { return QPointF(0.5,0.5); }
- void setCustomFocusPoint(const QPointF &) override { qWarning("Focus points selection is not supported"); }
-
- QCameraFocusZoneList focusZones() const override { return QCameraFocusZoneList(); }
-};
-
-
-
-class QCameraFocusZoneData : public QSharedData
-{
-public:
- QCameraFocusZoneData():
- status(QCameraFocusZone::Invalid)
- {
-
- }
-
- QCameraFocusZoneData(const QRectF &_area, QCameraFocusZone::FocusZoneStatus _status):
- area(_area),
- status(_status)
- {
-
- }
-
-
- QCameraFocusZoneData(const QCameraFocusZoneData &other):
- QSharedData(other),
- area(other.area),
- status(other.status)
- {
- }
-
- QCameraFocusZoneData& operator=(const QCameraFocusZoneData &other)
- {
- area = other.area;
- status = other.status;
- return *this;
- }
-
- QRectF area;
- QCameraFocusZone::FocusZoneStatus status;
-};
-
-
-/*!
- \class QCameraFocusZone
-
- \brief The QCameraFocusZone class provides information on zones used for autofocusing a camera.
-
- \inmodule QtMultimedia
- \ingroup multimedia
- \ingroup multimedia_camera
-
- For cameras that support autofocusing, in order for a camera to autofocus on
- part of a sensor frame, it considers different zones within the frame. Which
- zones to use, and where the zones are located vary between different cameras.
-
- This class exposes what zones are used by a particular camera, and a list of the
- zones can be retrieved by a \l QCameraFocus instance.
-
- You can use this information to present visual feedback - for example, drawing
- rectangles around areas of the camera frame that are in focus, or changing the
- color of a zone as it comes into focus.
-
- \snippet multimedia-snippets/camera.cpp Camera focus zones
-
- \sa QCameraFocus
-*/
-
-/*!
- \enum QCameraFocusZone::FocusZoneStatus
-
- \value Invalid This zone is not valid
- \value Unused This zone may be used for autofocusing, but is not currently.
- \value Selected This zone is currently being used for autofocusing, but is not in focus.
- \value Focused This zone is being used for autofocusing and is currently in focus.
-*/
-
-/*!
- * \internal
- * Creates a new, empty QCameraFocusZone.
- */
-QCameraFocusZone::QCameraFocusZone()
- :d(new QCameraFocusZoneData)
-{
-
-}
-
-/*!
- * \internal
- * Creates a new QCameraFocusZone with the supplied \a area and \a status.
- */
-QCameraFocusZone::QCameraFocusZone(const QRectF &area, QCameraFocusZone::FocusZoneStatus status)
- :d(new QCameraFocusZoneData(area, status))
-{
-}
-
-/*!
- * Creates a new QCameraFocusZone as a copy of \a other.
- */
-QCameraFocusZone::QCameraFocusZone(const QCameraFocusZone &other)
- :d(other.d)
-{
-
-}
-
-/*!
- * Destroys this QCameraFocusZone.
- */
-QCameraFocusZone::~QCameraFocusZone()
-{
-
-}
-
-/*!
- * Assigns \a other to this QCameraFocusZone.
- */
-QCameraFocusZone& QCameraFocusZone::operator=(const QCameraFocusZone &other)
-{
- d = other.d;
- return *this;
-}
-
-/*!
- * Returns true if this focus zone is the same as \a other.
- */
-bool QCameraFocusZone::operator==(const QCameraFocusZone &other) const
-{
- return d == other.d ||
- (d->area == other.d->area && d->status == other.d->status);
-}
-
-/*!
- * Returns true if this focus zone is not the same as \a other.
- */
-bool QCameraFocusZone::operator!=(const QCameraFocusZone &other) const
-{
- return !(*this == other);
-}
-
-/*!
- * Returns true if this focus zone has a valid area and status.
- */
-bool QCameraFocusZone::isValid() const
-{
- return d->status != Invalid && !d->area.isValid();
-}
-
-/*!
- * Returns the area of the camera frame that this focus zone encompasses.
- *
- * Coordinates are in frame relative coordinates - \c QPointF(0,0) is the top
- * left of the frame, and \c QPointF(1,1) is the bottom right.
- */
-QRectF QCameraFocusZone::area() const
-{
- return d->area;
-}
-
-/*!
- * Returns the current status of this focus zone.
- */
-QCameraFocusZone::FocusZoneStatus QCameraFocusZone::status() const
-{
- return d->status;
-}
-
-/*!
- * \internal
- * Sets the current status of this focus zone to \a status.
- */
-void QCameraFocusZone::setStatus(QCameraFocusZone::FocusZoneStatus status)
-{
- d->status = status;
-}
-
-
-/*!
- \class QCameraFocus
-
- \brief The QCameraFocus class provides an interface for focus and zoom related camera settings.
-
- \inmodule QtMultimedia
- \ingroup multimedia
- \ingroup multimedia_camera
-
- On hardware that supports it, this class lets you adjust the focus
- or zoom (both optical and digital). This also includes things
- like "Macro" mode for close up work (e.g. reading barcodes, or
- recognising letters), or "touch to focus" - indicating an
- interesting area of the viewfinder for the hardware to attempt
- to focus on.
-
- \snippet multimedia-snippets/camera.cpp Camera custom zoom
-
- Zooming can be accomplished in a number of ways - usually the more
- expensive but higher quality approach is an optical zoom, which allows
- using the full extent of the camera sensor to gather image pixels. In
- addition it is possible to digitally zoom, which will generally just
- enlarge part of the sensor frame and throw away other parts. If the
- camera hardware supports optical zoom this should generally always
- be used first. The \l maximumOpticalZoom() method allows this to be
- checked. The \l zoomTo() method allows changing both optical and
- digital zoom at once.
-
- \snippet multimedia-snippets/camera.cpp Camera combined zoom
-
- \section2 Some notes on autofocus
- Some hardware supports a movable focus lens assembly, and typically
- this hardware also supports automatically focusing via some heuristic.
- You can influence this via the \l FocusPointMode setting - typically
- the center of the frame is brought into focus, but some hardware
- also supports focusing on any faces detected in the frame, or on
- a specific point (usually provided by a user in a "touch to focus"
- scenario).
-
- This class (in combination with \l QCameraFocusZone)
- can expose information on what parts of the camera sensor image
- are in focus or are being used for autofocusing via the \l focusZones()
- property:
-
- \snippet multimedia-snippets/camera.cpp Camera focus zones
-
- \sa QCameraFocusZone
-*/
-
-
-class QCameraFocusPrivate : public QMediaObjectPrivate
-{
- Q_DECLARE_NON_CONST_PUBLIC(QCameraFocus)
-public:
- void initControls();
-
- QCamera *camera;
-
- QCameraFocusControl *focusControl;
- QCameraZoomControl *zoomControl;
- bool available;
-};
-
-
-void QCameraFocusPrivate::initControls()
-{
- Q_Q(QCameraFocus);
-
- focusControl = nullptr;
- zoomControl = nullptr;
-
- QMediaService *service = camera->service();
- if (service) {
- focusControl = qobject_cast<QCameraFocusControl *>(service->requestControl(QCameraFocusControl_iid));
- zoomControl = qobject_cast<QCameraZoomControl *>(service->requestControl(QCameraZoomControl_iid));
- }
-
- available = focusControl != nullptr;
-
- 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)));
-}
-
-/*!
- \internal
- Construct a QCameraFocus for \a camera.
-*/
-
-QCameraFocus::QCameraFocus(QCamera *camera)
- : QObject(*new QCameraFocusPrivate, camera)
-{
- Q_D(QCameraFocus);
- d->camera = camera;
- d->initControls();
-}
-
-
-/*!
- Destroys the camera focus object.
-*/
-
-QCameraFocus::~QCameraFocus()
-{
-}
-
-/*!
- Returns true if focus related settings are supported by this camera.
-
- You may need to also check if any specific features are supported.
-*/
-bool QCameraFocus::isAvailable() const
-{
- return d_func()->available;
-}
-
-/*!
- \property QCameraFocus::focusMode
- \brief the current camera focus mode.
-
-
- This controls the way the camera lens assembly is configured.
-
- \sa QCameraFocus::isFocusModeSupported()
-*/
-
-QCameraFocus::FocusModes QCameraFocus::focusMode() const
-{
- return d_func()->focusControl->focusMode();
-}
-
-void QCameraFocus::setFocusMode(QCameraFocus::FocusModes mode)
-{
- d_func()->focusControl->setFocusMode(mode);
-}
-
-/*!
- Returns true if the focus \a mode is supported by camera.
-*/
-
-bool QCameraFocus::isFocusModeSupported(FocusModes mode) const
-{
- return d_func()->focusControl->isFocusModeSupported(mode);
-}
-
-/*!
- \property QCameraFocus::focusPointMode
- \brief the current camera focus point selection mode.
-
- If the camera focus mode is set to use an autofocusing mode,
- this property controls the way the camera will select areas
- of the frame to use for autofocusing.
-
- \sa QCameraFocus::isFocusPointModeSupported()
-*/
-
-QCameraFocus::FocusPointMode QCameraFocus::focusPointMode() const
-{
- return d_func()->focusControl->focusPointMode();
-}
-
-void QCameraFocus::setFocusPointMode(QCameraFocus::FocusPointMode mode)
-{
- d_func()->focusControl->setFocusPointMode(mode);
-}
-
-/*!
- Returns true if focus point \a mode is supported.
- */
-bool QCameraFocus::isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const
-{
- return d_func()->focusControl->isFocusPointModeSupported(mode);
-}
-
-/*!
- \property QCameraFocus::customFocusPoint
-
- This property represents the position of the custom focus point, in relative frame coordinates:
- QPointF(0,0) points to the left top frame point, QPointF(0.5,0.5) points to the frame center.
-
- The custom focus point property is used only in \c FocusPointCustom focus mode.
- */
-
-QPointF QCameraFocus::customFocusPoint() const
-{
- return d_func()->focusControl->customFocusPoint();
-}
-
-void QCameraFocus::setCustomFocusPoint(const QPointF &point)
-{
- d_func()->focusControl->setCustomFocusPoint(point);
-}
-
-/*!
- \property QCameraFocus::focusZones
-
- Returns the list of active focus zones.
-
- If QCamera::FocusPointAuto or QCamera::FocusPointFaceDetection focus mode is selected
- this method returns the list of zones the camera is actually focused on.
-
- The coordinates system is the same as for custom focus points:
- QPointF(0,0) points to the left top frame point, QPointF(0.5,0.5) points to the frame center.
- */
-QCameraFocusZoneList QCameraFocus::focusZones() const
-{
- return d_func()->focusControl->focusZones();
-}
-
-/*!
- Returns the maximum optical zoom.
-
- This will be \c 1.0 on cameras that do not support optical zoom.
-*/
-
-qreal QCameraFocus::maximumOpticalZoom() const
-{
- return d_func()->zoomControl->maximumOpticalZoom();
-}
-
-/*!
- Returns the maximum digital zoom
-
- This will be \c 1.0 on cameras that do not support digital zoom.
-*/
-
-qreal QCameraFocus::maximumDigitalZoom() const
-{
- return d_func()->zoomControl->maximumDigitalZoom();
-}
-
-/*!
- \property QCameraFocus::opticalZoom
- \brief the current optical zoom value.
-
- \sa QCameraFocus::digitalZoom
-*/
-
-qreal QCameraFocus::opticalZoom() const
-{
- return d_func()->zoomControl->currentOpticalZoom();
-}
-
-/*!
- \property QCameraFocus::digitalZoom
- \brief the current digital zoom value.
-
- \sa QCameraFocus::opticalZoom
-*/
-qreal QCameraFocus::digitalZoom() const
-{
- return d_func()->zoomControl->currentDigitalZoom();
-}
-
-
-/*!
- Set the camera \a optical and \a digital zoom values.
-
- Since there may be a physical component to move, the change in
- zoom value may not be instantaneous.
-
-*/
-void QCameraFocus::zoomTo(qreal optical, qreal digital)
-{
- d_func()->zoomControl->zoomTo(optical, digital);
-}
-
-/*!
- \enum QCameraFocus::FocusMode
-
- \value ManualFocus Manual or fixed focus mode.
- \value HyperfocalFocus Focus to hyperfocal distance, with the maximum depth of field achieved.
- All objects at distances from half of this
- distance out to infinity will be acceptably sharp.
- \value InfinityFocus Focus strictly to infinity.
- \value AutoFocus One-shot auto focus mode.
- \value ContinuousFocus Continuous auto focus mode.
- \value MacroFocus One shot auto focus to objects close to camera.
-*/
-
-/*!
- \enum QCameraFocus::FocusPointMode
-
- \value FocusPointAuto Automatically select one or multiple focus points.
- \value FocusPointCenter Focus to the frame center.
- \value FocusPointFaceDetection Focus on faces in the frame.
- \value FocusPointCustom Focus to the custom point, defined by QCameraFocus::customFocusPoint property.
-*/
-
-/*!
- \fn void QCameraFocus::opticalZoomChanged(qreal value)
-
- Signal emitted when optical zoom value changes to new \a value.
-*/
-
-/*!
- \fn void QCameraFocus::digitalZoomChanged(qreal value)
-
- Signal emitted when digital zoom value changes to new \a value.
-*/
-
-/*!
- \fn void QCameraFocus::maximumOpticalZoomChanged(qreal zoom)
-
- Signal emitted when the maximum supported optical \a zoom value changed.
-*/
-
-/*!
- \fn void QCameraFocus::maximumDigitalZoomChanged(qreal zoom)
-
- Signal emitted when the maximum supported digital \a zoom value changed.
-
- The maximum supported zoom value can depend on other camera settings,
- like capture mode or resolution.
-*/
-
-
-
-/*!
- \fn QCameraFocus::focusZonesChanged()
-
- This signal is emitted when the set of zones used in autofocusing is changed.
-
- This can change when a zone is focused or loses focus, or new focus zones
- have been detected.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qcamerafocus.cpp"