Codename Pineapple

Home page | Mailing list | Docs

Last updated: Sat Feb 3 05:01:57 2007

Asterisk developer's documentation :: Codename Pineapple


ulaw.c File Reference


Detailed Description

u-Law to Signed linear conversion

Author:
Mark Spencer <markster@digium.com>

Definition in file ulaw.c.

#include "asterisk.h"
#include "asterisk/ulaw.h"

Include dependency graph for ulaw.c:

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]


Define Documentation

#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
 

Definition at line 34 of file ulaw.c.

Referenced by linear2ulaw().

#define ZEROTRAP
 

turn on the trap as per the MIL-STD

Definition at line 32 of file ulaw.c.


Function Documentation

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.

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.

References BIAS, and CLIP.

Referenced by 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 }


Variable Documentation

unsigned char __ast_lin2mu[16384]
 

Definition at line 36 of file ulaw.c.

short __ast_mulaw[256]
 

help

Definition at line 37 of file ulaw.c.


Asterisk is a trademark for Digium, inc.. | Edvina.net | Asterisk.org | This documentation was generated with Doxygen