Wed Oct 28 15:47:57 2009

Asterisk developer's documentation


alaw.c File Reference

u-Law to Signed linear conversion More...

#include "asterisk.h"
#include "asterisk/alaw.h"

Include dependency graph for alaw.c:

Go to the source code of this file.

Defines

#define AMI_MASK   0x55

Functions

static short int alaw2linear (unsigned char alaw)
void ast_alaw_init (void)
static unsigned char linear2alaw (short int linear)

Variables

short __ast_alaw [256]
unsigned char __ast_lin2a [8192]


Detailed Description

u-Law to Signed linear conversion

Definition in file alaw.c.


Define Documentation

#define AMI_MASK   0x55

Definition at line 31 of file alaw.c.

Referenced by alaw2linear(), and linear2alaw().


Function Documentation

static short int alaw2linear ( unsigned char  alaw  )  [inline, static]

Definition at line 67 of file alaw.c.

References AMI_MASK.

Referenced by ast_alaw_init().

00068 {
00069     int i;
00070     int seg;
00071 
00072     alaw ^= AMI_MASK;
00073     i = ((alaw & 0x0F) << 4);
00074     seg = (((int) alaw & 0x70) >> 4);
00075     if (seg)
00076         i = (i + 0x100) << (seg - 1);
00077     return (short int) ((alaw & 0x80)  ?  i  :  -i);
00078 }

void ast_alaw_init ( void   ) 

Init the ulaw conversion stuff

To init the ulaw to slinear conversion stuff, this needs to be run.

Definition at line 83 of file alaw.c.

References alaw2linear(), and linear2alaw().

Referenced by main().

00084 {
00085    int i;
00086    /* 
00087     *  Set up mu-law conversion table
00088     */
00089    for(i = 0;i < 256;i++)
00090       {
00091            __ast_alaw[i] = alaw2linear(i);
00092       }
00093      /* set up the reverse (mu-law) conversion table */
00094    for(i = -32768; i < 32768; i++)
00095       {
00096       __ast_lin2a[((unsigned short)i) >> 3] = linear2alaw(i);
00097       }
00098 
00099 }

static unsigned char linear2alaw ( short int  linear  )  [inline, static]

Definition at line 33 of file alaw.c.

References AMI_MASK.

Referenced by ast_alaw_init().

00034 {
00035     int mask;
00036     int seg;
00037     int pcm_val;
00038     static int seg_end[8] =
00039     {
00040          0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF
00041     };
00042     
00043     pcm_val = linear;
00044     if (pcm_val >= 0)
00045     {
00046         /* Sign (7th) bit = 1 */
00047         mask = AMI_MASK | 0x80;
00048     }
00049     else
00050     {
00051         /* Sign bit = 0 */
00052         mask = AMI_MASK;
00053         pcm_val = -pcm_val;
00054     }
00055 
00056     /* Convert the scaled magnitude to segment number. */
00057     for (seg = 0;  seg < 8;  seg++)
00058     {
00059         if (pcm_val <= seg_end[seg])
00060        break;
00061     }
00062     /* Combine the sign, segment, and quantization bits. */
00063     return  ((seg << 4) | ((pcm_val >> ((seg)  ?  (seg + 3)  :  4)) & 0x0F)) ^ mask;
00064 }


Variable Documentation

short __ast_alaw[256]

help

Definition at line 81 of file alaw.c.

unsigned char __ast_lin2a[8192]

converts signed linear to mulaw

Definition at line 80 of file alaw.c.


Generated on Wed Oct 28 15:47:57 2009 for Asterisk - the Open Source PBX by  doxygen 1.5.6