summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-08-13 09:32:05 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-08-15 10:53:53 +0000
commit147cc5da71e72c66dcf25076c7063c404e3bce9e (patch)
tree9dbf1562a1579be115628bf5495e1f15d3e04878
parentfdb558e35633c184ff9410c859c0576d7ec0907d (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.cpp13
-rw-r--r--tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp13
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"