diff --git a/src/VideoReceiver/GstVideoReceiver.cc b/src/VideoReceiver/GstVideoReceiver.cc index 3d496ea..620706c 100644 --- a/src/VideoReceiver/GstVideoReceiver.cc +++ b/src/VideoReceiver/GstVideoReceiver.cc @@ -63,6 +63,7 @@ GstVideoReceiver::GstVideoReceiver(QObject* parent) GstVideoReceiver::~GstVideoReceiver(void) { + stop(); _slotHandler.shutdown(); } @@ -122,7 +123,7 @@ GstVideoReceiver::start(const QString& uri, unsigned timeout, int buffer) _lastSourceFrameTime = 0; - gst_pad_add_probe(pad, GST_PAD_PROBE_TYPE_BUFFER, _teeProbe, this, nullptr); + _teeProbeId = gst_pad_add_probe(pad, GST_PAD_PROBE_TYPE_BUFFER, _teeProbe, this, nullptr); gst_object_unref(pad); pad = nullptr; @@ -287,6 +288,15 @@ GstVideoReceiver::stop(void) qCDebug(VideoReceiverLog) << "Stopping" << _uri; + if (_teeProbeId != 0) { + GstPad* sinkpad; + if ((sinkpad = gst_element_get_static_pad(_tee, "sink")) != nullptr) { + gst_pad_remove_probe(sinkpad, _teeProbeId); + sinkpad = nullptr; + } + _teeProbeId = 0; + } + if (_pipeline != nullptr) { GstBus* bus; diff --git a/src/VideoReceiver/GstVideoReceiver.h b/src/VideoReceiver/GstVideoReceiver.h index db63de8..44aa4f1 100644 --- a/src/VideoReceiver/GstVideoReceiver.h +++ b/src/VideoReceiver/GstVideoReceiver.h @@ -148,7 +148,9 @@ protected: qint64 _lastSourceFrameTime; qint64 _lastVideoFrameTime; bool _resetVideoSink; - gulong _videoSinkProbeId; + gulong _videoSinkProbeId = 0; + + gulong _teeProbeId = 0; QTimer _watchdogTimer;