1/* 2 * This source code is a product of Sun Microsystems, Inc. and is provided 3 * for unrestricted use. Users may copy or modify this source code without 4 * charge. 5 * 6 * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING 7 * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 8 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 9 * 10 * Sun source code is provided with no support and without any obligation on 11 * the part of Sun Microsystems, Inc. to assist in its use, correction, 12 * modification or enhancement. 13 * 14 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 15 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE 16 * OR ANY PART THEREOF. 17 * 18 * In no event will Sun Microsystems, Inc. be liable for any lost revenue 19 * or profits or other special, indirect and consequential damages, even if 20 * Sun has been advised of the possibility of such damages. 21 * 22 * Sun Microsystems, Inc. 23 * 2550 Garcia Avenue 24 * Mountain View, California 94043 25 */ 26 27/* 28 * g72x.h 29 * 30 * Header file for CCITT conversion routines. 31 * 32 */ 33#ifndef _G72X_H 34#define _G72X_H 35 36#define AUDIO_ENCODING_ULAW (1) /* ISDN u-law */ 37#define AUDIO_ENCODING_ALAW (2) /* ISDN A-law */ 38#define AUDIO_ENCODING_LINEAR (3) /* PCM 2's-complement (0-center) */ 39 40/* 41 * The following is the definition of the state structure 42 * used by the G.721/G.723 encoder and decoder to preserve their internal 43 * state between successive calls. The meanings of the majority 44 * of the state structure fields are explained in detail in the 45 * CCITT Recommendation G.721. The field names are essentially indentical 46 * to variable names in the bit level description of the coding algorithm 47 * included in this Recommendation. 48 */ 49struct g72x_state { 50 long yl; /* Locked or steady state step size multiplier. */ 51 short yu; /* Unlocked or non-steady state step size multiplier. */ 52 short dms; /* Short term energy estimate. */ 53 short dml; /* Long term energy estimate. */ 54 short ap; /* Linear weighting coefficient of 'yl' and 'yu'. */ 55 56 short a[2]; /* Coefficients of pole portion of prediction filter. */ 57 short b[6]; /* Coefficients of zero portion of prediction filter. */ 58 short pk[2]; /* 59 * Signs of previous two samples of a partially 60 * reconstructed signal. 61 */ 62 short dq[6]; /* 63 * Previous 6 samples of the quantized difference 64 * signal represented in an internal floating point 65 * format. 66 */ 67 short sr[2]; /* 68 * Previous 2 samples of the quantized difference 69 * signal represented in an internal floating point 70 * format. 71 */ 72 char td; /* delayed tone detect, new in 1988 version */ 73}; 74 75/* External function definitions. */ 76 77extern unsigned char linear2alaw (int pcm_val); /* 2's complement (16-bit range) */ 78extern int alaw2linear (unsigned char a_val); 79extern unsigned char linear2ulaw (int pcm_val); /* 2's complement (16-bit range) */ 80extern int ulaw2linear (unsigned char u_val); 81extern int predictor_zero (struct g72x_state *state_ptr); 82extern int predictor_pole (struct g72x_state *state_ptr); 83extern int step_size (struct g72x_state *state_ptr); 84extern int quantize (int d, int y, short *table, int size); 85extern int reconstruct (int sign, int dqln, int y); 86 87extern void update 88 ( int code_size, int y, int wi, int fi, int dq 89 , int sr, int dqsez, struct g72x_state *state_ptr); 90 91int tandem_adjust_alaw 92 (int sr, int se, int y, int i, int sign, short *qtab); 93 94int tandem_adjust_ulaw 95 (int sr, int se, int y, int i, int sign, short *qtab); 96 97extern void g72x_init_state (struct g72x_state *); 98extern int g721_encoder( 99 int sample, 100 int in_coding, 101 struct g72x_state *state_ptr); 102extern int g721_decoder( 103 int code, 104 int out_coding, 105 struct g72x_state *state_ptr); 106extern int g723_24_encoder( 107 int sample, 108 int in_coding, 109 struct g72x_state *state_ptr); 110extern int g723_24_decoder( 111 int code, 112 int out_coding, 113 struct g72x_state *state_ptr); 114extern int g723_40_encoder( 115 int sample, 116 int in_coding, 117 struct g72x_state *state_ptr); 118extern int g723_40_decoder( 119 int code, 120 int out_coding, 121 struct g72x_state *state_ptr); 122 123#endif /* !_G72X_H */ 124