From 09ed0d6f2634da8be0d22fd72fa40b1523c78a69 Mon Sep 17 00:00:00 2001 From: Thom Johansen Date: Wed, 22 Mar 2006 21:52:48 +0000 Subject: Fixed ADPCM support. 3 bit ADPCMs do not work, but those didn't seem to work before either. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9197 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/wav.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/codecs/wav.c b/apps/codecs/wav.c index 32cff6a758..2bde1c29a5 100644 --- a/apps/codecs/wav.c +++ b/apps/codecs/wav.c @@ -423,10 +423,10 @@ next_track: chunksize = (1 + avgbytespersec / (50*blockalign))*blockalign; /* check that the output buffer is big enough (convert to samplespersec, then round to the blockalign multiple below) */ - if (((uint64_t)chunksize*ci->id3->frequency*channels*sizeof(long)) + if (((uint64_t)chunksize*ci->id3->frequency*channels*2) /(uint64_t)avgbytespersec >= WAV_CHUNK_SIZE) { chunksize = ((uint64_t)WAV_CHUNK_SIZE*avgbytespersec - /((uint64_t)ci->id3->frequency*channels*sizeof(long) + /((uint64_t)ci->id3->frequency*channels*2 *blockalign))*blockalign; } @@ -500,14 +500,15 @@ next_track: for (i = 0; i < nblocks; i++) { size_t decodedsize = samplesperblock*channels; - if (decode_dvi_adpcm(ci, ((uint8_t *)wavbuf) + i*blockalign, + if (decode_dvi_adpcm(ci, wavbuf + i*blockalign, blockalign, channels, bitspersample, samples + i*samplesperblock*channels, - &decodedsize) != CODEC_OK) + &decodedsize) != CODEC_OK) { i = CODEC_ERROR; - goto exit; + goto exit; + } } - bufsize = nblocks*samplesperblock*channels*2; + bufsize = nblocks*samplesperblock*channels*4; } else { DEBUGF("CODEC_ERROR: unsupported format %x\n", formattag); i = CODEC_ERROR; @@ -561,7 +562,7 @@ decode_dvi_adpcm(struct codec_api *ci, for (c = 0; c < channels && n >= 4; c++) { /* decode + push first sample */ sample[c] = (short)(buf[0]|(buf[1]<<8));/* need cast for sign-extend */ - pcmout[c] = sample[c]; + pcmout[c] = sample[c] << 13; nsamples++; stepindex[c] = buf[2]; /* check for step table index overflow */ -- cgit v1.2.3