diff options
6 files changed, 110 insertions, 8 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgst.cpp b/src/plugins/multimedia/gstreamer/common/qgst.cpp index ebcc278d7..8a77533a6 100644 --- a/src/plugins/multimedia/gstreamer/common/qgst.cpp +++ b/src/plugins/multimedia/gstreamer/common/qgst.cpp @@ -1057,6 +1057,14 @@ void QGstBin::dumpGraph(const char *fileNamePrefix) fileNamePrefix); } +QGstElement QGstBin::findByName(const char *name) +{ + return QGstElement{ + gst_bin_get_by_name(bin(), name), + QGstElement::NeedsRef, + }; +} + // QGstBaseSink QGstBaseSink::QGstBaseSink(GstBaseSink *element, RefMode mode) diff --git a/src/plugins/multimedia/gstreamer/common/qgst_p.h b/src/plugins/multimedia/gstreamer/common/qgst_p.h index d569a743d..394ee1777 100644 --- a/src/plugins/multimedia/gstreamer/common/qgst_p.h +++ b/src/plugins/multimedia/gstreamer/common/qgst_p.h @@ -15,21 +15,20 @@ // We mean it. // -#include <common/qgst_handle_types_p.h> - -#include <private/qtmultimediaglobal_p.h> -#include <private/qmultimediautils_p.h> - #include <QtCore/qdebug.h> #include <QtCore/qlist.h> #include <QtCore/qsemaphore.h> #include <QtMultimedia/qaudioformat.h> #include <QtMultimedia/qvideoframe.h> +#include <QtMultimedia/private/qtmultimediaglobal_p.h> +#include <QtMultimedia/private/qmultimediautils_p.h> #include <gst/gst.h> #include <gst/video/video-info.h> +#include "qgst_handle_types_p.h" + #include <type_traits> #if QT_CONFIG(gstreamer_photography) @@ -680,6 +679,8 @@ public: bool syncChildrenState(); void dumpGraph(const char *fileNamePrefix); + + QGstElement findByName(const char *); }; class QGstBaseSink : public QGstElement diff --git a/src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h b/src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h index eb5c7811d..6914993de 100644 --- a/src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h +++ b/src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h @@ -15,10 +15,10 @@ // We mean it. // -#include <private/qtmultimediaglobal_p.h> -#include <QObject> +#include <QtMultimedia/private/qtmultimediaglobal_p.h> +#include <QtCore/qobject.h> -#include <common/qgst_p.h> +#include "qgst_p.h" QT_BEGIN_NAMESPACE diff --git a/tests/auto/unit/multimedia/CMakeLists.txt b/tests/auto/unit/multimedia/CMakeLists.txt index 2af3e0d84..20b86c251 100644 --- a/tests/auto/unit/multimedia/CMakeLists.txt +++ b/tests/auto/unit/multimedia/CMakeLists.txt @@ -33,4 +33,5 @@ add_subdirectory(qwavedecoder) if(QT_FEATURE_gstreamer) add_subdirectory(gstreamer_backend) + add_subdirectory(qmediaplayer_gstreamer) endif() diff --git a/tests/auto/unit/multimedia/qmediaplayer_gstreamer/CMakeLists.txt b/tests/auto/unit/multimedia/qmediaplayer_gstreamer/CMakeLists.txt new file mode 100644 index 000000000..2437df00c --- /dev/null +++ b/tests/auto/unit/multimedia/qmediaplayer_gstreamer/CMakeLists.txt @@ -0,0 +1,14 @@ +# Copyright (C) 2024 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qmediaplayer_gstreamer Test: +##################################################################### + +qt_internal_add_test(tst_qmediaplayer_gstreamer + SOURCES + tst_qmediaplayer_gstreamer.cpp + LIBRARIES + Qt::MultimediaPrivate + Qt::QGstreamerMediaPluginPrivate +) diff --git a/tests/auto/unit/multimedia/qmediaplayer_gstreamer/tst_qmediaplayer_gstreamer.cpp b/tests/auto/unit/multimedia/qmediaplayer_gstreamer/tst_qmediaplayer_gstreamer.cpp new file mode 100644 index 000000000..8b0f3f073 --- /dev/null +++ b/tests/auto/unit/multimedia/qmediaplayer_gstreamer/tst_qmediaplayer_gstreamer.cpp @@ -0,0 +1,78 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include <QtTest/QtTest> +#include <QtMultimedia/qmediaplayer.h> +#include <QtMultimedia/private/qmediaplayer_p.h> +#include <QtQGstreamerMediaPlugin/private/qgstpipeline_p.h> + +#include <memory> + +QT_USE_NAMESPACE + +class tst_QMediaPlayerGStreamer : public QObject +{ + Q_OBJECT + +public: + tst_QMediaPlayerGStreamer(); + +public slots: + void init(); + void cleanup(); + +private slots: + void constructor_preparesGstPipeline(); + +private: + std::unique_ptr<QMediaPlayer> player; + + GstPipeline *getGstPipeline() + { + return reinterpret_cast<GstPipeline *>(QPlatformMediaPlayer::nativePipeline(player.get())); + } + + void dumpGraph(const char *fileNamePrefix) + { + GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(getGstPipeline()), + GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_VERBOSE), + fileNamePrefix); + } +}; + +tst_QMediaPlayerGStreamer::tst_QMediaPlayerGStreamer() +{ + qputenv("QT_MEDIA_BACKEND", "gstreamer"); +} + +void tst_QMediaPlayerGStreamer::init() +{ + player = std::make_unique<QMediaPlayer>(); +} + +void tst_QMediaPlayerGStreamer::cleanup() +{ + player.reset(); +} + +void tst_QMediaPlayerGStreamer::constructor_preparesGstPipeline() +{ + auto *rawPipeline = getGstPipeline(); + QVERIFY(rawPipeline); + + QGstPipeline pipeline{ + rawPipeline, + QGstPipeline::NeedsRef, + }; + QVERIFY(pipeline); + + QVERIFY(pipeline.findByName("videoInputSelector")); + QVERIFY(pipeline.findByName("audioInputSelector")); + QVERIFY(pipeline.findByName("subTitleInputSelector")); + + dumpGraph("constructor_preparesGstPipeline"); +} + +QTEST_GUILESS_MAIN(tst_QMediaPlayerGStreamer) + +#include "tst_qmediaplayer_gstreamer.moc" |