47#ifndef G711_NEW_ALGORITHM 
   54    static int exp_lut[256] = {
 
   55        0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
 
   56        4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
 
   57        5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
 
   58        5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
 
   59        6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
 
   60        6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
 
   61        6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
 
   62        6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
 
   63        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
   64        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
   65        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
   66        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
   67        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
   68        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
   69        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
   70        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 };
 
   71    int sign, exponent, mantissa;
 
   72    unsigned char ulawbyte;
 
   75    sign = (sample >> 8) & 0x80;          
 
   82    sample = sample + 
BIAS;
 
   83    exponent = exp_lut[(sample >> 7) & 0xFF];
 
   84    mantissa = (sample >> (exponent + 3)) & 0x0F;
 
   85    ulawbyte = ~(sign | (exponent << 4) | mantissa);
 
 
  100static unsigned char linear2ulaw(
short sample, 
int full_coding)
 
  102    static const unsigned exp_lut[256] = {
 
  103        0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
 
  104        4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
 
  105        5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
 
  106        5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
 
  107        6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
 
  108        6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
 
  109        6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
 
  110        6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
 
  111        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
  112        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
  113        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
  114        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
  115        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
  116        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
  117        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 
  118        7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 };
 
  119    unsigned sign, exponent, mantissa, mag;
 
  120    unsigned char ulawbyte;
 
  123    ast_ulaw_get_sign_mag(sample, &sign, &mag);
 
  127    sign = (sample >> 8) & 0x80;          
 
  135    exponent = exp_lut[(mag >> 7) & 0xFF];
 
  136    mantissa = (mag >> (exponent + 3)) & 0x0F;
 
  140        ulawbyte = ~(sign | (exponent << 4) | mantissa);
 
  147        ulawbyte = (exponent << 4) | mantissa;
 
  153static inline short ulaw2linear(
unsigned char ulawbyte)
 
  155    unsigned exponent, mantissa;
 
  157    static const short etab[]={0,132,396,924,1980,4092,8316,16764};
 
  159    ulawbyte = ~ulawbyte;
 
  160    exponent = (ulawbyte & 0x70) >> 4;
 
  161    mantissa = ulawbyte & 0x0f;
 
  162    sample = mantissa << (exponent + 3);
 
  163    sample += etab[exponent];
 
  180#ifndef G711_NEW_ALGORITHM 
  181    for (i = 0;i < 256;i++) {
 
  183        static const short etab[]={0,132,396,924,1980,4092,8316,16764};
 
  188        y = f * (1 << (e + 3));
 
  190        if (mu & 0x80) y = -y;
 
  194    for (i = -32768; i < 32768; i++) {
 
  199    for (i = 0; i < 256; i++) {
 
  208#ifdef TEST_CODING_TABLES 
  209    for (i = -32768; i < 32768; ++i) {
 
  210#ifndef G711_NEW_ALGORITHM 
  215        short d1 = ulaw2linear(e1);
 
  217        short d2 = ulaw2linear(e2);
 
  220        if (e1 != e2 || d1 != d3 || d2 != d3) {
 
  221            ast_log(
LOG_WARNING, 
"u-Law coding tables test failed on %d: e1=%u, e2=%u, d1=%d, d2=%d\n",
 
  222                    i, (
unsigned)e1, (
unsigned)e2, (
int)d1, (
int)d2);
 
  228#ifdef TEST_TANDEM_TRANSCODING 
  230    for (i = -32768; i < 32768; ++i) {
 
  238        if (i < 0 && e1 == 0x7f && e2 == 0xff && e3 == 0xff)
 
  241        if (e1 != e2 || e2 != e3 || d1 != d2 || d2 != d3) {
 
  242            ast_log(
LOG_WARNING, 
"u-Law tandem transcoding test failed on %d: e1=%u, e2=%u, d1=%d, d2=%d, d3=%d\n",
 
  243                    i, (
unsigned)e1, (
unsigned)e2, (
int)d1, (
int)d2, (
int)d3);
 
 
Asterisk main include file. File version handling, generic pbx functions.
Support for logging to various files, console and syslog Configuration in file logger....
static unsigned char linear2ulaw(short sample)
void ast_ulaw_init(void)
Set up mu-law conversion table.
unsigned char __ast_lin2mu[16384]
converts signed linear to mulaw
u-Law to Signed linear conversion
#define AST_ULAW_TAB_SIZE