|
|
|
|
|
|
|
Sponsored By


|
|
|
|
|
|

|
|
|
|
|
|
|
Efika 5200B Project
 |
Reggae on Efika
in category Multimedia proposed by Grzegorz Kraszewski on 21st February 2006 (accepted on 20th March 2006)
|
|
|
|
|
|
Blog Entry
|
|
|
|
|
|
|
MS ADPCM decoder optimized a bit
posted by Grzegorz Kraszewski on 12th April 2007
I've written an optimized mono and stereo decoders for MicroSoft ADPCM compression. I've also implemented some optimizations in multichannel routine, for example 'if'-less nibble sign extending (an idea from Bit Twiddling Hacks. Here are the benchmark results obtained with profiler:
Multichannel procedure: mono stream - 1.73 seconds, stereo stream - 3.35 seconds. Dedicated procedures: mono stream - 1.27 seconds, stereo stream 1.89 seconds.
And in megasamples per second:
Multichannel procedure: mono stream - 11.56 Ms/s, stereo stream - 11.94 Ms/s. Dedicated procedures: mono stream - 15.75 Ms/s, stereo stream - 21.16 Ms/s
All results are times of decompressing 20 000 000 sample frames (that is why stereo times are longer, 2 samples per frame) in 20 runs of 1 000 000 frames of typical dance music ;-) on Pegasos 2/G4 (1.0 GHz).
Now I have a wild idea of AltiVec acceleration of this. Linear prediction operations are hard to vectorize (because of difficulties with paralellizing feedback loops with integer arithmetic), but well, there are no cross-block dependencies, so why not decompressing 8 blocks at once? They are short anyway (up to 2 kB of compressed data), and AltiVec adds things like hardware-based saturation for free. The same principle may be applied to IMA-ADPCM. I guess I will extend my BlockDecoder class with such a possibility.
|
|
|
|
|
|