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:
parent
83be40f7d3
commit
3bbbb96395
5 changed files with 27 additions and 12 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue