diff options
author | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2019-10-30 14:01:18 +0100 |
---|---|---|
committer | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2020-01-22 17:02:18 +0100 |
commit | 836bde2ba1a3fc5bdce51aad839e07fb7584af35 (patch) | |
tree | e2c86ecbefe5ce345d01c4189e7e993ce589f0f6 /tests | |
parent | f4e2f8f71660a914bbbe2495b922ae83c5c5ad67 (diff) |
Introduce MediaPlayer::videoOutput property
This property holds the target video output,
and allows to render video to multiple items.
MediaPlayer {
videoOutput: [videoOutput1, 1, "ignored", videoOutput2.videoSurface]
}
Incorrect inputs are ignored.
The property also accepts single either QAbstractVideoSurface or QDeclarativeVideoOutput objects.
Task-number: QTBUG-32939
Change-Id: I41fc557dcac60be6d70b3889036ff4ae75734cc0
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro | 2 | ||||
-rw-r--r-- | tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp | 49 |
2 files changed, 50 insertions, 1 deletions
diff --git a/tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro b/tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro index f59027bc2..6d8b3c215 100644 --- a/tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro +++ b/tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro @@ -1,7 +1,7 @@ CONFIG += testcase TARGET = tst_qdeclarativeaudio -QT += multimedia-private qml testlib +QT += multimedia-private qml testlib qtmultimediaquicktools-private HEADERS += \ ../../../../src/imports/multimedia/qdeclarativeaudio_p.h \ diff --git a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp index 87c72521c..ded188d72 100644 --- a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp +++ b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp @@ -40,7 +40,9 @@ #include <qmediaplayercontrol.h> #include <qmediaservice.h> #include <private/qmediaserviceprovider_p.h> +#include <private/qdeclarativevideooutput_p.h> #include <qmetadatareadercontrol.h> +#include <QAbstractVideoSurface> #include <QtGui/qguiapplication.h> #include <QtQml/qqmlengine.h> @@ -75,6 +77,7 @@ private slots: void loops(); void audioRole(); void customAudioRole(); + void videoOutput(); private: void enumerator(const QMetaObject *object, const char *name, QMetaEnum *result); @@ -1201,6 +1204,52 @@ int tst_QDeclarativeAudio::keyToValue(const QMetaEnum &enumeration, const char * return result; } +struct Surface : QAbstractVideoSurface +{ + Surface(QObject *parent = nullptr) : QAbstractVideoSurface(parent) { } + QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType) const override + { + return QList<QVideoFrame::PixelFormat>() << QVideoFrame::Format_RGB32; + } + + bool present(const QVideoFrame &) override { return true; } +}; + +void tst_QDeclarativeAudio::videoOutput() +{ + QtTestMediaPlayerControl playerControl; + QtTestMediaServiceProvider provider(&playerControl, 0); + + QDeclarativeAudio audio; + QSignalSpy spy(&audio, &QDeclarativeAudio::videoOutputChanged); + + audio.classBegin(); + audio.componentComplete(); + + QVERIFY(audio.videoOutput().isNull()); + + QVariant surface; + surface.setValue(new Surface(this)); + audio.setVideoOutput(surface); + QCOMPARE(audio.videoOutput(), surface); + QCOMPARE(spy.count(), 1); + + QQmlEngine engine; + QJSValue jsArray = engine.newArray(5); + jsArray.setProperty(0, engine.newQObject(new Surface(this))); + jsArray.setProperty(1, engine.newQObject(new Surface(this))); + QDeclarativeVideoOutput output; + jsArray.setProperty(2, engine.newQObject(&output)); + jsArray.setProperty(3, 123); + jsArray.setProperty(4, QLatin1String("ignore this")); + + QVariant surfaces; + surfaces.setValue(jsArray); + audio.setVideoOutput(surfaces); + QCOMPARE(audio.videoOutput(), surfaces); + QCOMPARE(spy.count(), 2); +} + QTEST_MAIN(tst_QDeclarativeAudio) #include "tst_qdeclarativeaudio.moc" |