#include "asterisk.h"
#include "asterisk/ulaw.h"
Go to the source code of this file.
Defines | |
#define | BIAS 0x84 |
#define | CLIP 32635 |
#define | ZEROTRAP |
Functions | |
void | ast_ulaw_init (void) |
Set up mu-law conversion table. | |
static unsigned char | linear2ulaw (short sample) |
Variables | |
unsigned char | __ast_lin2mu [16384] |
short | __ast_mulaw [256] |
Definition in file ulaw.c.
#define BIAS 0x84 |
define the add-in bias for 16 bit samples
Definition at line 33 of file ulaw.c.
Referenced by linear2ulaw().
#define CLIP 32635 |
void ast_ulaw_init | ( | void | ) |
Set up mu-law conversion table.
To init the ulaw to slinear conversion stuff, this needs to be run.
Definition at line 85 of file ulaw.c.
References f, and linear2ulaw().
Referenced by load_module(), and main().
00086 { 00087 int i; 00088 for (i = 0; i < 256; i++) { 00089 short mu, e, f, y; 00090 static short etab[] = {0,132,396,924,1980,4092,8316,16764}; 00091 00092 mu = 255 - i; 00093 e = (mu & 0x70) / 16; 00094 f = mu & 0x0f; 00095 y = f * (1 << (e + 3)); 00096 y += etab[e]; 00097 if (mu & 0x80) 00098 y = -y; 00099 __ast_mulaw[i] = y; 00100 } 00101 /* set up the reverse (mu-law) conversion table */ 00102 for (i = -32768; i < 32768; i++) { 00103 __ast_lin2mu[((unsigned short)i) >> 2] = linear2ulaw(i); 00104 } 00105 }
static unsigned char linear2ulaw | ( | short | sample | ) | [static] |
Definition at line 40 of file ulaw.c.
Referenced by ast_ulaw_init(), and main().
00041 { 00042 static int exp_lut[256] = { 00043 0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3, 00044 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 00045 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 00046 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 00047 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 00048 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 00049 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 00050 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 00051 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 00052 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 00053 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 00054 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 00055 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 00056 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 00057 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 00058 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 }; 00059 int sign, exponent, mantissa; 00060 unsigned char ulawbyte; 00061 00062 /* Get the sample into sign-magnitude. */ 00063 sign = (sample >> 8) & 0x80; /* set aside the sign */ 00064 if (sign != 0) 00065 sample = -sample; /* get magnitude */ 00066 if (sample > CLIP) 00067 sample = CLIP; /* clip the magnitude */ 00068 00069 /* Convert from 16 bit linear to ulaw. */ 00070 sample = sample + BIAS; 00071 exponent = exp_lut[(sample >> 7) & 0xFF]; 00072 mantissa = (sample >> (exponent + 3)) & 0x0F; 00073 ulawbyte = ~(sign | (exponent << 4) | mantissa); 00074 #ifdef ZEROTRAP 00075 if (ulawbyte == 0) 00076 ulawbyte = 0x02; /* optional CCITT trap */ 00077 #endif 00078 00079 return ulawbyte; 00080 }
unsigned char __ast_lin2mu[16384] |
short __ast_mulaw[256] |