[MPlayer-dev-eng] [BUG] surround audio plugin broken
Arpi
arpi at thot.banki.hu
Tue Jan 7 01:29:02 CET 2003
Hi,
> > also it can add a given bias value to the pcm values (while doint the imdct)
> > helping the float2int process (there are integeronly tricks to convert an
> > ieee float in a given range to integer)
>
> Do you know which file?
resample_c.c::convert()
but the trick is easier to understand from mp3lib's decod386.c, it' seven
explained there:
#define WRITE_SAMPLE(samples,sum,clip) { \
union { double dtemp; int itemp[2]; } u; int v; \
u.dtemp = ((((65536.0 * 65536.0 * 16)+(65536.0 * 0.5))* 65536.0)) + (sum);\
v = u.itemp[MANTISSA_OFFSET] - 0x80000000; \
if( v > 32767) { *(samples) = 0x7fff; (clip)++; } \
else if( v < -32768) { *(samples) = -0x8000; (clip)++; } \
else { *(samples) = v; } \
}
* Here's how it works:
* ((((65536.0 * 65536.0 * 16)+(65536.0 * 0.5))* 65536.0)) is
* 0x0010000080000000LL in hex. It computes 0x0010000080000000LL + sum
* as a double IEEE fp value and extracts the low-order 32-bits from the
* IEEE fp representation stored in memory. The 2^56 bit in the constant
* is intended to force the bits of "sum" into the least significant bits
* of the double mantissa. After an integer substraction of 0x80000000
* we have the original double value "sum" converted to an 32-bit int value.
A'rpi / Astral & ESP-team
--
Developer of MPlayer, the Movie Player for Linux - http://www.MPlayerHQ.hu
More information about the MPlayer-dev-eng
mailing list