diff options
Diffstat (limited to 'src/imports/multimedia')
-rw-r--r-- | src/imports/multimedia/Video.qml | 19 | ||||
-rw-r--r-- | src/imports/multimedia/multimedia.cpp | 6 | ||||
-rw-r--r-- | src/imports/multimedia/plugins.qmltypes | 36 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativeaudio.cpp | 59 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativeaudio_p.h | 6 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativecamera.cpp | 17 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativecamera_p.h | 5 |
7 files changed, 139 insertions, 9 deletions
diff --git a/src/imports/multimedia/Video.qml b/src/imports/multimedia/Video.qml index 19c437869..24fde22e1 100644 --- a/src/imports/multimedia/Video.qml +++ b/src/imports/multimedia/Video.qml @@ -38,7 +38,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtMultimedia 5.11 +import QtMultimedia 5.13 /*! \qmltype Video @@ -125,6 +125,23 @@ Item { property alias fillMode: videoOut.fillMode /*! + \qmlproperty enumeration Video::flushMode + + Set this property to define what \c Video should show + when playback is finished or stopped. + + \list + \li VideoOutput.EmptyFrame - clears video output. + \li VideoOutput.FirstFrame - shows the first valid frame. + \li VideoOutput.LastFrame - shows the last valid frame. + \endlist + + The default flush mode is EmptyFrame. + \since 5.15 + */ + property alias flushMode: videoOut.flushMode + + /*! \qmlproperty int Video::orientation The orientation of the \c Video in degrees. Only multiples of 90 diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp index 8aed83d33..0bbe9cae3 100644 --- a/src/imports/multimedia/multimedia.cpp +++ b/src/imports/multimedia/multimedia.cpp @@ -60,6 +60,7 @@ #include "qdeclarativecameraimageprocessing_p.h" #include "qdeclarativecameraviewfinder_p.h" #include "qdeclarativetorch_p.h" +#include <QAbstractVideoSurface> QML_DECLARE_TYPE(QSoundEffect) @@ -160,6 +161,11 @@ public: // 5.13 types qmlRegisterType<QDeclarativeVideoOutput, 13>(uri, 5, 13, "VideoOutput"); + // 5.15 types + qmlRegisterType<QDeclarativeAudio, 15>(uri, 5, 15, "MediaPlayer"); + qmlRegisterType<QDeclarativeVideoOutput, 15>(uri, 5, 15, "VideoOutput"); + qmlRegisterType<QAbstractVideoSurface>(); + // Auto-increment the import to stay in sync with ALL future QtQuick minor versions from 5.11 onward qmlRegisterModule(uri, 5, QT_VERSION_MINOR); } diff --git a/src/imports/multimedia/plugins.qmltypes b/src/imports/multimedia/plugins.qmltypes index 870544160..06fb8918b 100644 --- a/src/imports/multimedia/plugins.qmltypes +++ b/src/imports/multimedia/plugins.qmltypes @@ -4,7 +4,7 @@ import QtQuick.tooling 1.2 // It is used for QML tooling purposes only. // // This file was auto-generated by: -// 'qmlplugindump -nonrelocatable QtMultimedia 5.14' +// 'qmlplugindump -nonrelocatable QtMultimedia 5.15' Module { dependencies: ["QtQuick 2.0"] @@ -288,6 +288,24 @@ Module { Property { name: "active"; type: "bool" } } Component { + name: "QAbstractVideoSurface" + prototype: "QObject" + Property { name: "nativeResolution"; type: "QSize"; isReadonly: true } + Signal { + name: "activeChanged" + Parameter { name: "active"; type: "bool" } + } + Signal { + name: "surfaceFormatChanged" + Parameter { name: "format"; type: "QVideoSurfaceFormat" } + } + Signal { name: "supportedFormatsChanged" } + Signal { + name: "nativeResolutionChanged" + Parameter { name: "resolution"; type: "QSize" } + } + } + Component { name: "QCamera" prototype: "QMediaObject" Enum { @@ -427,10 +445,11 @@ Module { "QtMultimedia/Audio 5.9", "QtMultimedia/MediaPlayer 5.0", "QtMultimedia/MediaPlayer 5.11", + "QtMultimedia/MediaPlayer 5.15", "QtMultimedia/MediaPlayer 5.6", "QtMultimedia/MediaPlayer 5.9" ] - exportMetaObjectRevisions: [0, 3, 1, 2, 0, 3, 1, 2] + exportMetaObjectRevisions: [0, 3, 1, 2, 0, 3, 15, 1, 2] Enum { name: "Status" values: { @@ -524,6 +543,7 @@ Module { Property { name: "audioRole"; revision: 1; type: "AudioRole" } Property { name: "customAudioRole"; revision: 3; type: "string" } Property { name: "notifyInterval"; revision: 2; type: "int" } + Property { name: "videoOutput"; revision: 15; type: "QVariant" } Signal { name: "playlistChanged"; revision: 1 } Signal { name: "loopCountChanged" } Signal { name: "paused" } @@ -541,6 +561,7 @@ Module { Parameter { name: "errorString"; type: "string" } } Signal { name: "notifyIntervalChanged"; revision: 2 } + Signal { name: "videoOutputChanged"; revision: 15 } Method { name: "play" } Method { name: "pause" } Method { name: "stop" } @@ -2025,9 +2046,10 @@ Module { exports: [ "QtMultimedia/VideoOutput 5.0", "QtMultimedia/VideoOutput 5.13", + "QtMultimedia/VideoOutput 5.15", "QtMultimedia/VideoOutput 5.2" ] - exportMetaObjectRevisions: [0, 13, 2] + exportMetaObjectRevisions: [0, 13, 15, 2] Enum { name: "FlushMode" values: { @@ -2052,6 +2074,13 @@ Module { Property { name: "contentRect"; type: "QRectF"; isReadonly: true } Property { name: "filters"; type: "QAbstractVideoFilter"; isList: true; isReadonly: true } Property { name: "flushMode"; revision: 13; type: "FlushMode" } + Property { + name: "videoSurface" + revision: 15 + type: "QAbstractVideoSurface" + isReadonly: true + isPointer: true + } Signal { name: "fillModeChanged" Parameter { type: "QDeclarativeVideoOutput::FillMode" } @@ -2124,6 +2153,7 @@ Module { Parameter { name: "availability"; type: "QMultimedia::AvailabilityStatus" } } } + Component { name: "QSGVideoItemSurface"; prototype: "QAbstractVideoSurface" } Component { name: "QSoundEffect" prototype: "QObject" diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp index 9d41c77fa..fcba6257d 100644 --- a/src/imports/multimedia/qdeclarativeaudio.cpp +++ b/src/imports/multimedia/qdeclarativeaudio.cpp @@ -45,12 +45,14 @@ #include <qmediaservice.h> #include <private/qmediaserviceprovider_p.h> +#include <private/qdeclarativevideooutput_p.h> #include <qmetadatareadercontrol.h> #include <qmediaavailabilitycontrol.h> #include "qdeclarativeplaylist_p.h" #include "qdeclarativemediametadata_p.h" +#include <QAbstractVideoSurface> #include <QTimerEvent> #include <QtQml/qqmlengine.h> @@ -130,6 +132,63 @@ QDeclarativeAudio::~QDeclarativeAudio() } /*! + \since 5.15 + \qmlproperty url QtMultimedia::MediaPlayer::videoOutput + + This property holds the target video output. + Accepts one or an array of QAbstractVideoSurface or VideoOutput elements. + + \snippet multimedia-snippets/multiple-videooutputs.qml complete + + \sa QMediaPlayer::setVideoOutput() +*/ + +QVariant QDeclarativeAudio::videoOutput() const +{ + return m_videoOutput; +} + +void QDeclarativeAudio::setVideoOutput(const QVariant &v) +{ + if (m_videoOutput == v) + return; + + QAbstractVideoSurface *surface = nullptr; + auto vo = v.value<QDeclarativeVideoOutput *>(); + if (vo) + surface = vo->videoSurface(); + else + surface = v.value<QAbstractVideoSurface *>(); + + // If only one object has been passed. + if (surface) { + m_player->setVideoOutput(surface); + } else { + QVector<QAbstractVideoSurface *> surfaces; + // Check if it is an array. + auto arr = v.value<QJSValue>(); + if (!arr.isNull()) { + const int len = arr.property("length").toInt(); + for (int i = 0; i < len; ++i) { + auto &&v = arr.property(i); + if (v.isQObject()) { + auto obj = v.toQObject(); + vo = qobject_cast<QDeclarativeVideoOutput *>(obj); + surface = vo ? vo->videoSurface() : qobject_cast<QAbstractVideoSurface *>(obj); + if (surface) + surfaces.append(surface); + } + } + } + + m_player->setVideoOutput(surfaces); + } + + m_videoOutput = v; + emit videoOutputChanged(); +} + +/*! \qmlproperty enumeration QtMultimedia::Audio::availability Returns the availability state of the media player. diff --git a/src/imports/multimedia/qdeclarativeaudio_p.h b/src/imports/multimedia/qdeclarativeaudio_p.h index 043b36042..dc8800695 100644 --- a/src/imports/multimedia/qdeclarativeaudio_p.h +++ b/src/imports/multimedia/qdeclarativeaudio_p.h @@ -97,6 +97,7 @@ class QDeclarativeAudio : public QObject, public QQmlParserStatus Q_PROPERTY(AudioRole audioRole READ audioRole WRITE setAudioRole NOTIFY audioRoleChanged REVISION 1) Q_PROPERTY(QString customAudioRole READ customAudioRole WRITE setCustomAudioRole NOTIFY customAudioRoleChanged REVISION 3) Q_PROPERTY(int notifyInterval READ notifyInterval WRITE setNotifyInterval NOTIFY notifyIntervalChanged REVISION 2) + Q_PROPERTY(QVariant videoOutput READ videoOutput WRITE setVideoOutput NOTIFY videoOutputChanged REVISION 15) Q_ENUMS(Status) Q_ENUMS(Error) Q_ENUMS(Loop) @@ -164,6 +165,9 @@ public: QDeclarativeAudio(QObject *parent = 0); ~QDeclarativeAudio(); + QVariant videoOutput() const; + void setVideoOutput(const QVariant &); + bool hasAudio() const; bool hasVideo() const; @@ -269,6 +273,7 @@ Q_SIGNALS: void mediaObjectChanged(); Q_REVISION(2) void notifyIntervalChanged(); + Q_REVISION(15) void videoOutputChanged(); private Q_SLOTS: void _q_error(QMediaPlayer::Error); @@ -305,6 +310,7 @@ private: QMediaPlayer *m_player; int m_notifyInterval; + QVariant m_videoOutput; friend class QDeclarativeMediaBaseAnimation; }; diff --git a/src/imports/multimedia/qdeclarativecamera.cpp b/src/imports/multimedia/qdeclarativecamera.cpp index 7730c9900..3a9bc8fa2 100644 --- a/src/imports/multimedia/qdeclarativecamera.cpp +++ b/src/imports/multimedia/qdeclarativecamera.cpp @@ -59,9 +59,10 @@ QT_BEGIN_NAMESPACE -void QDeclarativeCamera::_q_error(QCamera::Error errorCode) +void QDeclarativeCamera::_q_errorOccurred(QCamera::Error errorCode) { emit error(Error(errorCode), errorString()); + emit errorOccurred(Error(errorCode), errorString()); emit errorChanged(); } @@ -197,7 +198,7 @@ QDeclarativeCamera::QDeclarativeCamera(QObject *parent) : this, SIGNAL(lockStatusChanged())); connect(m_camera, &QCamera::stateChanged, this, &QDeclarativeCamera::_q_updateState); connect(m_camera, SIGNAL(statusChanged(QCamera::Status)), this, SIGNAL(cameraStatusChanged())); - connect(m_camera, SIGNAL(error(QCamera::Error)), this, SLOT(_q_error(QCamera::Error))); + connect(m_camera, SIGNAL(errorOccurred(QCamera::Error)), this, SLOT(_q_errorOccurred(QCamera::Error))); connect(m_camera, SIGNAL(availabilityChanged(QMultimedia::AvailabilityStatus)), this, SLOT(_q_availabilityChanged(QMultimedia::AvailabilityStatus))); @@ -420,7 +421,7 @@ QDeclarativeCamera::Error QDeclarativeCamera::errorCode() const This property holds the last error string, if any. - \sa error, errorCode + \sa errorOccurred, errorCode */ QString QDeclarativeCamera::errorString() const { @@ -752,11 +753,19 @@ void QDeclarativeCamera::setDigitalZoom(qreal value) \value Camera.NotSupportedFeatureError The feature is not supported. - \sa error, errorString + \sa errorOccurred, errorString */ /*! \qmlsignal QtMultimedia::Camera::error(errorCode, errorString) + \obsolete + + Use errorOccurred() instead. +*/ + +/*! + \qmlsignal QtMultimedia::Camera::errorOccurred(errorCode, errorString) + \since 5.15 This signal is emitted when an error specified by \a errorCode occurs. A descriptive string value is available in \a errorString. diff --git a/src/imports/multimedia/qdeclarativecamera_p.h b/src/imports/multimedia/qdeclarativecamera_p.h index 97afa5b53..41203ac80 100644 --- a/src/imports/multimedia/qdeclarativecamera_p.h +++ b/src/imports/multimedia/qdeclarativecamera_p.h @@ -308,7 +308,10 @@ public Q_SLOTS: Q_SIGNALS: void errorChanged(); +#if QT_DEPRECATED_SINCE(5,15) void error(QDeclarativeCamera::Error errorCode, const QString &errorString); +#endif + Q_REVISION(15) void errorOccurred(QDeclarativeCamera::Error errorCode, const QString &errorString); Q_REVISION(1) void deviceIdChanged(); Q_REVISION(1) void positionChanged(); @@ -332,7 +335,7 @@ Q_SIGNALS: private Q_SLOTS: void _q_updateState(QCamera::State); - void _q_error(QCamera::Error); + void _q_errorOccurred(QCamera::Error); void _q_availabilityChanged(QMultimedia::AvailabilityStatus); protected: |