From cc741d036ff84451132025cdc9c3e8c3920be7b4 Mon Sep 17 00:00:00 2001 From: Eunhae Choi Date: Mon, 22 Oct 2018 15:49:32 +0900 Subject: [PATCH] subparse: send right segment event - before pushing segment event in handle_buffer funct, segment time info need to be updated with the latest one. - need to sync [src:seek event handling] and [sink:segment event handling] to send right segment event to the downstream. - this patch includes below commit of GStreamer upstream. commit: dac113a867b3803211edea217d41c155583c4cb3 Change-Id: Iff67fb45b7cfacdd208e61cc41ea0794386d3ecb --- gst/subparse/gstsubparse.c | 23 ++++++++++++++++++++++- gst/subparse/gstsubparse.h | 3 +++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c index 4acf0cf..dc89962 100644 --- a/gst/subparse/gstsubparse.c +++ b/gst/subparse/gstsubparse.c @@ -131,6 +131,8 @@ gst_sub_parse_dispose (GObject * object) g_free (subparse->state.current_language); subparse->state.current_language = NULL; } + + g_mutex_clear (&subparse->seek_lock); #endif GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object)); } @@ -211,6 +213,8 @@ gst_sub_parse_init (GstSubParse * subparse) subparse->state.language_list = NULL; subparse->state.current_language = NULL; subparse->state.langlist_msg_posted = FALSE; + + g_mutex_init (&subparse->seek_lock); #endif } @@ -294,6 +298,9 @@ gst_sub_parse_src_event (GstPad * pad, GstObject * parent, GstEvent * event) goto beach; } +#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION + g_mutex_lock (&self->seek_lock); +#endif /* Convert that seek to a seeking in bytes at position 0, FIXME: could use an index */ ret = gst_pad_push_event (self->sinkpad, @@ -308,11 +315,14 @@ gst_sub_parse_src_event (GstPad * pad, GstObject * parent, GstEvent * event) GST_DEBUG_OBJECT (self, "segment after seek: %" GST_SEGMENT_FORMAT, &self->segment); - self->need_segment = TRUE; } else { GST_WARNING_OBJECT (self, "seek to 0 bytes failed"); } +#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION + g_mutex_unlock (&self->seek_lock); +#endif + gst_event_unref (event); break; } @@ -1939,6 +1949,17 @@ gst_sub_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) * it received via its video pads instead, so all is fine then too) */ ret = TRUE; gst_event_unref (event); + /* in either case, let's not simply discard this event; + * trigger sending of the saved requested seek segment + * or the one taken here from upstream */ +#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION + g_mutex_lock (&self->seek_lock); + self->need_segment = TRUE; /* upstream */ + g_mutex_unlock (&self->seek_lock); +#else + self->need_segment = TRUE; /* upstream */ +#endif + break; } case GST_EVENT_FLUSH_START: diff --git a/gst/subparse/gstsubparse.h b/gst/subparse/gstsubparse.h index 5da8635..78bf5fe 100644 --- a/gst/subparse/gstsubparse.h +++ b/gst/subparse/gstsubparse.h @@ -120,6 +120,9 @@ struct _GstSubParse { /* used by frame based parsers */ gint fps_n, fps_d; +#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION + GMutex seek_lock; +#endif }; struct _GstSubParseClass { -- 2.7.4