1
0
Fork 0
forked from len0rd/rockbox

Use codeclib's mdct in wmapro. Input coeffs to the transform needed to be scaled down first by (log2(frame_size) - 3). Increases decoding speed by 1.3MHz on PP5022 and saves ~32KB that were previously needed by the mdct tables. (FS#11511 by Buschel and myself)

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27701 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Mohamed Tarek 2010-08-04 22:29:50 +00:00
parent 83be40f7d3
commit 3bbbb96395
5 changed files with 27 additions and 12 deletions

View file

@ -20,6 +20,7 @@
*/
#include "wma.h"
#include "codeclib.h" /* needed for av_log2() */
/**
*@brief Get the samples per frame for this stream.
@ -109,14 +110,20 @@ int ff_wma_run_level_decode(GetBitContext* gb,
{
int32_t code, level, sign;
const unsigned int coef_mask = block_len - 1;
/* Rockbox: To be able to use rockbox' optimized mdct we need to pre-shift
* the values by >>(nbits-3). */
const int nbits = av_log2(block_len)+1;
const int shift = WMAPRO_FRACT-(nbits-3);
for (; offset < num_coefs; offset++) {
code = get_vlc2(gb, vlc->table, VLCBITS, VLCMAX);
if (code > 1) {
/** normal code */
offset += run_table[code];
sign = !get_bits1(gb);
ptr[offset & coef_mask] = sign ? -level_table[code] : level_table[code];
ptr[offset & coef_mask] <<= WMAPRO_FRACT;
/* Rockbox: To be able to use rockbox' optimized mdct we need
* invert the sign. */
ptr[offset & coef_mask] = sign ? level_table[code] : -level_table[code];
ptr[offset & coef_mask] <<= shift;
} else if (code == 1) {
/** EOB */
break;
@ -143,8 +150,8 @@ int ff_wma_run_level_decode(GetBitContext* gb,
}
}
sign = !get_bits1(gb);
ptr[offset & coef_mask] = sign ? -level : level;
ptr[offset & coef_mask] <<= WMAPRO_FRACT;
ptr[offset & coef_mask] = sign ? level : -level;
ptr[offset & coef_mask] <<= shift;
}
}
/** NOTE: EOB can be omitted */