subparse: send right segment event 77/191677/2
authorEunhae Choi <eunhae1.choi@samsung.com>
Mon, 22 Oct 2018 06:49:32 +0000 (15:49 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Mon, 22 Oct 2018 07:01:33 +0000 (16:01 +0900)
- 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
gst/subparse/gstsubparse.h

index 4acf0cf..dc89962 100644 (file)
@@ -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:
index 5da8635..78bf5fe 100644 (file)
@@ -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 {