mirror of https://github.com/mpv-player/mpv
uLaw support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@757 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
2f3ad260a6
commit
0702a8bf1d
47
alaw.c
47
alaw.c
|
@ -6,7 +6,52 @@
|
|||
#define xaBYTE char
|
||||
#define xaUBYTE unsigned char
|
||||
|
||||
xaULONG long xa_alaw_2_sign[256];
|
||||
//xaULONG long xa_alaw_2_sign[256];
|
||||
xaULONG xa_alaw_2_sign[256];
|
||||
xaULONG xa_ulaw_2_sign[256];
|
||||
|
||||
/*
|
||||
** This routine converts from ulaw to 16 bit linear.
|
||||
**
|
||||
** Craig Reese: IDA/Supercomputing Research Center
|
||||
** 29 September 1989
|
||||
**
|
||||
** References:
|
||||
** 1) CCITT Recommendation G.711 (very difficult to follow)
|
||||
** 2) MIL-STD-188-113,"Interoperability and Performance Standards
|
||||
** for Analog-to_Digital Conversion Techniques,"
|
||||
** 17 February 1987
|
||||
**
|
||||
** Input: 8 bit ulaw sample
|
||||
** Output: signed 16 bit linear sample
|
||||
*/
|
||||
|
||||
xaLONG XA_uLaw_to_Signed( ulawbyte )
|
||||
xaUBYTE ulawbyte;
|
||||
{
|
||||
static int exp_lut[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 };
|
||||
int sign, exponent, mantissa, sample;
|
||||
|
||||
ulawbyte = ~ ulawbyte;
|
||||
sign = ( ulawbyte & 0x80 );
|
||||
exponent = ( ulawbyte >> 4 ) & 0x07;
|
||||
mantissa = ulawbyte & 0x0F;
|
||||
sample = exp_lut[exponent] + ( mantissa << ( exponent + 3 ) );
|
||||
if ( sign != 0 ) sample = -sample;
|
||||
|
||||
return sample;
|
||||
}
|
||||
|
||||
void Gen_uLaw_2_Signed()
|
||||
{ xaULONG i;
|
||||
for(i=0;i<256;i++)
|
||||
{ xaUBYTE data = (xaUBYTE)(i);
|
||||
xaLONG d = XA_uLaw_to_Signed( data );
|
||||
xa_ulaw_2_sign[i] = (xaULONG)((xaULONG)(d) & 0xffff);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Gen_aLaw_2_Signed()
|
||||
{ xaULONG i;
|
||||
|
|
Loading…
Reference in New Issue