[FFmpeg-devel] [PATCH] Common ACELP code & G.729 [2/7] - pitch lag decoding
Fri Jun 27 15:54:22 CEST 2008
On Fri, Jun 27, 2008 at 08:30:56PM +0700, Vladimir Voroshilov wrote:
> 2008/6/27 Michael Niedermayer <michaelni at gmx.at>:
> > On Fri, Jun 27, 2008 at 06:30:00AM +0700, Vladimir Voroshilov wrote:
> >> 2008/6/27 Michael Niedermayer <michaelni at gmx.at>:
> >> > On Fri, Jun 27, 2008 at 12:00:01AM +0700, Vladimir Voroshilov wrote:
> >> [...]
> >> >> +
> >> >> + for(i=0; i<ma_pred_order; i++)
> >> >> + energy += quant_energy[i] * ma_prediction_coeff[i];
> >> >> +
> >> >> + innov_energy = sum_of_squares(fc_v, subframe_size, 0, 0);
> >> >> +#ifdef G729_BITEXACT
> >> >
> >> >> + energy += MULL(ff_log2(innov_energy), -24660) << 10;
> >> >
> >> > s/24660/6165/
> >> > and i wonder if a normal * would do with the correctly simplified constant?
> >> Breaks bitexactness.
> > you mean (x*2)>>1 != x then you have a overflow in your code
> No, i meant ((x*2)>>2)<<1 != (x>>2)<<2
> You didn't take in account MULL macro.
> The reason is rounding, not overflow.
you should not use MULL!
if you do use it, you would have to use it correctly, its not ok to
multiply all constants by 4 because you forgot a #define at the top of
your code. But as said you should not use MULL at all, use
*6165 or *6165LL
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
The greatest way to live with honor in this world is to be what we pretend
to be. -- Socrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 189 bytes
Desc: Digital signature
More information about the ffmpeg-devel