diff options
author | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2014-12-12 12:00:06 +0100 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2015-01-13 13:34:41 +0100 |
commit | fe21ee675e72f7cb3936db6aa01862cfd322ce50 (patch) | |
tree | 8d2caa1d13b79cff554a7fbb8b98051c0695d683 /src/multimedia/camera/qcameraviewfindersettings.cpp | |
parent | c31d8cddd0a2e1f1ee622bc9ea07d038191ceea2 (diff) |
New camera viewfinder settings API.
There already was a control interface for the viewfinder settings
but no real public C++ API and a partial QML API.
This patch adds a new C++ API and improves the QML API.
Supported viewfinder settings are resolution, minimumFrameRate,
maximumFrameRate and pixelFormat. The camera can be queried for
the supported values for each of these settings.
A new control interface was created to match the new API.
Change-Id: I289fea038fe46277a5516c956a64280da09ed985
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
Diffstat (limited to 'src/multimedia/camera/qcameraviewfindersettings.cpp')
-rw-r--r-- | src/multimedia/camera/qcameraviewfindersettings.cpp | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/src/multimedia/camera/qcameraviewfindersettings.cpp b/src/multimedia/camera/qcameraviewfindersettings.cpp new file mode 100644 index 000000000..6bcc253a2 --- /dev/null +++ b/src/multimedia/camera/qcameraviewfindersettings.cpp @@ -0,0 +1,311 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qcameraviewfindersettings.h" + +QT_BEGIN_NAMESPACE + +static void qRegisterViewfinderSettingsMetaType() +{ + qRegisterMetaType<QCameraViewfinderSettings>(); +} + +Q_CONSTRUCTOR_FUNCTION(qRegisterViewfinderSettingsMetaType) + + +class QCameraViewfinderSettingsPrivate : public QSharedData +{ +public: + QCameraViewfinderSettingsPrivate() : + isNull(true), + minimumFrameRate(0.0), + maximumFrameRate(0.0), + pixelFormat(QVideoFrame::Format_Invalid), + pixelAspectRatio(1, 1) + { + } + + QCameraViewfinderSettingsPrivate(const QCameraViewfinderSettingsPrivate &other): + QSharedData(other), + isNull(other.isNull), + resolution(other.resolution), + minimumFrameRate(other.minimumFrameRate), + maximumFrameRate(other.maximumFrameRate), + pixelFormat(other.pixelFormat), + pixelAspectRatio(other.pixelAspectRatio) + { + } + + bool isNull; + QSize resolution; + qreal minimumFrameRate; + qreal maximumFrameRate; + QVideoFrame::PixelFormat pixelFormat; + QSize pixelAspectRatio; + +private: + QCameraViewfinderSettingsPrivate& operator=(const QCameraViewfinderSettingsPrivate &other); +}; + + +/*! + \class QCameraViewfinderSettings + \since 5.5 + \brief The QCameraViewfinderSettings class provides a set of viewfinder settings. + + \inmodule QtMultimedia + \ingroup multimedia + \ingroup multimedia_camera + + A viewfinder settings object is used to specify the viewfinder settings used by QCamera. + Viewfinder settings are selected by constructing a QCameraViewfinderSettings object, + setting the desired properties and then passing it to a QCamera instance using the + QCamera::setViewfinderSettings() function. + + \snippet multimedia-snippets/camera.cpp Camera viewfinder settings + + Different cameras may have different capabilities. The application should query the camera + capabilities before setting parameters. For example, the application should call + QCamera::supportedViewfinderResolutions() before calling setResolution(). + + \sa QCamera +*/ + +/*! + Constructs a null viewfinder settings object. +*/ +QCameraViewfinderSettings::QCameraViewfinderSettings() + : d(new QCameraViewfinderSettingsPrivate) +{ +} + +/*! + Constructs a copy of the viewfinder settings object \a other. +*/ +QCameraViewfinderSettings::QCameraViewfinderSettings(const QCameraViewfinderSettings &other) + : d(other.d) +{ + +} + +/*! + Destroys a viewfinder settings object. +*/ +QCameraViewfinderSettings::~QCameraViewfinderSettings() +{ + +} + +/*! + Assigns the value of \a other to a viewfinder settings object. +*/ +QCameraViewfinderSettings &QCameraViewfinderSettings::operator=(const QCameraViewfinderSettings &other) +{ + d = other.d; + return *this; +} + +/*! + Determines if \a other is of equal value to a viewfinder settings object. + + Returns true if the settings objects are of equal value, and false if they + are not of equal value. +*/ +bool QCameraViewfinderSettings::operator==(const QCameraViewfinderSettings &other) const +{ + return (d == other.d) || + (d->isNull == other.d->isNull && + d->resolution == other.d->resolution && + qFuzzyCompare(d->minimumFrameRate, other.d->minimumFrameRate) && + qFuzzyCompare(d->maximumFrameRate, other.d->maximumFrameRate) && + d->pixelFormat == other.d->pixelFormat && + d->pixelAspectRatio == other.d->pixelAspectRatio); +} + +/*! + Determines if \a other is of equal value to a viewfinder settings object. + + Returns true if the settings objects are not of equal value, and false if + they are of equal value. +*/ +bool QCameraViewfinderSettings::operator!=(const QCameraViewfinderSettings &other) const +{ + return !(*this == other); +} + +/*! + Identifies if a viewfinder settings object is uninitalized. + + Returns true if the settings are null, and false if they are not. +*/ +bool QCameraViewfinderSettings::isNull() const +{ + return d->isNull; +} + +/*! + Returns the viewfinder resolution. +*/ +QSize QCameraViewfinderSettings::resolution() const +{ + return d->resolution; +} + +/*! + Sets the viewfinder \a resolution. + + If the given \a resolution is empty, the backend makes an optimal choice based on the + supported resolutions and the other viewfinder settings. + + If the camera is used to capture videos or images, the viewfinder resolution might be + ignored if it conflicts with the capture resolution. + + \sa QVideoEncoderSettings::setResolution(), QImageEncoderSettings::setResolution(), + QCamera::supportedViewfinderResolutions() +*/ +void QCameraViewfinderSettings::setResolution(const QSize &resolution) +{ + d->isNull = false; + d->resolution = resolution; +} + +/*! + \fn QCameraViewfinderSettings::setResolution(int width, int height) + + This is an overloaded function. + + Sets the \a width and \a height of the viewfinder resolution. +*/ + +/*! + Returns the viewfinder minimum frame rate in frames per second. + + \sa maximumFrameRate() +*/ +qreal QCameraViewfinderSettings::minimumFrameRate() const +{ + return d->minimumFrameRate; +} + +/*! + Sets the viewfinder minimum frame \a rate in frames per second. + + If the minimum frame \a rate is equal to the maximum frame rate, the frame rate is fixed. + If not, the actual frame rate fluctuates between the minimum and the maximum. + + If the given \a rate equals to \c 0, the backend makes an optimal choice based on the + supported frame rates and the other viewfinder settings. + + \sa setMaximumFrameRate(), QCamera::supportedViewfinderFrameRateRanges() +*/ +void QCameraViewfinderSettings::setMinimumFrameRate(qreal rate) +{ + d->isNull = false; + d->minimumFrameRate = rate; +} + +/*! + Returns the viewfinder maximum frame rate in frames per second. + + \sa minimumFrameRate() +*/ +qreal QCameraViewfinderSettings::maximumFrameRate() const +{ + return d->maximumFrameRate; +} + +/*! + Sets the viewfinder maximum frame \a rate in frames per second. + + If the maximum frame \a rate is equal to the minimum frame rate, the frame rate is fixed. + If not, the actual frame rate fluctuates between the minimum and the maximum. + + If the given \a rate equals to \c 0, the backend makes an optimal choice based on the + supported frame rates and the other viewfinder settings. + + \sa setMinimumFrameRate(), QCamera::supportedViewfinderFrameRateRanges() +*/ +void QCameraViewfinderSettings::setMaximumFrameRate(qreal rate) +{ + d->isNull = false; + d->maximumFrameRate = rate; +} + +/*! + Returns the viewfinder pixel format. +*/ +QVideoFrame::PixelFormat QCameraViewfinderSettings::pixelFormat() const +{ + return d->pixelFormat; +} + +/*! + Sets the viewfinder pixel \a format. + + If the given \a format is equal to QVideoFrame::Format_Invalid, the backend uses the + default format. + + \sa QCamera::supportedViewfinderPixelFormats() +*/ +void QCameraViewfinderSettings::setPixelFormat(QVideoFrame::PixelFormat format) +{ + d->isNull = false; + d->pixelFormat = format; +} + +/*! + Returns the viewfinder pixel aspect ratio. +*/ +QSize QCameraViewfinderSettings::pixelAspectRatio() const +{ + return d->pixelAspectRatio; +} + +/*! + Sets the viewfinder pixel aspect \a ratio. +*/ +void QCameraViewfinderSettings::setPixelAspectRatio(const QSize &ratio) +{ + d->isNull = false; + d->pixelAspectRatio = ratio; +} + +/*! + \fn QCameraViewfinderSettings::setPixelAspectRatio(int horizontal, int vertical) + + This is an overloaded function. + + Sets the \a horizontal and \a vertical elements of the viewfinder's pixel aspect ratio. +*/ + +QT_END_NAMESPACE |