From 2b09f7a0062914e9ac04defe7f317566c4943109 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Wed, 21 Dec 2022 02:31:05 +1100 Subject: [PATCH] qmlglsrc: Stop when basesrc calls unlock() Instead of stopping capture when the state changes, handle other cases of basesrc stopping capture by - such as handling an EOS event - by implementing an unlock() method Part-of: --- subprojects/gst-plugins-good/ext/qt/gstqtsrc.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/subprojects/gst-plugins-good/ext/qt/gstqtsrc.cc b/subprojects/gst-plugins-good/ext/qt/gstqtsrc.cc index 615a42ba8c..a405172925 100644 --- a/subprojects/gst-plugins-good/ext/qt/gstqtsrc.cc +++ b/subprojects/gst-plugins-good/ext/qt/gstqtsrc.cc @@ -54,6 +54,7 @@ static GstStateChangeReturn gst_qt_src_change_state (GstElement * element, GstStateChange transition); static gboolean gst_qt_src_start (GstBaseSrc * basesrc); static gboolean gst_qt_src_stop (GstBaseSrc * basesrc); +static gboolean gst_qt_src_unlock(GstBaseSrc *basesrc); static GstStaticPadTemplate gst_qt_src_template = GST_STATIC_PAD_TEMPLATE ("src", @@ -123,6 +124,7 @@ gst_qt_src_class_init (GstQtSrcClass * klass) gstbasesrc_class->query = gst_qt_src_query; gstbasesrc_class->start = gst_qt_src_start; gstbasesrc_class->stop = gst_qt_src_stop; + gstbasesrc_class->unlock = gst_qt_src_unlock; gstbasesrc_class->decide_allocation = gst_qt_src_decide_allocation; gstpushsrc_class->fill = gst_qt_src_fill; @@ -513,8 +515,6 @@ gst_qt_src_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: - if (qt_src->window) - qt_window_stop (qt_src->window); break; case GST_STATE_CHANGE_PAUSED_TO_READY: break; @@ -554,6 +554,15 @@ gst_qt_src_start (GstBaseSrc * basesrc) return TRUE; } +static gboolean +gst_qt_src_unlock(GstBaseSrc *basesrc) +{ + GstQtSrc *qt_src = GST_QT_SRC (basesrc); + if (qt_src->window) + qt_window_stop (qt_src->window); + return TRUE; +} + static gboolean gst_qt_src_stop (GstBaseSrc * basesrc) {