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>
This commit is contained in:
@@ -105,6 +105,7 @@ public:
|
|||||||
|
|
||||||
// 5.5 types
|
// 5.5 types
|
||||||
qmlRegisterUncreatableType<QDeclarativeCameraImageProcessing, 1>(uri, 5, 5, "CameraImageProcessing", trUtf8("CameraImageProcessing is provided by Camera"));
|
qmlRegisterUncreatableType<QDeclarativeCameraImageProcessing, 1>(uri, 5, 5, "CameraImageProcessing", trUtf8("CameraImageProcessing is provided by Camera"));
|
||||||
|
qmlRegisterRevision<QDeclarativeCamera, 2>(uri, 5, 5);
|
||||||
|
|
||||||
qmlRegisterType<QDeclarativeMediaMetaData>();
|
qmlRegisterType<QDeclarativeMediaMetaData>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -989,20 +989,34 @@ QDeclarativeMediaMetaData *QDeclarativeCamera::metaData()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
\qmlpropertygroup QtMultimedia::Camera::viewfinder
|
||||||
\qmlproperty size QtMultimedia::Camera::viewfinder.resolution
|
\qmlproperty size QtMultimedia::Camera::viewfinder.resolution
|
||||||
|
|
||||||
This property holds the resolution of the camera viewfinder. If no
|
|
||||||
resolution is given the backend will use a default value.
|
|
||||||
|
|
||||||
\since 5.4
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\qmlproperty real QtMultimedia::Camera::viewfinder.minimumFrameRate
|
\qmlproperty real QtMultimedia::Camera::viewfinder.minimumFrameRate
|
||||||
\qmlproperty real QtMultimedia::Camera::viewfinder.maximumFrameRate
|
\qmlproperty real QtMultimedia::Camera::viewfinder.maximumFrameRate
|
||||||
|
|
||||||
These properties hold the limits of the preferred frame rate for the
|
These properties hold the viewfinder settings.
|
||||||
viewfinder in frames per second.
|
|
||||||
|
\c viewfinder.resolution holds the resolution of the camera viewfinder. If no
|
||||||
|
resolution is given or if it is empty, the backend uses a default value.
|
||||||
|
|
||||||
|
\c viewfinder.minimumFrameRate holds the minimum frame rate for the viewfinder in
|
||||||
|
frames per second. If no value is given or if set to \c 0, the backend uses a default value.
|
||||||
|
|
||||||
|
\c viewfinder.maximumFrameRate holds the maximum frame rate for the viewfinder in
|
||||||
|
frames per second. If no value is given or if set to \c 0, the backend uses a default value.
|
||||||
|
|
||||||
|
If \c viewfinder.minimumFrameRate is equal to \c viewfinder.maximumFrameRate, the frame rate is
|
||||||
|
fixed. If not, the actual frame rate fluctuates between the two values.
|
||||||
|
|
||||||
|
Changing the viewfinder settings while the camera is in the \c Camera.ActiveState state may
|
||||||
|
cause the camera to be restarted.
|
||||||
|
|
||||||
|
If the camera is used to capture videos or images, the viewfinder settings might be
|
||||||
|
ignored if they conflict with the capture settings. You can check the actual viewfinder settings
|
||||||
|
once the camera is in the \c Camera.ActiveStatus status.
|
||||||
|
|
||||||
|
Supported values can be retrieved with supportedViewfinderResolutions() and
|
||||||
|
supportedViewfinderFrameRateRanges().
|
||||||
|
|
||||||
\since 5.4
|
\since 5.4
|
||||||
*/
|
*/
|
||||||
@@ -1015,6 +1029,79 @@ QDeclarativeCameraViewfinder *QDeclarativeCamera::viewfinder()
|
|||||||
return m_viewfinder;
|
return m_viewfinder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\qmlmethod list<size> QtMultimedia::Camera::supportedViewfinderResolutions(real minimumFrameRate = undefined, real maximumFrameRate = undefined)
|
||||||
|
|
||||||
|
Returns a list of supported viewfinder resolutions.
|
||||||
|
|
||||||
|
If both optional parameters \a minimumFrameRate and \a maximumFrameRate are specified, the
|
||||||
|
returned list is reduced to resolutions supported for the given frame rate range.
|
||||||
|
|
||||||
|
The camera must be loaded before calling this function, otherwise the returned list
|
||||||
|
is empty.
|
||||||
|
|
||||||
|
\sa {QtMultimedia::Camera::viewfinder}{viewfinder}
|
||||||
|
|
||||||
|
\since 5.5
|
||||||
|
*/
|
||||||
|
QJSValue QDeclarativeCamera::supportedViewfinderResolutions(qreal minimumFrameRate, qreal maximumFrameRate)
|
||||||
|
{
|
||||||
|
QQmlEngine *engine = qmlEngine(this);
|
||||||
|
|
||||||
|
QCameraViewfinderSettings settings;
|
||||||
|
settings.setMinimumFrameRate(minimumFrameRate);
|
||||||
|
settings.setMaximumFrameRate(maximumFrameRate);
|
||||||
|
QList<QSize> resolutions = m_camera->supportedViewfinderResolutions(settings);
|
||||||
|
|
||||||
|
QJSValue supportedResolutions = engine->newArray(resolutions.count());
|
||||||
|
int i = 0;
|
||||||
|
Q_FOREACH (const QSize &resolution, resolutions) {
|
||||||
|
QJSValue size = engine->newObject();
|
||||||
|
size.setProperty(QStringLiteral("width"), resolution.width());
|
||||||
|
size.setProperty(QStringLiteral("height"), resolution.height());
|
||||||
|
supportedResolutions.setProperty(i++, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return supportedResolutions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\qmlmethod list<object> QtMultimedia::Camera::supportedViewfinderFrameRateRanges(size resolution = undefined)
|
||||||
|
|
||||||
|
Returns a list of supported viewfinder frame rate ranges.
|
||||||
|
|
||||||
|
Each range object in the list has the \c minimumFrameRate and \c maximumFrameRate properties.
|
||||||
|
|
||||||
|
If the optional parameter \a resolution is specified, the returned list is reduced to frame rate
|
||||||
|
ranges supported for the given \a resolution.
|
||||||
|
|
||||||
|
The camera must be loaded before calling this function, otherwise the returned list
|
||||||
|
is empty.
|
||||||
|
|
||||||
|
\sa {QtMultimedia::Camera::viewfinder}{viewfinder}
|
||||||
|
|
||||||
|
\since 5.5
|
||||||
|
*/
|
||||||
|
QJSValue QDeclarativeCamera::supportedViewfinderFrameRateRanges(const QSize &resolution)
|
||||||
|
{
|
||||||
|
QQmlEngine *engine = qmlEngine(this);
|
||||||
|
|
||||||
|
QCameraViewfinderSettings settings;
|
||||||
|
settings.setResolution(resolution);
|
||||||
|
QList<QCamera::FrameRateRange> frameRateRanges = m_camera->supportedViewfinderFrameRateRanges(settings);
|
||||||
|
|
||||||
|
QJSValue supportedFrameRateRanges = engine->newArray(frameRateRanges.count());
|
||||||
|
int i = 0;
|
||||||
|
Q_FOREACH (const QCamera::FrameRateRange &frameRateRange, frameRateRanges) {
|
||||||
|
QJSValue range = engine->newObject();
|
||||||
|
range.setProperty(QStringLiteral("minimumFrameRate"), frameRateRange.first);
|
||||||
|
range.setProperty(QStringLiteral("maximumFrameRate"), frameRateRange.second);
|
||||||
|
supportedFrameRateRanges.setProperty(i++, range);
|
||||||
|
}
|
||||||
|
|
||||||
|
return supportedFrameRateRanges;
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#include "moc_qdeclarativecamera_p.cpp"
|
#include "moc_qdeclarativecamera_p.cpp"
|
||||||
|
|||||||
@@ -294,6 +294,11 @@ public Q_SLOTS:
|
|||||||
void setOpticalZoom(qreal);
|
void setOpticalZoom(qreal);
|
||||||
void setDigitalZoom(qreal);
|
void setDigitalZoom(qreal);
|
||||||
|
|
||||||
|
Q_REVISION(2) QJSValue supportedViewfinderResolutions(qreal minimumFrameRate = 0.0,
|
||||||
|
qreal maximumFrameRate = 0.0);
|
||||||
|
|
||||||
|
Q_REVISION(2) QJSValue supportedViewfinderFrameRateRanges(const QSize &resolution = QSize());
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void errorChanged();
|
void errorChanged();
|
||||||
void error(QDeclarativeCamera::Error errorCode, const QString &errorString);
|
void error(QDeclarativeCamera::Error errorCode, const QString &errorString);
|
||||||
|
|||||||
@@ -42,68 +42,76 @@ QT_BEGIN_NAMESPACE
|
|||||||
QDeclarativeCameraViewfinder::QDeclarativeCameraViewfinder(QCamera *camera, QObject *parent)
|
QDeclarativeCameraViewfinder::QDeclarativeCameraViewfinder(QCamera *camera, QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_camera(camera)
|
, m_camera(camera)
|
||||||
, m_control(0)
|
|
||||||
{
|
{
|
||||||
if (QMediaService *service = m_camera->service())
|
connect(m_camera, &QCamera::statusChanged,
|
||||||
m_control = service->requestControl<QCameraViewfinderSettingsControl *>();
|
this, &QDeclarativeCameraViewfinder::_q_cameraStatusChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
QDeclarativeCameraViewfinder::~QDeclarativeCameraViewfinder()
|
QDeclarativeCameraViewfinder::~QDeclarativeCameraViewfinder()
|
||||||
{
|
{
|
||||||
if (m_control) {
|
|
||||||
if (QMediaService *service = m_camera->service())
|
|
||||||
service->releaseControl(m_control);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize QDeclarativeCameraViewfinder::resolution() const
|
QSize QDeclarativeCameraViewfinder::resolution() const
|
||||||
{
|
{
|
||||||
return m_control
|
return m_settings.resolution();
|
||||||
? m_control->viewfinderParameter(QCameraViewfinderSettingsControl::Resolution).value<QSize>()
|
|
||||||
: QSize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QDeclarativeCameraViewfinder::setResolution(const QSize &resolution)
|
void QDeclarativeCameraViewfinder::setResolution(const QSize &res)
|
||||||
{
|
{
|
||||||
if (m_control) {
|
if (res != m_settings.resolution()) {
|
||||||
m_control->setViewfinderParameter(
|
m_settings = m_camera->viewfinderSettings();
|
||||||
QCameraViewfinderSettingsControl::Resolution, resolution);
|
m_settings.setResolution(res);
|
||||||
|
m_camera->setViewfinderSettings(m_settings);
|
||||||
emit resolutionChanged();
|
emit resolutionChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QDeclarativeCameraViewfinder::minimumFrameRate() const
|
qreal QDeclarativeCameraViewfinder::minimumFrameRate() const
|
||||||
{
|
{
|
||||||
return m_control
|
return m_settings.minimumFrameRate();
|
||||||
? m_control->viewfinderParameter(QCameraViewfinderSettingsControl::MinimumFrameRate).value<qreal>()
|
|
||||||
: 0.0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QDeclarativeCameraViewfinder::setMinimumFrameRate(qreal frameRate)
|
void QDeclarativeCameraViewfinder::setMinimumFrameRate(qreal frameRate)
|
||||||
{
|
{
|
||||||
if (m_control) {
|
if (frameRate != minimumFrameRate()) {
|
||||||
m_control->setViewfinderParameter(
|
m_settings = m_camera->viewfinderSettings();
|
||||||
QCameraViewfinderSettingsControl::MinimumFrameRate, frameRate);
|
m_settings.setMinimumFrameRate(frameRate);
|
||||||
|
m_camera->setViewfinderSettings(m_settings);
|
||||||
emit minimumFrameRateChanged();
|
emit minimumFrameRateChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QDeclarativeCameraViewfinder::maximumFrameRate() const
|
qreal QDeclarativeCameraViewfinder::maximumFrameRate() const
|
||||||
{
|
{
|
||||||
return m_control
|
return m_settings.maximumFrameRate();
|
||||||
? m_control->viewfinderParameter(QCameraViewfinderSettingsControl::MaximumFrameRate).value<qreal>()
|
|
||||||
: 0.0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QDeclarativeCameraViewfinder::setMaximumFrameRate(qreal frameRate)
|
void QDeclarativeCameraViewfinder::setMaximumFrameRate(qreal frameRate)
|
||||||
{
|
{
|
||||||
if (m_control) {
|
if (frameRate != maximumFrameRate()) {
|
||||||
m_control->setViewfinderParameter(
|
m_settings = m_camera->viewfinderSettings();
|
||||||
QCameraViewfinderSettingsControl::MaximumFrameRate, frameRate);
|
m_settings.setMaximumFrameRate(frameRate);
|
||||||
|
m_camera->setViewfinderSettings(m_settings);
|
||||||
emit maximumFrameRateChanged();
|
emit maximumFrameRateChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QDeclarativeCameraViewfinder::_q_cameraStatusChanged(QCamera::Status status)
|
||||||
|
{
|
||||||
|
// Settings values might change when the camera starts, for example if the settings are
|
||||||
|
// undefined, if unsupported values were set or if the settings conflict with capture settings.
|
||||||
|
if (status == QCamera::ActiveStatus) {
|
||||||
|
QCameraViewfinderSettings oldSettings = m_settings;
|
||||||
|
m_settings = m_camera->viewfinderSettings();
|
||||||
|
if (oldSettings.resolution() != m_settings.resolution())
|
||||||
|
emit resolutionChanged();
|
||||||
|
if (oldSettings.minimumFrameRate() != m_settings.minimumFrameRate())
|
||||||
|
emit minimumFrameRateChanged();
|
||||||
|
if (oldSettings.maximumFrameRate() != m_settings.maximumFrameRate())
|
||||||
|
emit maximumFrameRateChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#include "moc_qdeclarativecameraviewfinder_p.cpp"
|
#include "moc_qdeclarativecameraviewfinder_p.cpp"
|
||||||
|
|||||||
@@ -78,9 +78,12 @@ Q_SIGNALS:
|
|||||||
void minimumFrameRateChanged();
|
void minimumFrameRateChanged();
|
||||||
void maximumFrameRateChanged();
|
void maximumFrameRateChanged();
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void _q_cameraStatusChanged(QCamera::Status status);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QCamera *m_camera;
|
QCamera *m_camera;
|
||||||
QCameraViewfinderSettingsControl *m_control;
|
QCameraViewfinderSettings m_settings;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ PUBLIC_HEADERS += \
|
|||||||
camera/qcameraexposure.h \
|
camera/qcameraexposure.h \
|
||||||
camera/qcamerafocus.h \
|
camera/qcamerafocus.h \
|
||||||
camera/qcameraimageprocessing.h \
|
camera/qcameraimageprocessing.h \
|
||||||
camera/qcamerainfo.h
|
camera/qcamerainfo.h \
|
||||||
|
camera/qcameraviewfindersettings.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
camera/qcamera.cpp \
|
camera/qcamera.cpp \
|
||||||
@@ -17,5 +18,5 @@ SOURCES += \
|
|||||||
camera/qcamerafocus.cpp \
|
camera/qcamerafocus.cpp \
|
||||||
camera/qcameraimageprocessing.cpp \
|
camera/qcameraimageprocessing.cpp \
|
||||||
camera/qcameraimagecapture.cpp \
|
camera/qcameraimagecapture.cpp \
|
||||||
camera/qcamerainfo.cpp
|
camera/qcamerainfo.cpp \
|
||||||
|
camera/qcameraviewfindersettings.cpp
|
||||||
|
|||||||
@@ -45,6 +45,7 @@
|
|||||||
#include <qcameraimagecapturecontrol.h>
|
#include <qcameraimagecapturecontrol.h>
|
||||||
#include <qvideodeviceselectorcontrol.h>
|
#include <qvideodeviceselectorcontrol.h>
|
||||||
#include <qcamerainfocontrol.h>
|
#include <qcamerainfocontrol.h>
|
||||||
|
#include <qcameraviewfindersettingscontrol.h>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
@@ -64,6 +65,16 @@ static void qRegisterCameraMetaTypes()
|
|||||||
|
|
||||||
Q_CONSTRUCTOR_FUNCTION(qRegisterCameraMetaTypes)
|
Q_CONSTRUCTOR_FUNCTION(qRegisterCameraMetaTypes)
|
||||||
|
|
||||||
|
static bool qt_sizeLessThan(const QSize &s1, const QSize &s2)
|
||||||
|
{
|
||||||
|
return (s1.width() * s1.height()) < (s2.width() * s2.height());
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool qt_frameRateRangeLessThan(const QCamera::FrameRateRange &s1, const QCamera::FrameRateRange &s2)
|
||||||
|
{
|
||||||
|
return s1.second < s2.second;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QCamera
|
\class QCamera
|
||||||
|
|
||||||
@@ -168,6 +179,9 @@ void QCameraPrivate::initControls()
|
|||||||
locksControl = qobject_cast<QCameraLocksControl *>(service->requestControl(QCameraLocksControl_iid));
|
locksControl = qobject_cast<QCameraLocksControl *>(service->requestControl(QCameraLocksControl_iid));
|
||||||
deviceControl = qobject_cast<QVideoDeviceSelectorControl*>(service->requestControl(QVideoDeviceSelectorControl_iid));
|
deviceControl = qobject_cast<QVideoDeviceSelectorControl*>(service->requestControl(QVideoDeviceSelectorControl_iid));
|
||||||
infoControl = qobject_cast<QCameraInfoControl*>(service->requestControl(QCameraInfoControl_iid));
|
infoControl = qobject_cast<QCameraInfoControl*>(service->requestControl(QCameraInfoControl_iid));
|
||||||
|
viewfinderSettingsControl2 = qobject_cast<QCameraViewfinderSettingsControl2*>(service->requestControl(QCameraViewfinderSettingsControl2_iid));
|
||||||
|
if (!viewfinderSettingsControl2)
|
||||||
|
viewfinderSettingsControl = qobject_cast<QCameraViewfinderSettingsControl*>(service->requestControl(QCameraViewfinderSettingsControl_iid));
|
||||||
|
|
||||||
if (control) {
|
if (control) {
|
||||||
q->connect(control, SIGNAL(stateChanged(QCamera::State)), q, SLOT(_q_updateState(QCamera::State)));
|
q->connect(control, SIGNAL(stateChanged(QCamera::State)), q, SLOT(_q_updateState(QCamera::State)));
|
||||||
@@ -189,6 +203,8 @@ void QCameraPrivate::initControls()
|
|||||||
locksControl = 0;
|
locksControl = 0;
|
||||||
deviceControl = 0;
|
deviceControl = 0;
|
||||||
infoControl = 0;
|
infoControl = 0;
|
||||||
|
viewfinderSettingsControl = 0;
|
||||||
|
viewfinderSettingsControl2 = 0;
|
||||||
|
|
||||||
error = QCamera::ServiceMissingError;
|
error = QCamera::ServiceMissingError;
|
||||||
errorString = QCamera::tr("The camera service is missing");
|
errorString = QCamera::tr("The camera service is missing");
|
||||||
@@ -210,6 +226,10 @@ void QCameraPrivate::clear()
|
|||||||
service->releaseControl(deviceControl);
|
service->releaseControl(deviceControl);
|
||||||
if (infoControl)
|
if (infoControl)
|
||||||
service->releaseControl(infoControl);
|
service->releaseControl(infoControl);
|
||||||
|
if (viewfinderSettingsControl)
|
||||||
|
service->releaseControl(viewfinderSettingsControl);
|
||||||
|
if (viewfinderSettingsControl2)
|
||||||
|
service->releaseControl(viewfinderSettingsControl2);
|
||||||
|
|
||||||
provider->releaseService(service);
|
provider->releaseService(service);
|
||||||
}
|
}
|
||||||
@@ -221,6 +241,8 @@ void QCameraPrivate::clear()
|
|||||||
locksControl = 0;
|
locksControl = 0;
|
||||||
deviceControl = 0;
|
deviceControl = 0;
|
||||||
infoControl = 0;
|
infoControl = 0;
|
||||||
|
viewfinderSettingsControl = 0;
|
||||||
|
viewfinderSettingsControl2 = 0;
|
||||||
service = 0;
|
service = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -516,6 +538,219 @@ void QCamera::setViewfinder(QAbstractVideoSurface *surface)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns the viewfinder settings being used by the camera.
|
||||||
|
|
||||||
|
Settings may change when the camera is started, for example if the viewfinder settings
|
||||||
|
are undefined or if unsupported values are set.
|
||||||
|
|
||||||
|
If viewfinder settings are not supported by the camera, it always returns a null
|
||||||
|
QCameraViewfinderSettings object.
|
||||||
|
|
||||||
|
\sa setViewfinderSettings()
|
||||||
|
|
||||||
|
\since 5.5
|
||||||
|
*/
|
||||||
|
QCameraViewfinderSettings QCamera::viewfinderSettings() const
|
||||||
|
{
|
||||||
|
Q_D(const QCamera);
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl2)
|
||||||
|
return d->viewfinderSettingsControl2->viewfinderSettings();
|
||||||
|
|
||||||
|
QCameraViewfinderSettings settings;
|
||||||
|
if (d->viewfinderSettingsControl) {
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::Resolution))
|
||||||
|
settings.setResolution(d->viewfinderSettingsControl->viewfinderParameter(QCameraViewfinderSettingsControl::Resolution).toSize());
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::MinimumFrameRate))
|
||||||
|
settings.setMinimumFrameRate(d->viewfinderSettingsControl->viewfinderParameter(QCameraViewfinderSettingsControl::MinimumFrameRate).toReal());
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::MaximumFrameRate))
|
||||||
|
settings.setMaximumFrameRate(d->viewfinderSettingsControl->viewfinderParameter(QCameraViewfinderSettingsControl::MaximumFrameRate).toReal());
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::PixelAspectRatio))
|
||||||
|
settings.setPixelAspectRatio(d->viewfinderSettingsControl->viewfinderParameter(QCameraViewfinderSettingsControl::PixelAspectRatio).toSize());
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::PixelFormat))
|
||||||
|
settings.setPixelFormat(qvariant_cast<QVideoFrame::PixelFormat>(d->viewfinderSettingsControl->viewfinderParameter(QCameraViewfinderSettingsControl::PixelFormat)));
|
||||||
|
}
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Sets the viewfinder \a settings.
|
||||||
|
|
||||||
|
If some parameters are not specified, or null settings are passed, the camera will choose
|
||||||
|
default values.
|
||||||
|
|
||||||
|
If the camera is used to capture videos or images, the viewfinder settings might be
|
||||||
|
ignored if they conflict with the capture settings. You can check the actual viewfinder settings
|
||||||
|
once the camera is in the \c QCamera::ActiveStatus status.
|
||||||
|
|
||||||
|
Changing the viewfinder settings while the camera is in the QCamera::ActiveState state may
|
||||||
|
cause the camera to be restarted.
|
||||||
|
|
||||||
|
\sa viewfinderSettings(), supportedViewfinderResolutions(), supportedViewfinderFrameRateRanges(),
|
||||||
|
supportedViewfinderPixelFormats()
|
||||||
|
|
||||||
|
\since 5.5
|
||||||
|
*/
|
||||||
|
void QCamera::setViewfinderSettings(const QCameraViewfinderSettings &settings)
|
||||||
|
{
|
||||||
|
Q_D(QCamera);
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl || d->viewfinderSettingsControl2)
|
||||||
|
d->_q_preparePropertyChange(QCameraControl::ViewfinderSettings);
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl2) {
|
||||||
|
d->viewfinderSettingsControl2->setViewfinderSettings(settings);
|
||||||
|
|
||||||
|
} else if (d->viewfinderSettingsControl) {
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::Resolution))
|
||||||
|
d->viewfinderSettingsControl->setViewfinderParameter(QCameraViewfinderSettingsControl::Resolution, settings.resolution());
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::MinimumFrameRate))
|
||||||
|
d->viewfinderSettingsControl->setViewfinderParameter(QCameraViewfinderSettingsControl::MinimumFrameRate, settings.minimumFrameRate());
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::MaximumFrameRate))
|
||||||
|
d->viewfinderSettingsControl->setViewfinderParameter(QCameraViewfinderSettingsControl::MaximumFrameRate, settings.maximumFrameRate());
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::PixelAspectRatio))
|
||||||
|
d->viewfinderSettingsControl->setViewfinderParameter(QCameraViewfinderSettingsControl::PixelAspectRatio, settings.pixelAspectRatio());
|
||||||
|
|
||||||
|
if (d->viewfinderSettingsControl->isViewfinderParameterSupported(QCameraViewfinderSettingsControl::PixelFormat))
|
||||||
|
d->viewfinderSettingsControl->setViewfinderParameter(QCameraViewfinderSettingsControl::PixelFormat, settings.pixelFormat());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a list of supported viewfinder settings.
|
||||||
|
|
||||||
|
The list is ordered by preference; preferred settings come first.
|
||||||
|
|
||||||
|
The optional \a settings argument can be used to conveniently filter the results.
|
||||||
|
If \a settings is non null, the returned list is reduced to settings matching the given partial
|
||||||
|
\a settings.
|
||||||
|
|
||||||
|
The camera must be loaded before calling this function, otherwise the returned list
|
||||||
|
is empty.
|
||||||
|
|
||||||
|
\sa setViewfinderSettings(), supportedViewfinderResolutions(), supportedViewfinderFrameRateRanges(),
|
||||||
|
supportedViewfinderPixelFormats()
|
||||||
|
|
||||||
|
\since 5.5
|
||||||
|
*/
|
||||||
|
QList<QCameraViewfinderSettings> QCamera::supportedViewfinderSettings(const QCameraViewfinderSettings &settings) const
|
||||||
|
{
|
||||||
|
Q_D(const QCamera);
|
||||||
|
|
||||||
|
if (!d->viewfinderSettingsControl2)
|
||||||
|
return QList<QCameraViewfinderSettings>();
|
||||||
|
|
||||||
|
if (settings.isNull())
|
||||||
|
return d->viewfinderSettingsControl2->supportedViewfinderSettings();
|
||||||
|
|
||||||
|
QList<QCameraViewfinderSettings> results;
|
||||||
|
QList<QCameraViewfinderSettings> supported = d->viewfinderSettingsControl2->supportedViewfinderSettings();
|
||||||
|
Q_FOREACH (const QCameraViewfinderSettings &s, supported) {
|
||||||
|
if ((settings.resolution().isEmpty() || settings.resolution() == s.resolution())
|
||||||
|
&& (qFuzzyIsNull(settings.minimumFrameRate()) || qFuzzyCompare((float)settings.minimumFrameRate(), (float)s.minimumFrameRate()))
|
||||||
|
&& (qFuzzyIsNull(settings.maximumFrameRate()) || qFuzzyCompare((float)settings.maximumFrameRate(), (float)s.maximumFrameRate()))
|
||||||
|
&& (settings.pixelFormat() == QVideoFrame::Format_Invalid || settings.pixelFormat() == s.pixelFormat())
|
||||||
|
&& (settings.pixelAspectRatio() == QSize(1, 1) || settings.pixelAspectRatio() == s.pixelAspectRatio())) {
|
||||||
|
results.append(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a list of supported viewfinder resolutions.
|
||||||
|
|
||||||
|
This is a convenience function which retrieves unique resolutions from the supported settings.
|
||||||
|
|
||||||
|
If non null viewfinder \a settings are passed, the returned list is reduced to resolutions
|
||||||
|
supported with partial \a settings applied.
|
||||||
|
|
||||||
|
The camera must be loaded before calling this function, otherwise the returned list
|
||||||
|
is empty.
|
||||||
|
|
||||||
|
\sa QCameraViewfinderSettings::resolution(), setViewfinderSettings()
|
||||||
|
|
||||||
|
\since 5.5
|
||||||
|
*/
|
||||||
|
QList<QSize> QCamera::supportedViewfinderResolutions(const QCameraViewfinderSettings &settings) const
|
||||||
|
{
|
||||||
|
QList<QSize> resolutions;
|
||||||
|
QList<QCameraViewfinderSettings> capabilities = supportedViewfinderSettings(settings);
|
||||||
|
Q_FOREACH (const QCameraViewfinderSettings &s, capabilities) {
|
||||||
|
if (!resolutions.contains(s.resolution()))
|
||||||
|
resolutions.append(s.resolution());
|
||||||
|
}
|
||||||
|
std::sort(resolutions.begin(), resolutions.end(), qt_sizeLessThan);
|
||||||
|
|
||||||
|
return resolutions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a list of supported viewfinder frame rate ranges.
|
||||||
|
|
||||||
|
This is a convenience function which retrieves unique frame rate ranges from the supported settings.
|
||||||
|
|
||||||
|
If non null viewfinder \a settings are passed, the returned list is reduced to frame rate ranges
|
||||||
|
supported with partial \a settings applied.
|
||||||
|
|
||||||
|
The camera must be loaded before calling this function, otherwise the returned list
|
||||||
|
is empty.
|
||||||
|
|
||||||
|
\sa QCameraViewfinderSettings::minimumFrameRate(), QCameraViewfinderSettings::maximumFrameRate(),
|
||||||
|
setViewfinderSettings()
|
||||||
|
|
||||||
|
\since 5.5
|
||||||
|
*/
|
||||||
|
QList<QCamera::FrameRateRange> QCamera::supportedViewfinderFrameRateRanges(const QCameraViewfinderSettings &settings) const
|
||||||
|
{
|
||||||
|
QList<QCamera::FrameRateRange> frameRateRanges;
|
||||||
|
QList<QCameraViewfinderSettings> capabilities = supportedViewfinderSettings(settings);
|
||||||
|
Q_FOREACH (const QCameraViewfinderSettings &s, capabilities) {
|
||||||
|
QCamera::FrameRateRange range(s.minimumFrameRate(), s.maximumFrameRate());
|
||||||
|
if (!frameRateRanges.contains(range))
|
||||||
|
frameRateRanges.append(range);
|
||||||
|
}
|
||||||
|
std::sort(frameRateRanges.begin(), frameRateRanges.end(), qt_frameRateRangeLessThan);
|
||||||
|
|
||||||
|
return frameRateRanges;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a list of supported viewfinder pixel formats.
|
||||||
|
|
||||||
|
This is a convenience function which retrieves unique pixel formats from the supported settings.
|
||||||
|
|
||||||
|
If non null viewfinder \a settings are passed, the returned list is reduced to pixel formats
|
||||||
|
supported with partial \a settings applied.
|
||||||
|
|
||||||
|
The camera must be loaded before calling this function, otherwise the returned list
|
||||||
|
is empty.
|
||||||
|
|
||||||
|
\sa QCameraViewfinderSettings::pixelFormat(), setViewfinderSettings()
|
||||||
|
|
||||||
|
\since 5.5
|
||||||
|
*/
|
||||||
|
QList<QVideoFrame::PixelFormat> QCamera::supportedViewfinderPixelFormats(const QCameraViewfinderSettings &settings) const
|
||||||
|
{
|
||||||
|
QList<QVideoFrame::PixelFormat> pixelFormats;
|
||||||
|
QList<QCameraViewfinderSettings> capabilities = supportedViewfinderSettings(settings);
|
||||||
|
Q_FOREACH (const QCameraViewfinderSettings &s, capabilities) {
|
||||||
|
if (!pixelFormats.contains(s.pixelFormat()))
|
||||||
|
pixelFormats.append(s.pixelFormat());
|
||||||
|
}
|
||||||
|
|
||||||
|
return pixelFormats;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns the error state of the object.
|
Returns the error state of the object.
|
||||||
*/
|
*/
|
||||||
@@ -792,6 +1027,17 @@ void QCamera::unlock()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\typedef QCamera::FrameRateRange
|
||||||
|
|
||||||
|
This is a typedef for QPair<qreal, qreal>.
|
||||||
|
|
||||||
|
A frame rate range contains a minimum and a maximum frame rate, respectively the first and
|
||||||
|
second element of the pair. If the minimum frame 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\enum QCamera::State
|
\enum QCamera::State
|
||||||
\value UnloadedState
|
\value UnloadedState
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
#include <QtMultimedia/qcameraexposure.h>
|
#include <QtMultimedia/qcameraexposure.h>
|
||||||
#include <QtMultimedia/qcamerafocus.h>
|
#include <QtMultimedia/qcamerafocus.h>
|
||||||
#include <QtMultimedia/qcameraimageprocessing.h>
|
#include <QtMultimedia/qcameraimageprocessing.h>
|
||||||
|
#include <QtMultimedia/qcameraviewfindersettings.h>
|
||||||
|
|
||||||
#include <QtMultimedia/qmediaenumdebug.h>
|
#include <QtMultimedia/qmediaenumdebug.h>
|
||||||
|
|
||||||
@@ -76,6 +77,8 @@ class Q_MULTIMEDIA_EXPORT QCamera : public QMediaObject
|
|||||||
Q_ENUMS(LockType)
|
Q_ENUMS(LockType)
|
||||||
Q_ENUMS(Position)
|
Q_ENUMS(Position)
|
||||||
public:
|
public:
|
||||||
|
typedef QPair<qreal, qreal> FrameRateRange;
|
||||||
|
|
||||||
enum Status {
|
enum Status {
|
||||||
UnavailableStatus,
|
UnavailableStatus,
|
||||||
UnloadedStatus,
|
UnloadedStatus,
|
||||||
@@ -169,6 +172,21 @@ public:
|
|||||||
void setViewfinder(QGraphicsVideoItem *viewfinder);
|
void setViewfinder(QGraphicsVideoItem *viewfinder);
|
||||||
void setViewfinder(QAbstractVideoSurface *surface);
|
void setViewfinder(QAbstractVideoSurface *surface);
|
||||||
|
|
||||||
|
QCameraViewfinderSettings viewfinderSettings() const;
|
||||||
|
void setViewfinderSettings(const QCameraViewfinderSettings &settings);
|
||||||
|
|
||||||
|
QList<QCameraViewfinderSettings> supportedViewfinderSettings(
|
||||||
|
const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;
|
||||||
|
|
||||||
|
QList<QSize> supportedViewfinderResolutions(
|
||||||
|
const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;
|
||||||
|
|
||||||
|
QList<FrameRateRange> supportedViewfinderFrameRateRanges(
|
||||||
|
const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;
|
||||||
|
|
||||||
|
QList<QVideoFrame::PixelFormat> supportedViewfinderPixelFormats(
|
||||||
|
const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const;
|
||||||
|
|
||||||
Error error() const;
|
Error error() const;
|
||||||
QString errorString() const;
|
QString errorString() const;
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,8 @@ class QCameraControl;
|
|||||||
class QVideoDeviceSelectorControl;
|
class QVideoDeviceSelectorControl;
|
||||||
class QCameraLocksControl;
|
class QCameraLocksControl;
|
||||||
class QCameraInfoControl;
|
class QCameraInfoControl;
|
||||||
|
class QCameraViewfinderSettingsControl;
|
||||||
|
class QCameraViewfinderSettingsControl2;
|
||||||
|
|
||||||
class QCameraPrivate : public QMediaObjectPrivate
|
class QCameraPrivate : public QMediaObjectPrivate
|
||||||
{
|
{
|
||||||
@@ -68,6 +70,8 @@ public:
|
|||||||
deviceControl(0),
|
deviceControl(0),
|
||||||
locksControl(0),
|
locksControl(0),
|
||||||
infoControl(0),
|
infoControl(0),
|
||||||
|
viewfinderSettingsControl(0),
|
||||||
|
viewfinderSettingsControl2(0),
|
||||||
viewfinder(0),
|
viewfinder(0),
|
||||||
capture(0),
|
capture(0),
|
||||||
state(QCamera::UnloadedState),
|
state(QCamera::UnloadedState),
|
||||||
@@ -91,6 +95,8 @@ public:
|
|||||||
QVideoDeviceSelectorControl *deviceControl;
|
QVideoDeviceSelectorControl *deviceControl;
|
||||||
QCameraLocksControl *locksControl;
|
QCameraLocksControl *locksControl;
|
||||||
QCameraInfoControl *infoControl;
|
QCameraInfoControl *infoControl;
|
||||||
|
QCameraViewfinderSettingsControl *viewfinderSettingsControl;
|
||||||
|
QCameraViewfinderSettingsControl2 *viewfinderSettingsControl2;
|
||||||
|
|
||||||
QCameraExposure *cameraExposure;
|
QCameraExposure *cameraExposure;
|
||||||
QCameraFocus *cameraFocus;
|
QCameraFocus *cameraFocus;
|
||||||
|
|||||||
311
src/multimedia/camera/qcameraviewfindersettings.cpp
Normal file
311
src/multimedia/camera/qcameraviewfindersettings.cpp
Normal file
@@ -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
|
||||||
86
src/multimedia/camera/qcameraviewfindersettings.h
Normal file
86
src/multimedia/camera/qcameraviewfindersettings.h
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** 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$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QCAMERAVIEWFINDERSETTINGS_H
|
||||||
|
#define QCAMERAVIEWFINDERSETTINGS_H
|
||||||
|
|
||||||
|
#include <QtCore/qsharedpointer.h>
|
||||||
|
#include <QtMultimedia/qtmultimediadefs.h>
|
||||||
|
#include <QtMultimedia/qvideoframe.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QCameraViewfinderSettingsPrivate;
|
||||||
|
|
||||||
|
class Q_MULTIMEDIA_EXPORT QCameraViewfinderSettings
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QCameraViewfinderSettings();
|
||||||
|
QCameraViewfinderSettings(const QCameraViewfinderSettings& other);
|
||||||
|
|
||||||
|
~QCameraViewfinderSettings();
|
||||||
|
|
||||||
|
QCameraViewfinderSettings& operator=(const QCameraViewfinderSettings &other);
|
||||||
|
bool operator==(const QCameraViewfinderSettings &other) const;
|
||||||
|
bool operator!=(const QCameraViewfinderSettings &other) const;
|
||||||
|
|
||||||
|
bool isNull() const;
|
||||||
|
|
||||||
|
QSize resolution() const;
|
||||||
|
void setResolution(const QSize &);
|
||||||
|
inline void setResolution(int width, int height)
|
||||||
|
{ setResolution(QSize(width, height)); }
|
||||||
|
|
||||||
|
qreal minimumFrameRate() const;
|
||||||
|
void setMinimumFrameRate(qreal rate);
|
||||||
|
|
||||||
|
qreal maximumFrameRate() const;
|
||||||
|
void setMaximumFrameRate(qreal rate);
|
||||||
|
|
||||||
|
QVideoFrame::PixelFormat pixelFormat() const;
|
||||||
|
void setPixelFormat(QVideoFrame::PixelFormat format);
|
||||||
|
|
||||||
|
QSize pixelAspectRatio() const;
|
||||||
|
void setPixelAspectRatio(const QSize &ratio);
|
||||||
|
inline void setPixelAspectRatio(int horizontal, int vertical)
|
||||||
|
{ setPixelAspectRatio(QSize(horizontal, vertical)); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
QSharedDataPointer<QCameraViewfinderSettingsPrivate> d;
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(QCameraViewfinderSettings)
|
||||||
|
|
||||||
|
#endif // QCAMERAVIEWFINDERSETTINGS_H
|
||||||
@@ -190,6 +190,7 @@ QCameraControl::~QCameraControl()
|
|||||||
\value VideoEncodingSettings
|
\value VideoEncodingSettings
|
||||||
Video encoder settings are changed, including audio, video and container settings.
|
Video encoder settings are changed, including audio, video and container settings.
|
||||||
\value Viewfinder Viewfinder is changed.
|
\value Viewfinder Viewfinder is changed.
|
||||||
|
\value ViewfinderSettings Viewfinder settings are changed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "moc_qcameracontrol.cpp"
|
#include "moc_qcameracontrol.cpp"
|
||||||
|
|||||||
@@ -53,7 +53,8 @@ public:
|
|||||||
CaptureMode = 1,
|
CaptureMode = 1,
|
||||||
ImageEncodingSettings = 2,
|
ImageEncodingSettings = 2,
|
||||||
VideoEncodingSettings = 3,
|
VideoEncodingSettings = 3,
|
||||||
Viewfinder = 4
|
Viewfinder = 4,
|
||||||
|
ViewfinderSettings = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
~QCameraControl();
|
~QCameraControl();
|
||||||
|
|||||||
@@ -50,13 +50,17 @@ QT_BEGIN_NAMESPACE
|
|||||||
The interface name of QCameraViewfinderSettingsControl is \c org.qt-project.qt.cameraviewfindersettingscontrol/5.0 as
|
The interface name of QCameraViewfinderSettingsControl is \c org.qt-project.qt.cameraviewfindersettingscontrol/5.0 as
|
||||||
defined in QCameraViewfinderSettingsControl_iid.
|
defined in QCameraViewfinderSettingsControl_iid.
|
||||||
|
|
||||||
\sa QMediaService::requestControl(), QCamera
|
\warning New backends should implement QCameraViewfinderSettingsControl2 instead.
|
||||||
|
Application developers should request this control only if QCameraViewfinderSettingsControl2
|
||||||
|
is not available.
|
||||||
|
|
||||||
|
\sa QMediaService::requestControl(), QCameraViewfinderSettingsControl2, QCamera
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\macro QCameraViewfinderSettingsControl_iid
|
\macro QCameraViewfinderSettingsControl_iid
|
||||||
|
|
||||||
\c org.qt-project.qt.cameraviewfinderresettingscontrol/5.0
|
\c org.qt-project.qt.cameraviewfindersettingscontrol/5.0
|
||||||
|
|
||||||
Defines the interface name of the QCameraViewfinderSettingsControl class.
|
Defines the interface name of the QCameraViewfinderSettingsControl class.
|
||||||
|
|
||||||
@@ -123,6 +127,73 @@ QCameraViewfinderSettingsControl::~QCameraViewfinderSettingsControl()
|
|||||||
with viewfinder settings, the camara configuration is usually preferred.
|
with viewfinder settings, the camara configuration is usually preferred.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class QCameraViewfinderSettingsControl2
|
||||||
|
\inmodule QtMultimedia
|
||||||
|
\ingroup multimedia_control
|
||||||
|
\since 5.5
|
||||||
|
|
||||||
|
\brief The QCameraViewfinderSettingsControl2 class provides access to the viewfinder settings
|
||||||
|
of a camera media service.
|
||||||
|
|
||||||
|
The functionality provided by this control is exposed to application code through the QCamera class.
|
||||||
|
|
||||||
|
The interface name of QCameraViewfinderSettingsControl2 is \c org.qt-project.qt.cameraviewfindersettingscontrol2/5.5 as
|
||||||
|
defined in QCameraViewfinderSettingsControl2_iid.
|
||||||
|
|
||||||
|
\sa QMediaService::requestControl(), QCameraViewfinderSettings, QCamera
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\macro QCameraViewfinderSettingsControl2_iid
|
||||||
|
|
||||||
|
\c org.qt-project.qt.cameraviewfindersettingscontrol2/5.5
|
||||||
|
|
||||||
|
Defines the interface name of the QCameraViewfinderSettingsControl2 class.
|
||||||
|
|
||||||
|
\relates QCameraViewfinderSettingsControl2
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Constructs a camera viewfinder settings control object with \a parent.
|
||||||
|
*/
|
||||||
|
QCameraViewfinderSettingsControl2::QCameraViewfinderSettingsControl2(QObject *parent)
|
||||||
|
: QMediaControl(*new QMediaControlPrivate, parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Destroys the camera viewfinder settings control object.
|
||||||
|
*/
|
||||||
|
QCameraViewfinderSettingsControl2::~QCameraViewfinderSettingsControl2()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QCameraViewfinderSettingsControl2::supportedViewfinderSettings() const
|
||||||
|
|
||||||
|
Returns a list of supported camera viewfinder settings.
|
||||||
|
|
||||||
|
The list is ordered by preference; preferred settings come first.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QCameraViewfinderSettingsControl2::viewfinderSettings() const
|
||||||
|
|
||||||
|
Returns the viewfinder settings.
|
||||||
|
|
||||||
|
If undefined or unsupported values are passed to QCameraViewfinderSettingsControl2::setViewfinderSettings(),
|
||||||
|
this function returns the actual settings used by the camera viewfinder. These may be available
|
||||||
|
only once the camera is active.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QCameraViewfinderSettingsControl2::setViewfinderSettings(const QCameraViewfinderSettings &settings)
|
||||||
|
|
||||||
|
Sets the camera viewfinder \a settings.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "moc_qcameraviewfindersettingscontrol.cpp"
|
#include "moc_qcameraviewfindersettingscontrol.cpp"
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#define QCAMERAVIEWFINDERSETTINGSCONTROL_H
|
#define QCAMERAVIEWFINDERSETTINGSCONTROL_H
|
||||||
|
|
||||||
#include <QtMultimedia/qmediacontrol.h>
|
#include <QtMultimedia/qmediacontrol.h>
|
||||||
|
#include <QtMultimedia/qcamera.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@@ -69,6 +70,28 @@ protected:
|
|||||||
#define QCameraViewfinderSettingsControl_iid "org.qt-project.qt.cameraviewfindersettingscontrol/5.0"
|
#define QCameraViewfinderSettingsControl_iid "org.qt-project.qt.cameraviewfindersettingscontrol/5.0"
|
||||||
Q_MEDIA_DECLARE_CONTROL(QCameraViewfinderSettingsControl, QCameraViewfinderSettingsControl_iid)
|
Q_MEDIA_DECLARE_CONTROL(QCameraViewfinderSettingsControl, QCameraViewfinderSettingsControl_iid)
|
||||||
|
|
||||||
|
|
||||||
|
// Required for QDoc workaround
|
||||||
|
class QString;
|
||||||
|
|
||||||
|
class Q_MULTIMEDIA_EXPORT QCameraViewfinderSettingsControl2 : public QMediaControl
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
virtual ~QCameraViewfinderSettingsControl2();
|
||||||
|
|
||||||
|
virtual QList<QCameraViewfinderSettings> supportedViewfinderSettings() const = 0;
|
||||||
|
|
||||||
|
virtual QCameraViewfinderSettings viewfinderSettings() const = 0;
|
||||||
|
virtual void setViewfinderSettings(const QCameraViewfinderSettings &settings) = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QCameraViewfinderSettingsControl2(QObject *parent = 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
#define QCameraViewfinderSettingsControl2_iid "org.qt-project.qt.cameraviewfindersettingscontrol2/5.5"
|
||||||
|
Q_MEDIA_DECLARE_CONTROL(QCameraViewfinderSettingsControl2, QCameraViewfinderSettingsControl2_iid)
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QCAMERAVIEWFINDERSETTINGSCONTROL_H
|
#endif // QCAMERAVIEWFINDERSETTINGSCONTROL_H
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#include "qcamera.h"
|
#include "qcamera.h"
|
||||||
#include "qcamerainfo.h"
|
#include "qcamerainfo.h"
|
||||||
#include "qcameraviewfinder.h"
|
#include "qcameraviewfinder.h"
|
||||||
|
#include "qcameraviewfindersettings.h"
|
||||||
#include "qmediarecorder.h"
|
#include "qmediarecorder.h"
|
||||||
#include "qcameraimagecapture.h"
|
#include "qcameraimagecapture.h"
|
||||||
#include "qcameraimageprocessing.h"
|
#include "qcameraimageprocessing.h"
|
||||||
@@ -273,3 +274,15 @@ void camerafocus()
|
|||||||
}
|
}
|
||||||
//! [Camera focus zones]
|
//! [Camera focus zones]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void camera_viewfindersettings()
|
||||||
|
{
|
||||||
|
//! [Camera viewfinder settings]
|
||||||
|
QCameraViewfinderSettings viewfinderSettings;
|
||||||
|
viewfinderSettings.setResolution(640, 480);
|
||||||
|
viewfinderSettings.setMinimumFrameRate(15.0);
|
||||||
|
viewfinderSettings.setMaximumFrameRate(30.0);
|
||||||
|
|
||||||
|
camera->setViewfinderSettings(viewfinderSettings);
|
||||||
|
//! [Camera viewfinder settings]
|
||||||
|
}
|
||||||
|
|||||||
@@ -88,6 +88,8 @@ private slots:
|
|||||||
void testCameraCapture();
|
void testCameraCapture();
|
||||||
void testCameraCaptureMetadata();
|
void testCameraCaptureMetadata();
|
||||||
void testImageSettings();
|
void testImageSettings();
|
||||||
|
void testViewfinderSettings();
|
||||||
|
void testViewfinderSettingsChange();
|
||||||
void testCameraLock();
|
void testCameraLock();
|
||||||
void testCameraLockCancel();
|
void testCameraLockCancel();
|
||||||
void testCameraEncodingProperyChange();
|
void testCameraEncodingProperyChange();
|
||||||
@@ -874,6 +876,174 @@ void tst_QCamera::testImageSettings()
|
|||||||
QVERIFY(settings1 != settings2);
|
QVERIFY(settings1 != settings2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QCamera::testViewfinderSettings()
|
||||||
|
{
|
||||||
|
QCameraViewfinderSettings settings;
|
||||||
|
QVERIFY(settings.isNull());
|
||||||
|
QVERIFY(settings == QCameraViewfinderSettings());
|
||||||
|
|
||||||
|
QCOMPARE(settings.resolution(), QSize());
|
||||||
|
settings.setResolution(QSize(640, 480));
|
||||||
|
QCOMPARE(settings.resolution(), QSize(640, 480));
|
||||||
|
settings.setResolution(1280, 720);
|
||||||
|
QCOMPARE(settings.resolution(), QSize(1280, 720));
|
||||||
|
QVERIFY(!settings.isNull());
|
||||||
|
QVERIFY(settings != QCameraViewfinderSettings());
|
||||||
|
|
||||||
|
settings = QCameraViewfinderSettings();
|
||||||
|
QVERIFY(qFuzzyIsNull(settings.minimumFrameRate()));
|
||||||
|
settings.setMinimumFrameRate(10.0);
|
||||||
|
QVERIFY(qFuzzyCompare(settings.minimumFrameRate(), 10.0));
|
||||||
|
QVERIFY(qFuzzyIsNull(settings.maximumFrameRate()));
|
||||||
|
settings.setMaximumFrameRate(20.0);
|
||||||
|
QVERIFY(qFuzzyCompare(settings.maximumFrameRate(), 20.0));
|
||||||
|
QVERIFY(!settings.isNull());
|
||||||
|
|
||||||
|
settings = QCameraViewfinderSettings();
|
||||||
|
QCOMPARE(settings.pixelFormat(), QVideoFrame::Format_Invalid);
|
||||||
|
settings.setPixelFormat(QVideoFrame::Format_RGB32);
|
||||||
|
QCOMPARE(settings.pixelFormat(), QVideoFrame::Format_RGB32);
|
||||||
|
QVERIFY(!settings.isNull());
|
||||||
|
|
||||||
|
settings = QCameraViewfinderSettings();
|
||||||
|
QCOMPARE(settings.pixelAspectRatio(), QSize(1, 1));
|
||||||
|
settings.setPixelAspectRatio(QSize(2, 1));
|
||||||
|
QCOMPARE(settings.pixelAspectRatio(), QSize(2, 1));
|
||||||
|
settings.setPixelAspectRatio(3, 2);
|
||||||
|
QCOMPARE(settings.pixelAspectRatio(), QSize(3, 2));
|
||||||
|
QVERIFY(!settings.isNull());
|
||||||
|
|
||||||
|
settings = QCameraViewfinderSettings();
|
||||||
|
|
||||||
|
{
|
||||||
|
QCameraViewfinderSettings settings1;
|
||||||
|
QCameraViewfinderSettings settings2;
|
||||||
|
QCOMPARE(settings2, settings1);
|
||||||
|
|
||||||
|
settings2 = settings1;
|
||||||
|
QCOMPARE(settings2, settings1);
|
||||||
|
QVERIFY(settings2.isNull());
|
||||||
|
|
||||||
|
settings1.setResolution(800, 600);
|
||||||
|
|
||||||
|
QVERIFY(settings2.isNull());
|
||||||
|
QVERIFY(!settings1.isNull());
|
||||||
|
QVERIFY(settings1 != settings2);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
QCameraViewfinderSettings settings1;
|
||||||
|
QCameraViewfinderSettings settings2(settings1);
|
||||||
|
QCOMPARE(settings2, settings1);
|
||||||
|
|
||||||
|
settings2 = settings1;
|
||||||
|
QCOMPARE(settings2, settings1);
|
||||||
|
QVERIFY(settings2.isNull());
|
||||||
|
|
||||||
|
settings1.setResolution(800, 600);
|
||||||
|
|
||||||
|
QVERIFY(settings2.isNull());
|
||||||
|
QVERIFY(!settings1.isNull());
|
||||||
|
QVERIFY(settings1 != settings2);
|
||||||
|
}
|
||||||
|
|
||||||
|
QCameraViewfinderSettings settings1;
|
||||||
|
QCameraViewfinderSettings settings2;
|
||||||
|
|
||||||
|
settings1 = QCameraViewfinderSettings();
|
||||||
|
settings1.setResolution(800,600);
|
||||||
|
settings2 = QCameraViewfinderSettings();
|
||||||
|
settings2.setResolution(QSize(800,600));
|
||||||
|
QVERIFY(settings1 == settings2);
|
||||||
|
settings2.setResolution(QSize(400,300));
|
||||||
|
QVERIFY(settings1 != settings2);
|
||||||
|
|
||||||
|
settings1 = QCameraViewfinderSettings();
|
||||||
|
settings1.setMinimumFrameRate(10.0);
|
||||||
|
settings2 = QCameraViewfinderSettings();
|
||||||
|
settings2.setMinimumFrameRate(10.0);
|
||||||
|
QVERIFY(settings1 == settings2);
|
||||||
|
settings2.setMinimumFrameRate(15.0);
|
||||||
|
QVERIFY(settings1 != settings2);
|
||||||
|
|
||||||
|
settings1 = QCameraViewfinderSettings();
|
||||||
|
settings1.setMaximumFrameRate(30.0);
|
||||||
|
settings2 = QCameraViewfinderSettings();
|
||||||
|
settings2.setMaximumFrameRate(30.0);
|
||||||
|
QVERIFY(settings1 == settings2);
|
||||||
|
settings2.setMaximumFrameRate(15.0);
|
||||||
|
QVERIFY(settings1 != settings2);
|
||||||
|
|
||||||
|
settings1 = QCameraViewfinderSettings();
|
||||||
|
settings1.setPixelFormat(QVideoFrame::Format_YV12);
|
||||||
|
settings2 = QCameraViewfinderSettings();
|
||||||
|
settings2.setPixelFormat(QVideoFrame::Format_YV12);
|
||||||
|
QVERIFY(settings1 == settings2);
|
||||||
|
settings2.setPixelFormat(QVideoFrame::Format_NV21);
|
||||||
|
QVERIFY(settings1 != settings2);
|
||||||
|
|
||||||
|
settings1 = QCameraViewfinderSettings();
|
||||||
|
settings1.setPixelAspectRatio(2,1);
|
||||||
|
settings2 = QCameraViewfinderSettings();
|
||||||
|
settings2.setPixelAspectRatio(QSize(2,1));
|
||||||
|
QVERIFY(settings1 == settings2);
|
||||||
|
settings2.setPixelAspectRatio(QSize(1,2));
|
||||||
|
QVERIFY(settings1 != settings2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_QCamera::testViewfinderSettingsChange()
|
||||||
|
{
|
||||||
|
QCamera camera;
|
||||||
|
|
||||||
|
QSignalSpy stateChangedSignal(&camera, SIGNAL(stateChanged(QCamera::State)));
|
||||||
|
QSignalSpy statusChangedSignal(&camera, SIGNAL(statusChanged(QCamera::Status)));
|
||||||
|
|
||||||
|
camera.start();
|
||||||
|
QCOMPARE(camera.state(), QCamera::ActiveState);
|
||||||
|
QCOMPARE(camera.status(), QCamera::ActiveStatus);
|
||||||
|
|
||||||
|
QCOMPARE(stateChangedSignal.count(), 1);
|
||||||
|
QCOMPARE(statusChangedSignal.count(), 1);
|
||||||
|
stateChangedSignal.clear();
|
||||||
|
statusChangedSignal.clear();
|
||||||
|
|
||||||
|
//the settings change should trigger camera stop/start
|
||||||
|
camera.setViewfinderSettings(QCameraViewfinderSettings());
|
||||||
|
QCOMPARE(camera.state(), QCamera::ActiveState);
|
||||||
|
QCOMPARE(camera.status(), QCamera::LoadedStatus);
|
||||||
|
|
||||||
|
QCOMPARE(stateChangedSignal.count(), 0);
|
||||||
|
QCOMPARE(statusChangedSignal.count(), 1);
|
||||||
|
stateChangedSignal.clear();
|
||||||
|
statusChangedSignal.clear();
|
||||||
|
|
||||||
|
QCOMPARE(camera.state(), QCamera::ActiveState);
|
||||||
|
QTRY_COMPARE(camera.status(), QCamera::ActiveStatus);
|
||||||
|
|
||||||
|
QCOMPARE(stateChangedSignal.count(), 0);
|
||||||
|
QCOMPARE(statusChangedSignal.count(), 1);
|
||||||
|
stateChangedSignal.clear();
|
||||||
|
statusChangedSignal.clear();
|
||||||
|
|
||||||
|
//the settings change should trigger camera stop/start only once
|
||||||
|
camera.setViewfinderSettings(QCameraViewfinderSettings());
|
||||||
|
camera.setViewfinderSettings(QCameraViewfinderSettings());
|
||||||
|
|
||||||
|
QCOMPARE(camera.state(), QCamera::ActiveState);
|
||||||
|
QCOMPARE(camera.status(), QCamera::LoadedStatus);
|
||||||
|
|
||||||
|
QCOMPARE(stateChangedSignal.count(), 0);
|
||||||
|
QCOMPARE(statusChangedSignal.count(), 1);
|
||||||
|
stateChangedSignal.clear();
|
||||||
|
statusChangedSignal.clear();
|
||||||
|
|
||||||
|
QCOMPARE(camera.state(), QCamera::ActiveState);
|
||||||
|
QTRY_COMPARE(camera.status(), QCamera::ActiveStatus);
|
||||||
|
|
||||||
|
QCOMPARE(stateChangedSignal.count(), 0);
|
||||||
|
QCOMPARE(statusChangedSignal.count(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QCamera::testCameraLock()
|
void tst_QCamera::testCameraLock()
|
||||||
{
|
{
|
||||||
QCamera camera;
|
QCamera camera;
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ HEADERS *= \
|
|||||||
../qmultimedia_common/mockimageencodercontrol.h \
|
../qmultimedia_common/mockimageencodercontrol.h \
|
||||||
../qmultimedia_common/mockcameracontrol.h \
|
../qmultimedia_common/mockcameracontrol.h \
|
||||||
../qmultimedia_common/mockvideodeviceselectorcontrol.h \
|
../qmultimedia_common/mockvideodeviceselectorcontrol.h \
|
||||||
../qmultimedia_common/mockcamerainfocontrol.h
|
../qmultimedia_common/mockcamerainfocontrol.h \
|
||||||
|
../qmultimedia_common/mockcameraviewfindersettingscontrol.h
|
||||||
|
|
||||||
|
|
||||||
include(mockvideo.pri)
|
include(mockvideo.pri)
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
#include "../qmultimedia_common/mockvideowindowcontrol.h"
|
#include "../qmultimedia_common/mockvideowindowcontrol.h"
|
||||||
#include "../qmultimedia_common/mockvideodeviceselectorcontrol.h"
|
#include "../qmultimedia_common/mockvideodeviceselectorcontrol.h"
|
||||||
#include "../qmultimedia_common/mockcamerainfocontrol.h"
|
#include "../qmultimedia_common/mockcamerainfocontrol.h"
|
||||||
|
#include "../qmultimedia_common/mockcameraviewfindersettingscontrol.h"
|
||||||
|
|
||||||
class MockSimpleCameraService : public QMediaService
|
class MockSimpleCameraService : public QMediaService
|
||||||
{
|
{
|
||||||
@@ -101,6 +102,7 @@ public:
|
|||||||
windowControl = new MockVideoWindowControl(this);
|
windowControl = new MockVideoWindowControl(this);
|
||||||
mockVideoDeviceSelectorControl = new MockVideoDeviceSelectorControl(this);
|
mockVideoDeviceSelectorControl = new MockVideoDeviceSelectorControl(this);
|
||||||
mockCameraInfoControl = new MockCameraInfoControl(this);
|
mockCameraInfoControl = new MockCameraInfoControl(this);
|
||||||
|
mockViewfinderSettingsControl = new MockCameraViewfinderSettingsControl(this);
|
||||||
rendererRef = 0;
|
rendererRef = 0;
|
||||||
windowRef = 0;
|
windowRef = 0;
|
||||||
}
|
}
|
||||||
@@ -162,6 +164,11 @@ public:
|
|||||||
return windowControl;
|
return windowControl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qstrcmp(iid, QCameraViewfinderSettingsControl2_iid) == 0) {
|
||||||
|
return mockViewfinderSettingsControl;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,6 +195,7 @@ public:
|
|||||||
MockVideoWindowControl *windowControl;
|
MockVideoWindowControl *windowControl;
|
||||||
MockVideoDeviceSelectorControl *mockVideoDeviceSelectorControl;
|
MockVideoDeviceSelectorControl *mockVideoDeviceSelectorControl;
|
||||||
MockCameraInfoControl *mockCameraInfoControl;
|
MockCameraInfoControl *mockCameraInfoControl;
|
||||||
|
MockCameraViewfinderSettingsControl *mockViewfinderSettingsControl;
|
||||||
int rendererRef;
|
int rendererRef;
|
||||||
int windowRef;
|
int windowRef;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the test suite 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$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MOCKCAMERAVIEWFINDERSETTINGSCONTROL_H
|
||||||
|
#define MOCKCAMERAVIEWFINDERSETTINGSCONTROL_H
|
||||||
|
|
||||||
|
#include "qcameraviewfindersettingscontrol.h"
|
||||||
|
|
||||||
|
class MockCameraViewfinderSettingsControl : public QCameraViewfinderSettingsControl2
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
MockCameraViewfinderSettingsControl(QObject *parent = 0):
|
||||||
|
QCameraViewfinderSettingsControl2(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~MockCameraViewfinderSettingsControl() {}
|
||||||
|
|
||||||
|
QCameraViewfinderSettings viewfinderSettings() const
|
||||||
|
{
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setViewfinderSettings(const QCameraViewfinderSettings &s)
|
||||||
|
{
|
||||||
|
settings = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QCameraViewfinderSettings> supportedViewfinderSettings() const
|
||||||
|
{
|
||||||
|
return QList<QCameraViewfinderSettings>();
|
||||||
|
}
|
||||||
|
|
||||||
|
QCameraViewfinderSettings settings;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MOCKCAMERAVIEWFINDERSETTINGSCONTROL_H
|
||||||
Reference in New Issue
Block a user