ext/speex/gstspeexdec.c: Produce concealment data when time progresses in a segment...
authorWim Taymans <wim.taymans@gmail.com>
Wed, 30 Apr 2008 09:48:11 +0000 (09:48 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Wed, 30 Apr 2008 09:48:11 +0000 (09:48 +0000)
Original commit message from CVS:
* ext/speex/gstspeexdec.c: (speex_dec_sink_event),
(speex_dec_chain_parse_data):
Produce concealment data when time progresses in a segment update.

ChangeLog
ext/speex/gstspeexdec.c

index 6c0f2f3..4ffe44f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-30  Wim Taymans  <wim.taymans@collabora.co.uk>
+
+       * ext/speex/gstspeexdec.c: (speex_dec_sink_event),
+       (speex_dec_chain_parse_data):
+       Produce concealment data when time progresses in a segment update.
+
 2008-04-29  Wim Taymans  <wim.taymans@collabora.co.uk>
 
        * ext/speex/gstspeexdec.c: (speex_dec_chain_parse_data),
index 01e9d2b..c0cba93 100644 (file)
@@ -460,6 +460,18 @@ speex_dec_sink_event (GstPad * pad, GstEvent * event)
       if (rate <= 0.0)
         goto newseg_wrong_rate;
 
+      if (update) {
+        /* time progressed without data, see if we can fill the gap with
+         * some concealment data */
+        if (dec->segment.last_stop < start) {
+          GstClockTime duration;
+
+          duration = dec->segment.last_stop - start;
+          speex_dec_chain_parse_data (dec, NULL, dec->segment.last_stop,
+              duration);
+        }
+      }
+
       /* now configure the values */
       gst_segment_set_newsegment_full (&dec->segment, update,
           rate, arate, GST_FORMAT_TIME, start, stop, time);
@@ -654,6 +666,7 @@ speex_dec_chain_parse_data (GstSpeexDec * dec, GstBuffer * buf,
 
     /* copy timestamp */
   } else {
+    /* concealment data, pass NULL as the bits parameters */
     GST_DEBUG_OBJECT (dec, "creating concealment data");
     fpp = dec->header->frames_per_packet;
     bits = NULL;