diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-08-13 09:32:05 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-08-15 10:53:53 +0000 |
commit | 147cc5da71e72c66dcf25076c7063c404e3bce9e (patch) | |
tree | 9dbf1562a1579be115628bf5495e1f15d3e04878 | |
parent | fdb558e35633c184ff9410c859c0576d7ec0907d (diff) |
Add a couple of nullptr checks in the gstreamer media player
Fixes some crashes when no audio or video output is connected.
Change-Id: Ida697f0236c0bea18d73cc8f7416a9b9d8ffe44b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io>
(cherry picked from commit b8421eff454b6911959f0af9683a8afce5dbb523)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp | 13 | ||||
-rw-r--r-- | tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp | 13 |
2 files changed, 22 insertions, 4 deletions
diff --git a/src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp b/src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp index a9fe47f20..9f1d5a7c5 100644 --- a/src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp +++ b/src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp @@ -381,6 +381,8 @@ bool QGstreamerMediaPlayer::processSyncMessage(const QGstreamerMessage &message) if (strcmp(type, GST_GL_DISPLAY_CONTEXT_TYPE)) return false; #endif + if (!gstVideoOutput || !gstVideoOutput->gstreamerVideoSink()) + return false; auto *context = gstVideoOutput->gstreamerVideoSink()->gstGlDisplayContext(); if (!context) return false; @@ -493,10 +495,13 @@ void QGstreamerMediaPlayer::connectOutput(TrackType t) return; QGstElement e; - if (t == AudioStream) - e = gstAudioOutput->gstElement(); - else if (t == VideoStream) - e = gstVideoOutput->gstElement(); + if (t == AudioStream) { + if (gstAudioOutput) + e = gstAudioOutput->gstElement(); + } else if (t == VideoStream) { + if (gstVideoOutput) + e = gstVideoOutput->gstElement(); + } if (!e.isNull()) { qCDebug(qLcMediaPlayer) << "connecting output for track type" << t; playerPipeline.add(e); diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp index dcbaf5626..c3042dcb0 100644 --- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp +++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp @@ -80,6 +80,7 @@ private slots: void audioVideoAvailable(); void isSeekable(); void positionAfterSeek(); + void videoDimensions(); private: QUrl selectVideoFile(const QStringList& mediaCandidates); @@ -1146,6 +1147,18 @@ void tst_QMediaPlayerBackend::positionAfterSeek() QTRY_VERIFY(player.position() < 700); } +void tst_QMediaPlayerBackend::videoDimensions() +{ + TestVideoSink surface(true); + QMediaPlayer player; + player.setVideoOutput(&surface); + QVERIFY(!player.isSeekable()); + player.setSource(localVideoFile); + player.pause(); + QTRY_COMPARE(surface.m_totalFrames, 1); + QCOMPARE(surface.m_frameList.last().height(), 120); +} + QTEST_MAIN(tst_QMediaPlayerBackend) #include "tst_qmediaplayerbackend.moc" |