From: Stéphane Cerveau Date: Thu, 29 Oct 2020 13:54:16 +0000 (+0100) Subject: navseek: add hold_eos property X-Git-Tag: 1.19.3~509^2~357 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d664f400aa0465d3f917bcef5e7d8ac37cdf41b9;p=platform%2Fupstream%2Fgstreamer.git navseek: add hold_eos property This property will tell the element to hold the EOS event and keep it until the next keystroke. Part-of: --- diff --git a/docs/gst_plugins_cache.json b/docs/gst_plugins_cache.json index 01dc8be..b8590d4 100644 --- a/docs/gst_plugins_cache.json +++ b/docs/gst_plugins_cache.json @@ -3947,6 +3947,18 @@ } }, "properties": { + "hold-eos": { + "blurb": "Hold eos until the next 'Return' keystroke", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, "seek-offset": { "blurb": "Time in seconds to seek by", "conditionally-available": false, diff --git a/gst/debugutils/gstnavseek.c b/gst/debugutils/gstnavseek.c index fd9386c..49e41a2 100644 --- a/gst/debugutils/gstnavseek.c +++ b/gst/debugutils/gstnavseek.c @@ -34,7 +34,8 @@ enum { PROP_0, - PROP_SEEKOFFSET + PROP_SEEKOFFSET, + PROP_HOLD_EOS, }; GstStaticPadTemplate navseek_src_template = GST_STATIC_PAD_TEMPLATE ("src", @@ -83,6 +84,17 @@ gst_navseek_class_init (GstNavSeekClass * klass) PROP_SEEKOFFSET, g_param_spec_double ("seek-offset", "Seek Offset", "Time in seconds to seek by", 0.0, G_MAXDOUBLE, 5.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * navseek:hold-eos: + * + * Hold eos until the next 'Return' keystroke. + * + * Since: 1.20 + */ + g_object_class_install_property (gobject_class, + PROP_HOLD_EOS, g_param_spec_boolean ("hold-eos", "Hold EOS", + "Hold eos until the next 'Return' keystroke", FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_add_static_pad_template (element_class, &navseek_sink_template); @@ -109,6 +121,8 @@ gst_navseek_init (GstNavSeek * navseek) navseek->seek_offset = 5.0; navseek->loop = FALSE; + navseek->hold_eos = FALSE; + navseek->eos = NULL; navseek->grab_seg_start = FALSE; navseek->grab_seg_end = FALSE; navseek->segment_start = GST_CLOCK_TIME_NONE; @@ -277,6 +291,12 @@ gst_navseek_src_event (GstBaseTransform * trans, GstEvent * event) gst_navseek_change_playback_rate (navseek, 1.0); } else if (strcmp (key, "space") == 0) { gst_navseek_toggle_play_pause (navseek); + } else if (strcmp (key, "Return") == 0) { + if (navseek->eos) { + gst_pad_push_event (GST_BASE_TRANSFORM (navseek)->srcpad, + navseek->eos); + navseek->eos = NULL; + } } } else { break; @@ -307,6 +327,11 @@ gst_navseek_set_property (GObject * object, guint prop_id, navseek->seek_offset = g_value_get_double (value); GST_OBJECT_UNLOCK (navseek); break; + case PROP_HOLD_EOS: + GST_OBJECT_LOCK (navseek); + navseek->hold_eos = g_value_get_boolean (value); + GST_OBJECT_UNLOCK (navseek); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -325,6 +350,11 @@ gst_navseek_get_property (GObject * object, guint prop_id, g_value_set_double (value, navseek->seek_offset); GST_OBJECT_UNLOCK (navseek); break; + case PROP_HOLD_EOS: + GST_OBJECT_LOCK (navseek); + g_value_set_boolean (value, navseek->hold_eos); + GST_OBJECT_UNLOCK (navseek); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -341,7 +371,11 @@ gst_navseek_sink_event (GstBaseTransform * trans, GstEvent * event) GST_OBJECT_LOCK (navseek); if (navseek->loop) gst_navseek_segseek (navseek); + if (navseek->hold_eos) + navseek->eos = event; GST_OBJECT_UNLOCK (navseek); + if (navseek->eos) + return TRUE; break; default: break; @@ -385,6 +419,11 @@ gst_navseek_start (GstBaseTransform * trans) static gboolean gst_navseek_stop (GstBaseTransform * trans) { - /* anything we should be doing here? */ + GstNavSeek *navseek = GST_NAVSEEK (trans); + + if (navseek->eos) { + gst_event_unref (navseek->eos); + navseek->eos = NULL; + } return TRUE; } diff --git a/gst/debugutils/gstnavseek.h b/gst/debugutils/gstnavseek.h index 1b9c924..6b596b2 100644 --- a/gst/debugutils/gstnavseek.h +++ b/gst/debugutils/gstnavseek.h @@ -45,6 +45,8 @@ struct _GstNavSeek gdouble seek_offset; gboolean loop; + gboolean hold_eos; + GstEvent* eos; gboolean grab_seg_start; gboolean grab_seg_end; GstClockTime segment_start;