gst/subparse/gstsubparse.c: Fix detection of discontinuities based on the buffer...
authorTim-Philipp Müller <tim@centricular.net>
Sat, 3 May 2008 15:39:04 +0000 (15:39 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Sat, 3 May 2008 15:39:04 +0000 (15:39 +0000)
Original commit message from CVS:
* gst/subparse/gstsubparse.c: (feed_textbuf):
Fix detection of discontinuities based on the buffer offset (doesn't work
so well if no buffer offset is set) and also check for the DISCONT buffer
flag. This keeps the parser state from being reset after each buffer in
the unit test.

ChangeLog
gst/subparse/gstsubparse.c

index 82fdb21..f32f5a2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2008-05-03  Tim-Philipp Müller  <tim.muller at collabora co uk>
 
+       * gst/subparse/gstsubparse.c: (feed_textbuf):
+         Fix detection of discontinuities based on the buffer offset (doesn't work
+         so well if no buffer offset is set) and also check for the DISCONT buffer
+         flag. This keeps the parser state from being reset after each buffer in
+         the unit test.
+
+2008-05-03  Tim-Philipp Müller  <tim.muller at collabora co uk>
+
        * gst/typefind/gsttypefindfunctions.c: (mpeg_video_stream_type_find):
          Further fine-tuning: don't absolutely require sequence or GOP headers
          (as introduced in the previous commit), but adjust the typefind
index 064ab0f..5379e8c 100644 (file)
@@ -1010,11 +1010,25 @@ gst_sub_parse_format_autodetect (GstSubParse * self)
 static void
 feed_textbuf (GstSubParse * self, GstBuffer * buf)
 {
-  if (GST_BUFFER_OFFSET (buf) != self->offset) {
+  gboolean discont;
+
+  discont = GST_BUFFER_IS_DISCONT (buf);
+
+  if (GST_BUFFER_OFFSET_IS_VALID (buf) &&
+      GST_BUFFER_OFFSET (buf) != self->offset) {
+    self->offset = GST_BUFFER_OFFSET (buf);
+    discont = TRUE;
+  }
+
+  if (discont) {
+    GST_INFO ("discontinuity");
     /* flush the parser state */
     parser_state_init (&self->state);
     g_string_truncate (self->textbuf, 0);
     sami_context_reset (&self->state);
+    /* we could set a flag to make sure that the next buffer we push out also
+     * has the DISCONT flag set, but there's no point really given that it's
+     * subtitles which are discontinuous by nature. */
   }
 
   self->textbuf = g_string_append_len (self->textbuf,