summaryrefslogtreecommitdiff
path: root/apps/codecs
diff options
context:
space:
mode:
authorThom Johansen <thomj@rockbox.org>2006-03-22 21:52:48 +0000
committerThom Johansen <thomj@rockbox.org>2006-03-22 21:52:48 +0000
commit09ed0d6f2634da8be0d22fd72fa40b1523c78a69 (patch)
tree9bb192e488bab548770422d4f3b3fb52914ee373 /apps/codecs
parentec70f29f1e2fb6e884429a28b6be5b2489c7a66a (diff)
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
Diffstat (limited to 'apps/codecs')
-rw-r--r--apps/codecs/wav.c15
1 files 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 */