summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-04-12 14:41:49 +0200
committerLars Knoll <lars.knoll@qt.io>2021-04-16 10:50:20 +0000
commit1306531589d45a96a39db6e37706c30bf38934db (patch)
tree2d67305dc967c12351efc2146535d8e62830f08e /src
parent5a15455133dd760146e90125b6ec2d070a1cf846 (diff)
Better error handling for gstreamer
Handle a couple of error cases without crashing. Change-Id: Id4e2e1197bc7daa0351130117ed07e7a9c6fb9fa Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/multimedia/platform/gstreamer/common/qgst_p.h2
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp5
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreamervideooverlay.cpp4
-rw-r--r--src/multimediawidgets/qvideowidget.cpp1
4 files changed, 9 insertions, 3 deletions
diff --git a/src/multimedia/platform/gstreamer/common/qgst_p.h b/src/multimedia/platform/gstreamer/common/qgst_p.h
index 906f0089e..6ee9a5f02 100644
--- a/src/multimedia/platform/gstreamer/common/qgst_p.h
+++ b/src/multimedia/platform/gstreamer/common/qgst_p.h
@@ -320,7 +320,7 @@ public:
void connect(const char *name, GCallback callback, gpointer userData) { g_signal_connect(m_object, name, callback, userData); }
GstObject *object() const { return m_object; }
- const char *name() const { return GST_OBJECT_NAME(m_object); }
+ const char *name() const { return m_object ? GST_OBJECT_NAME(m_object) : "(null)"; }
};
class QGstElement;
diff --git a/src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp b/src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp
index 5f5464505..0b914abbf 100644
--- a/src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp
+++ b/src/multimedia/platform/gstreamer/common/qgstreamermediaplayer.cpp
@@ -663,6 +663,8 @@ static QGstStructure endOfChain(const QGstStructure &s)
void QGstreamerMediaPlayer::parseStreamsAndMetadata()
{
qCDebug(qLcMediaPlayer) << "============== parse topology ============";
+ if (topology.isNull())
+ return;
auto caps = topology["caps"].toCaps();
auto structure = caps.at(0);
auto fileFormat = QGstreamerFormatInfo::fileFormatForCaps(structure);
@@ -709,7 +711,8 @@ void QGstreamerMediaPlayer::parseStreamsAndMetadata()
}
QGstPad sinkPad = inputSelector[VideoStream].getObject("active-pad");
- Q_ASSERT(!sinkPad.isNull());
+ if (sinkPad.isNull())
+ return;
bool hasTags = g_object_class_find_property (G_OBJECT_GET_CLASS (sinkPad.object()), "tags") != NULL;
GstTagList *tl = nullptr;
diff --git a/src/multimedia/platform/gstreamer/common/qgstreamervideooverlay.cpp b/src/multimedia/platform/gstreamer/common/qgstreamervideooverlay.cpp
index 7c017a108..e62b3a3da 100644
--- a/src/multimedia/platform/gstreamer/common/qgstreamervideooverlay.cpp
+++ b/src/multimedia/platform/gstreamer/common/qgstreamervideooverlay.cpp
@@ -277,6 +277,10 @@ static QGstElement findBestVideoSink()
}
gst_plugin_feature_list_free(list);
+ if (choice.isNull()) {
+ qWarning() << "Could not find a valid video sink";
+ choice = QGstElement("fakesink", "fakesink");
+ }
return choice;
}
diff --git a/src/multimediawidgets/qvideowidget.cpp b/src/multimediawidgets/qvideowidget.cpp
index 898226674..4e597a5af 100644
--- a/src/multimediawidgets/qvideowidget.cpp
+++ b/src/multimediawidgets/qvideowidget.cpp
@@ -108,7 +108,6 @@ QVideoWidget::QVideoWidget(QWidget *parent)
{
d_ptr->q_ptr = this;
d_ptr->videoSink = new QVideoSink(this);
- d_ptr->videoSink->setGraphicsType(QVideoSink::NativeWindow);
d_ptr->videoSink->setTargetRect(rect());
d_ptr->videoSink->setNativeWindowId(winId());