Author: titmuss
Date: Thu Oct 30 03:58:01 2008
New Revision: 3235
URL: http://svn.slimdevices.com?rev=3235&root=Jive&view=rev
Log:
Bug: N/A
Description:
Porting fix for mp3 gapless playback from ip3k firmware r4502.
Modified:
7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
Modified: 7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c?rev=3235&root=Jive&r1=3234&r2=3235&view=diff
==============================================================================
--- 7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
(original)
+++ 7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c Thu Oct
30 03:58:01 2008
@@ -56,6 +56,13 @@
#define XING_TOC 0x04
#define XING_SCALE 0x08
+/* Not much documentation exists about the MAD decoder delay, but
+ we apparently need to skip the first 529 samples
+ http://www.hydrogenaudio.org/forums/lofiversion/index.php/t20083.html
+*/
+#define MAD_DECODER_DELAY 529
+
+
static void xing_parse(struct decode_mad *self) {
struct mad_bitptr ptr = self->stream.anc_ptr;
unsigned int bitlen = self->stream.anc_bitlen;
@@ -129,11 +136,19 @@
mad_bit_skip(&ptr, 96);
- self->encoder_delay = mad_bit_read(&ptr, 12);
+ self->encoder_delay += mad_bit_read(&ptr, 12);
self->encoder_padding = mad_bit_read(&ptr, 12);
- DEBUG_TRACE("encoder delay %d", self->encoder_delay);
+ DEBUG_TRACE("encoder delay %d", self->encoder_delay -
MAD_DECODER_DELAY);
DEBUG_TRACE("encoder padding %d", self->encoder_padding);
+
+ /* Remove MAD decoder delay of 529 samples from the end too */
+ if (self->encoder_padding > MAD_DECODER_DELAY) {
+ self->encoder_padding -= MAD_DECODER_DELAY;
+ }
+ else {
+ self->encoder_padding = 0;
+ }
}
@@ -303,7 +318,7 @@
DEBUG_TRACE("Skip encoder_delay=%d pcm->length=%d
offset=%d", self->encoder_delay, pcm->length, offset);
}
- decode_output_samples(self->output_buffer + (offset *
sizeof(sample_t)),
+ decode_output_samples(self->output_buffer + (offset * 2 *
sizeof(sample_t)),
pcm->length - offset,
self->sample_rate,
FALSE);
@@ -382,6 +397,7 @@
/* Assume we aren't changing sample rates until proven wrong */
self->sample_rate = decode_output_samplerate();
+ self->encoder_delay = MAD_DECODER_DELAY;
/* Don't check for CRC errors (bug #2527) */
// XXXX this needs a patch to libmad
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins