summaryrefslogtreecommitdiffstats
path: root/src/imports/multimedia
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/multimedia')
-rw-r--r--src/imports/multimedia/Video.qml19
-rw-r--r--src/imports/multimedia/multimedia.cpp6
-rw-r--r--src/imports/multimedia/plugins.qmltypes36
-rw-r--r--src/imports/multimedia/qdeclarativeaudio.cpp59
-rw-r--r--src/imports/multimedia/qdeclarativeaudio_p.h6
-rw-r--r--src/imports/multimedia/qdeclarativecamera.cpp17
-rw-r--r--src/imports/multimedia/qdeclarativecamera_p.h5
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: