From ded4d7b006180d12f4f2e7642877ffc6586a5331 Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Mon, 24 Aug 2015 15:06:53 +0200 Subject: Fix possible crashes in QDeclarativeRadioData. It would crash when accessing any of its properties when there is no radio backend available. Task-number: QTBUG-47859 Change-Id: Ic7c0a70ca3e9a4768359b3429ea812caece09fce Reviewed-by: Christian Stromme --- src/imports/multimedia/qdeclarativeradiodata.cpp | 38 +++++++++++++++++++----- 1 file changed, 30 insertions(+), 8 deletions(-) (limited to 'src/imports') diff --git a/src/imports/multimedia/qdeclarativeradiodata.cpp b/src/imports/multimedia/qdeclarativeradiodata.cpp index 51d3bb877..f272e8d09 100644 --- a/src/imports/multimedia/qdeclarativeradiodata.cpp +++ b/src/imports/multimedia/qdeclarativeradiodata.cpp @@ -129,7 +129,10 @@ QDeclarativeRadioData::~QDeclarativeRadioData() */ QDeclarativeRadioData::Availability QDeclarativeRadioData::availability() const { - return Availability(m_radioData->availability()); + if (m_radioData) + return Availability(m_radioData->availability()); + + return Unavailable; } @@ -141,7 +144,10 @@ QDeclarativeRadioData::Availability QDeclarativeRadioData::availability() const */ QString QDeclarativeRadioData::stationId() const { - return m_radioData->stationId(); + if (m_radioData) + return m_radioData->stationId(); + + return QString(); } /*! @@ -206,7 +212,10 @@ QString QDeclarativeRadioData::stationId() const */ QDeclarativeRadioData::ProgramType QDeclarativeRadioData::programType() const { - return static_cast(m_radioData->programType()); + if (m_radioData) + return static_cast(m_radioData->programType()); + + return Undefined; } /*! @@ -216,7 +225,10 @@ QDeclarativeRadioData::ProgramType QDeclarativeRadioData::programType() const */ QString QDeclarativeRadioData::programTypeName() const { - return m_radioData->programTypeName(); + if (m_radioData) + return m_radioData->programTypeName(); + + return QString(); } /*! @@ -226,7 +238,10 @@ QString QDeclarativeRadioData::programTypeName() const */ QString QDeclarativeRadioData::stationName() const { - return m_radioData->stationName(); + if (m_radioData) + return m_radioData->stationName(); + + return QString(); } /*! @@ -238,7 +253,10 @@ QString QDeclarativeRadioData::stationName() const */ QString QDeclarativeRadioData::radioText() const { - return m_radioData->radioText(); + if (m_radioData) + return m_radioData->radioText(); + + return QString(); } /*! @@ -250,12 +268,16 @@ QString QDeclarativeRadioData::radioText() const */ bool QDeclarativeRadioData::alternativeFrequenciesEnabled() const { - return m_radioData->isAlternativeFrequenciesEnabled(); + if (m_radioData) + return m_radioData->isAlternativeFrequenciesEnabled(); + + return false; } void QDeclarativeRadioData::setAlternativeFrequenciesEnabled(bool enabled) { - m_radioData->setAlternativeFrequenciesEnabled(enabled); + if (m_radioData) + m_radioData->setAlternativeFrequenciesEnabled(enabled); } void QDeclarativeRadioData::_q_programTypeChanged(QRadioData::ProgramType programType) -- cgit v1.2.3 From 4eb4a3ada360af152b9403e8a88eb76b9474c4ba Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Thu, 13 Aug 2015 18:18:44 +0200 Subject: Fix QML Camera::supportedViewfinderFrameRateRanges(). Pass the resolution argument as a QJSValue instead of a QSize. This allows to be more flexible and doesn't require the QML argument to be an actual QML 'size' value. It can be any object with the 'width' and 'height' properties. Added missing auto-tests for supportedViewfinderResolutions() and supportedViewfinderFrameRateRanges(). Change-Id: I6c8ae72e6dab8c9d12bbada5b8e7f45e96e9289d Task-number: QTBUG-47630 Reviewed-by: Simon Hausmann --- src/imports/multimedia/qdeclarativecamera.cpp | 9 +++++++-- src/imports/multimedia/qdeclarativecamera_p.h | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src/imports') diff --git a/src/imports/multimedia/qdeclarativecamera.cpp b/src/imports/multimedia/qdeclarativecamera.cpp index 5930b20fb..eac1c0c9b 100644 --- a/src/imports/multimedia/qdeclarativecamera.cpp +++ b/src/imports/multimedia/qdeclarativecamera.cpp @@ -1013,12 +1013,17 @@ QJSValue QDeclarativeCamera::supportedViewfinderResolutions(qreal minimumFrameRa \since 5.5 */ -QJSValue QDeclarativeCamera::supportedViewfinderFrameRateRanges(const QSize &resolution) +QJSValue QDeclarativeCamera::supportedViewfinderFrameRateRanges(const QJSValue &resolution) { QQmlEngine *engine = qmlEngine(this); QCameraViewfinderSettings settings; - settings.setResolution(resolution); + if (!resolution.isUndefined()) { + QJSValue width = resolution.property(QStringLiteral("width")); + QJSValue height = resolution.property(QStringLiteral("height")); + if (width.isNumber() && height.isNumber()) + settings.setResolution(width.toInt(), height.toInt()); + } QList frameRateRanges = m_camera->supportedViewfinderFrameRateRanges(settings); QJSValue supportedFrameRateRanges = engine->newArray(frameRateRanges.count()); diff --git a/src/imports/multimedia/qdeclarativecamera_p.h b/src/imports/multimedia/qdeclarativecamera_p.h index 623460c59..b3f199a57 100644 --- a/src/imports/multimedia/qdeclarativecamera_p.h +++ b/src/imports/multimedia/qdeclarativecamera_p.h @@ -57,6 +57,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -297,7 +298,7 @@ public Q_SLOTS: Q_REVISION(2) QJSValue supportedViewfinderResolutions(qreal minimumFrameRate = 0.0, qreal maximumFrameRate = 0.0); - Q_REVISION(2) QJSValue supportedViewfinderFrameRateRanges(const QSize &resolution = QSize()); + Q_REVISION(2) QJSValue supportedViewfinderFrameRateRanges(const QJSValue &resolution = QJSValue()); Q_SIGNALS: void errorChanged(); -- cgit v1.2.3 From 99f6cf5f282c0d3d7192d5e87b745873e159c93d Mon Sep 17 00:00:00 2001 From: Marco Benelli Date: Tue, 15 Sep 2015 13:37:57 +0200 Subject: Fixed revisions of camera-related meta objects. Change-Id: I91fe90122d53ce12322cecac8282ef9622869b71 Reviewed-by: Yoann Lopes --- src/imports/multimedia/multimedia.cpp | 6 +++--- src/imports/multimedia/plugins.qmltypes | 20 ++++++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) (limited to 'src/imports') diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp index 652359f3b..4b31068ea 100644 --- a/src/imports/multimedia/multimedia.cpp +++ b/src/imports/multimedia/multimedia.cpp @@ -97,7 +97,7 @@ public: trUtf8("CameraImageProcessing is provided by Camera")); // 5.2 types - qmlRegisterRevision(uri, 5, 2); + qmlRegisterType(uri, 5, 2, "VideoOutput"); // 5.3 types // Nothing changed, but adding "import QtMultimedia 5.3" in QML will fail unless at @@ -106,13 +106,13 @@ public: // 5.4 types qmlRegisterSingletonType(uri, 5, 4, "QtMultimedia", multimedia_global_object); - qmlRegisterRevision(uri, 5, 4); + qmlRegisterType(uri, 5, 4, "Camera"); qmlRegisterUncreatableType(uri, 5, 4, "CameraViewfinder", trUtf8("CameraViewfinder is provided by Camera")); // 5.5 types qmlRegisterUncreatableType(uri, 5, 5, "CameraImageProcessing", trUtf8("CameraImageProcessing is provided by Camera")); - qmlRegisterRevision(uri, 5, 5); + qmlRegisterType(uri, 5, 5, "Camera"); qmlRegisterType(); qmlRegisterType(); diff --git a/src/imports/multimedia/plugins.qmltypes b/src/imports/multimedia/plugins.qmltypes index d01c988ba..53d7cb435 100644 --- a/src/imports/multimedia/plugins.qmltypes +++ b/src/imports/multimedia/plugins.qmltypes @@ -1,4 +1,4 @@ -import QtQuick.tooling 1.1 +import QtQuick.tooling 1.2 // This file describes the plugin-supplied types contained in the library. // It is used for QML tooling purposes only. @@ -7,6 +7,7 @@ import QtQuick.tooling 1.1 // 'qmlplugindump -nonrelocatable QtMultimedia 5.5' Module { + dependencies: ["QtQuick 2.0"] Component { name: "QAbstractVideoFilter" prototype: "QObject" @@ -244,8 +245,12 @@ Module { Component { name: "QDeclarativeCamera" prototype: "QObject" - exports: ["QtMultimedia/Camera 5.0"] - exportMetaObjectRevisions: [0] + exports: [ + "QtMultimedia/Camera 5.0", + "QtMultimedia/Camera 5.4", + "QtMultimedia/Camera 5.5" + ] + exportMetaObjectRevisions: [0, 1, 2] Enum { name: "Position" values: { @@ -517,7 +522,7 @@ Module { name: "supportedViewfinderFrameRateRanges" revision: 2 type: "QJSValue" - Parameter { name: "resolution"; type: "QSize" } + Parameter { name: "resolution"; type: "QJSValue" } } Method { name: "supportedViewfinderFrameRateRanges"; revision: 2; type: "QJSValue" } } @@ -1497,8 +1502,11 @@ Module { name: "QDeclarativeVideoOutput" defaultProperty: "data" prototype: "QQuickItem" - exports: ["QtMultimedia/VideoOutput 5.0"] - exportMetaObjectRevisions: [0] + exports: [ + "QtMultimedia/VideoOutput 5.0", + "QtMultimedia/VideoOutput 5.2" + ] + exportMetaObjectRevisions: [0, 2] Enum { name: "FillMode" values: { -- cgit v1.2.3