From 882a710c29506ce4a3dd2c799a36f5b5c3e5ca9a Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 30 Apr 2008 09:48:11 +0000 Subject: [PATCH] ext/speex/gstspeexdec.c: Produce concealment data when time progresses in a segment update. 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 | 6 ++++++ ext/speex/gstspeexdec.c | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6c0f2f3725..4ffe44f391 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-04-30 Wim Taymans + + * 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 * ext/speex/gstspeexdec.c: (speex_dec_chain_parse_data), diff --git a/ext/speex/gstspeexdec.c b/ext/speex/gstspeexdec.c index 01e9d2b3df..c0cba93060 100644 --- a/ext/speex/gstspeexdec.c +++ b/ext/speex/gstspeexdec.c @@ -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;