Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/GStreamer/gst-plugins-good.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2007-06-09 19:33:32 +0400
committerSebastian Dröge <slomo@circular-chaos.org>2007-06-09 19:33:32 +0400
commite05417a077e8d85cafe68bd215c6b0fd133b0022 (patch)
treefde3254974bdbbc506b527a78e7a474c115f00d5
parent06d12027fa3ea6540724a958b7557adb65137744 (diff)
ext/wavpack/: Improve discont handling by checking if the next Wavpack block has the expected, following block index.
Original commit message from CVS: * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_reset), (gst_wavpack_dec_chain): * ext/wavpack/gstwavpackdec.h: * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_reset), (gst_wavpack_parse_push_buffer): * ext/wavpack/gstwavpackparse.h: Improve discont handling by checking if the next Wavpack block has the expected, following block index.
-rw-r--r--ChangeLog11
-rw-r--r--ext/wavpack/gstwavpackdec.c5
-rw-r--r--ext/wavpack/gstwavpackdec.h1
-rw-r--r--ext/wavpack/gstwavpackparse.c5
-rw-r--r--ext/wavpack/gstwavpackparse.h1
5 files changed, 21 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 0865a85df..9b11b2bf2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2007-06-09 Sebastian Dröge <slomo@circular-chaos.org>
+
+ * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_reset),
+ (gst_wavpack_dec_chain):
+ * ext/wavpack/gstwavpackdec.h:
+ * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_reset),
+ (gst_wavpack_parse_push_buffer):
+ * ext/wavpack/gstwavpackparse.h:
+ Improve discont handling by checking if the next Wavpack block has
+ the expected, following block index.
+
2007-06-08 Thomas Vander Stichele <thomas at apestaart dot org>
* gst/rtp/gstrtpmp4vpay.c (gst_rtp_mp4vpay_details):
diff --git a/ext/wavpack/gstwavpackdec.c b/ext/wavpack/gstwavpackdec.c
index 5adaf1be4..437ba0d00 100644
--- a/ext/wavpack/gstwavpackdec.c
+++ b/ext/wavpack/gstwavpackdec.c
@@ -130,6 +130,7 @@ gst_wavpack_dec_reset (GstWavpackDec * dec)
dec->depth = 0;
gst_segment_init (&dec->segment, GST_FORMAT_UNDEFINED);
+ dec->next_block_index = 0;
}
static void
@@ -362,9 +363,11 @@ gst_wavpack_dec_chain (GstPad * pad, GstBuffer * buf)
/* If we got a DISCONT buffer forward the flag. Nothing else
* has to be done as libwavpack doesn't store state between
* Wavpack blocks */
- if (GST_BUFFER_IS_DISCONT (buf))
+ if (GST_BUFFER_IS_DISCONT (buf) || dec->next_block_index != wph.block_index)
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ dec->next_block_index = wph.block_index + wph.block_samples;
+
/* decode */
decoded = WavpackUnpackSamples (dec->context,
(int32_t *) GST_BUFFER_DATA (outbuf), wph.block_samples);
diff --git a/ext/wavpack/gstwavpackdec.h b/ext/wavpack/gstwavpackdec.h
index 68380ca5d..007e7c22e 100644
--- a/ext/wavpack/gstwavpackdec.h
+++ b/ext/wavpack/gstwavpackdec.h
@@ -57,6 +57,7 @@ struct _GstWavpackDec
read_id wv_id;
GstSegment segment; /* used for clipping, TIME format */
+ guint32 next_block_index;
gint sample_rate;
gint depth;
diff --git a/ext/wavpack/gstwavpackparse.c b/ext/wavpack/gstwavpackparse.c
index 61c94f1e3..0c77d555b 100644
--- a/ext/wavpack/gstwavpackparse.c
+++ b/ext/wavpack/gstwavpackparse.c
@@ -218,6 +218,7 @@ gst_wavpack_parse_reset (GstWavpackParse * parse)
parse->channels = 0;
gst_segment_init (&parse->segment, GST_FORMAT_UNDEFINED);
+ parse->next_block_index = 0;
parse->current_offset = 0;
parse->need_newsegment = TRUE;
@@ -890,11 +891,13 @@ gst_wavpack_parse_push_buffer (GstWavpackParse * wvparse, GstBuffer * buf,
GST_BUFFER_OFFSET (buf) = header->block_index;
GST_BUFFER_OFFSET_END (buf) = header->block_index + header->block_samples;
- if (wvparse->discont) {
+ if (wvparse->discont || wvparse->next_block_index != header->block_index) {
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
wvparse->discont = FALSE;
}
+ wvparse->next_block_index = header->block_index + header->block_samples;
+
gst_buffer_set_caps (buf, GST_PAD_CAPS (wvparse->srcpad));
GST_LOG_OBJECT (wvparse, "Pushing buffer with time %" GST_TIME_FORMAT,
diff --git a/ext/wavpack/gstwavpackparse.h b/ext/wavpack/gstwavpackparse.h
index c1d6feea5..0b089d9f4 100644
--- a/ext/wavpack/gstwavpackparse.h
+++ b/ext/wavpack/gstwavpackparse.h
@@ -67,6 +67,7 @@ struct _GstWavpackParse
GstSegment segment; /* the currently configured segment, in
* samples/audio frames (DEFAULT format) */
+ guint32 next_block_index;
GstAdapter *adapter; /* when operating chain-based, otherwise NULL */