|
|
|
@ -174,7 +174,12 @@ static void final(const int16_t *i1, const int16_t *i2, |
|
|
|
|
memcpy(statbuf, work + 40, 20); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static unsigned int rms(const int *data, int f) |
|
|
|
|
static unsigned int rescale_rms(int rms, int energy) |
|
|
|
|
{ |
|
|
|
|
return (rms * energy) >> 10; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static unsigned int rms(const int *data) |
|
|
|
|
{ |
|
|
|
|
int x; |
|
|
|
|
unsigned int res = 0x10000; |
|
|
|
@ -197,7 +202,6 @@ static unsigned int rms(const int *data, int f) |
|
|
|
|
res = t_sqrt(res); |
|
|
|
|
|
|
|
|
|
res >>= (b + 10); |
|
|
|
|
res = (res * f) >> 10; |
|
|
|
|
return res; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -314,13 +318,13 @@ static int interp(RA144Context *ractx, int16_t *decsp, int block_num, |
|
|
|
|
// coefficients
|
|
|
|
|
if (copynew) { |
|
|
|
|
int_to_int16(decsp, ractx->lpc_coef); |
|
|
|
|
return rms(ractx->lpc_refl, energy); |
|
|
|
|
return rescale_rms(rms(ractx->lpc_refl), energy); |
|
|
|
|
} else { |
|
|
|
|
int_to_int16(decsp, ractx->lpc_coef_old); |
|
|
|
|
return rms(ractx->lpc_refl_old, energy); |
|
|
|
|
return rescale_rms(rms(ractx->lpc_refl_old), energy); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
return rms(work, energy); |
|
|
|
|
return rescale_rms(rms(work), energy); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -358,7 +362,7 @@ static int ra144_decode_frame(AVCodecContext * avctx, |
|
|
|
|
refl_rms[1] = interp(ractx, block_coefs[1], 1, energy > ractx->old_energy, |
|
|
|
|
t_sqrt(energy*ractx->old_energy) >> 12); |
|
|
|
|
refl_rms[2] = interp(ractx, block_coefs[2], 2, 1, energy); |
|
|
|
|
refl_rms[3] = rms(ractx->lpc_refl, energy); |
|
|
|
|
refl_rms[3] = rescale_rms(rms(ractx->lpc_refl), energy); |
|
|
|
|
|
|
|
|
|
int_to_int16(block_coefs[3], ractx->lpc_coef); |
|
|
|
|
|
|
|
|
|