From 6dc86b1f91db8d3d0fa3f64f6a430b35eabafab4 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Tue, 28 Nov 2023 15:47:38 -0300 Subject: [PATCH] basesrc: Expose automatic-eos as a property It is useful for appsrc for example and no good reason to not expose it as a property Part-of: --- girs/GstBase-1.0.gir | 4 ++++ .../gstreamer/libs/gst/base/gstbasesrc.c | 24 +++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/girs/GstBase-1.0.gir b/girs/GstBase-1.0.gir index 40782a18d6..4ed31b846a 100644 --- a/girs/GstBase-1.0.gir +++ b/girs/GstBase-1.0.gir @@ -6243,6 +6243,10 @@ continue. Any other return value should be returned from the create vmethod. + + See gst_base_src_set_automatic_eos() + + diff --git a/subprojects/gstreamer/libs/gst/base/gstbasesrc.c b/subprojects/gstreamer/libs/gst/base/gstbasesrc.c index 0b91b026f8..e8371870d6 100644 --- a/subprojects/gstreamer/libs/gst/base/gstbasesrc.c +++ b/subprojects/gstreamer/libs/gst/base/gstbasesrc.c @@ -189,6 +189,7 @@ enum #define DEFAULT_BLOCKSIZE 4096 #define DEFAULT_NUM_BUFFERS -1 #define DEFAULT_DO_TIMESTAMP FALSE +#define DEFAULT_AUTOMATIC_EOS TRUE enum { @@ -198,7 +199,8 @@ enum #ifndef GST_REMOVE_DEPRECATED PROP_TYPEFIND, #endif - PROP_DO_TIMESTAMP + PROP_DO_TIMESTAMP, + PROP_AUTOMATIC_EOS }; /* The basesrc implementation need to respect the following locking order: @@ -407,6 +409,18 @@ gst_base_src_class_init (GstBaseSrcClass * klass) "Apply current stream time to buffers", DEFAULT_DO_TIMESTAMP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstBaseSrc:automatic-eos: + * + * See gst_base_src_set_automatic_eos() + * + * Since: 1.24 + */ + g_object_class_install_property (gobject_class, PROP_AUTOMATIC_EOS, + g_param_spec_boolean ("automatic-eos", "Automatic EOS", + "Automatically EOS when the segment is done", DEFAULT_AUTOMATIC_EOS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_base_src_change_state); gstelement_class->send_event = GST_DEBUG_FUNCPTR (gst_base_src_send_event); @@ -445,7 +459,7 @@ gst_base_src_init (GstBaseSrc * basesrc, gpointer g_class) g_cond_init (&basesrc->live_cond); basesrc->num_buffers = DEFAULT_NUM_BUFFERS; basesrc->num_buffers_left = -1; - g_atomic_int_set (&basesrc->priv->automatic_eos, TRUE); + g_atomic_int_set (&basesrc->priv->automatic_eos, DEFAULT_AUTOMATIC_EOS); basesrc->can_activate_push = TRUE; @@ -2207,6 +2221,9 @@ gst_base_src_set_property (GObject * object, guint prop_id, case PROP_DO_TIMESTAMP: gst_base_src_set_do_timestamp (src, g_value_get_boolean (value)); break; + case PROP_AUTOMATIC_EOS: + gst_base_src_set_automatic_eos (src, g_value_get_boolean (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2236,6 +2253,9 @@ gst_base_src_get_property (GObject * object, guint prop_id, GValue * value, case PROP_DO_TIMESTAMP: g_value_set_boolean (value, gst_base_src_get_do_timestamp (src)); break; + case PROP_AUTOMATIC_EOS: + g_value_set_boolean (value, g_atomic_int_get (&src->priv->automatic_eos)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break;