diff options
author | Thom Johansen <thomj@rockbox.org> | 2006-03-22 21:52:48 +0000 |
---|---|---|
committer | Thom Johansen <thomj@rockbox.org> | 2006-03-22 21:52:48 +0000 |
commit | 09ed0d6f2634da8be0d22fd72fa40b1523c78a69 (patch) | |
tree | 9bb192e488bab548770422d4f3b3fb52914ee373 /apps/codecs | |
parent | ec70f29f1e2fb6e884429a28b6be5b2489c7a66a (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.c | 15 |
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 */ |