1
0
Fork 0
forked from len0rd/rockbox

Remove some unneeded floating point usage, port some needed floating point code to fixed point.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15547 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thom Johansen 2007-11-09 01:11:34 +00:00
parent c586739763
commit e43c1ac338
3 changed files with 17 additions and 9 deletions

View file

@ -68,6 +68,7 @@ typedef spx_word32_t spx_sig_t;
#define LPC_SHIFT 13
#define LSP_SHIFT 13
#define SIG_SHIFT 14
#define GAIN_SHIFT 6
#define VERY_SMALL 0
#define VERY_LARGE32 ((spx_word32_t)2147483647)
@ -111,9 +112,6 @@ typedef float spx_word32_t;
#define GAIN_SCALING 1.f
#define GAIN_SCALING_1 1.f
#define LPC_SHIFT 0
#define LSP_SHIFT 0
#define SIG_SHIFT 0
#define VERY_SMALL 1e-15f
#define VERY_LARGE32 1e15f

View file

@ -665,13 +665,17 @@ int nb_encode(void *state, void *vin, SpeexBits *bits)
if (SUBMODE(forced_pitch_gain))
{
int quant;
#ifdef FIXED_POINT
quant = PSHR16(MULT16_16_16(15, ol_pitch_coef),GAIN_SHIFT);
#else
quant = (int)floor(.5+15*ol_pitch_coef*GAIN_SCALING_1);
#endif
if (quant>15)
quant=15;
if (quant<0)
quant=0;
speex_bits_pack(bits, quant, 4);
ol_pitch_coef=GAIN_SCALING*0.066667*quant;
ol_pitch_coef=MULT16_16_P15(QCONST16(0.066667,15),SHL16(quant,GAIN_SHIFT));
}
@ -1410,7 +1414,7 @@ int nb_decode(void *state, SpeexBits *bits, void *vout)
{
int quant;
quant = speex_bits_unpack_unsigned(bits, 4);
ol_pitch_coef=GAIN_SCALING*0.066667*quant;
ol_pitch_coef=MULT16_16_P15(QCONST16(0.066667,15),SHL16(quant,GAIN_SHIFT));
}
/* Get global excitation gain */
@ -1572,11 +1576,9 @@ int nb_decode(void *state, SpeexBits *bits, void *vout)
/*Fixed codebook contribution*/
SUBMODE(innovation_unquant)(innov, SUBMODE(innovation_params), st->subframeSize, bits, stack, &st->seed);
/* De-normalize innovation and update excitation */
#ifdef FIXED_POINT
signal_mul(innov, innov, ener, st->subframeSize);
#else
signal_mul(innov, innov, ener, st->subframeSize);
#endif
/* Decode second codebook (only for some modes) */
if (SUBMODE(double_codebook))
{
@ -2026,6 +2028,8 @@ int nb_decoder_ctl(void *state, int request, void *ptr)
break;
case SPEEX_GET_ACTIVITY:
{
/* We don't use this, dummy it out to get rid of the float stuff */
#if 0
float ret;
ret = log(st->level/st->min_level)/log(st->max_level/st->min_level);
if (ret>1)
@ -2035,6 +2039,9 @@ int nb_decoder_ctl(void *state, int request, void *ptr)
ret = 0;
/*printf ("%f %f %f %f\n", st->level, st->min_level, st->max_level, ret);*/
(*(spx_int32_t*)ptr) = (int)(100*ret);
#else
(*(spx_int32_t*)ptr) = (int)(0);
#endif
}
break;
case SPEEX_GET_PI_GAIN:

View file

@ -114,9 +114,12 @@ int speex_std_enh_request_handler(SpeexBits *bits, void *state, void *data)
int speex_std_vbr_quality_request_handler(SpeexBits *bits, void *state, void *data)
{
/* We don't use this, get rid of the float reference */
#if 0
float qual;
qual = speex_bits_unpack_unsigned(bits, 4);
speex_encoder_ctl(data, SPEEX_SET_VBR_QUALITY, &qual);
#endif
return 0;
}