GNU Radio 3.5.1 C++ API
g72x.h
Go to the documentation of this file.
00001 /*
00002  * This source code is a product of Sun Microsystems, Inc. and is provided
00003  * for unrestricted use.  Users may copy or modify this source code without
00004  * charge.
00005  *
00006  * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
00007  * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
00008  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
00009  *
00010  * Sun source code is provided with no support and without any obligation on
00011  * the part of Sun Microsystems, Inc. to assist in its use, correction,
00012  * modification or enhancement.
00013  *
00014  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
00015  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
00016  * OR ANY PART THEREOF.
00017  *
00018  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
00019  * or profits or other special, indirect and consequential damages, even if
00020  * Sun has been advised of the possibility of such damages.
00021  *
00022  * Sun Microsystems, Inc.
00023  * 2550 Garcia Avenue
00024  * Mountain View, California  94043
00025  */
00026 
00027 /*
00028  * g72x.h
00029  *
00030  * Header file for CCITT conversion routines.
00031  *
00032  */
00033 #ifndef _G72X_H
00034 #define _G72X_H
00035 
00036 #define AUDIO_ENCODING_ULAW     (1)     /* ISDN u-law */
00037 #define AUDIO_ENCODING_ALAW     (2)     /* ISDN A-law */
00038 #define AUDIO_ENCODING_LINEAR   (3)     /* PCM 2's-complement (0-center) */
00039 
00040 /*
00041  * The following is the definition of the state structure
00042  * used by the G.721/G.723 encoder and decoder to preserve their internal
00043  * state between successive calls.  The meanings of the majority
00044  * of the state structure fields are explained in detail in the
00045  * CCITT Recommendation G.721.  The field names are essentially indentical
00046  * to variable names in the bit level description of the coding algorithm
00047  * included in this Recommendation.
00048  */
00049 struct g72x_state {
00050         long yl;        /* Locked or steady state step size multiplier. */
00051         short yu;       /* Unlocked or non-steady state step size multiplier. */
00052         short dms;      /* Short term energy estimate. */
00053         short dml;      /* Long term energy estimate. */
00054         short ap;       /* Linear weighting coefficient of 'yl' and 'yu'. */
00055 
00056         short a[2];     /* Coefficients of pole portion of prediction filter. */
00057         short b[6];     /* Coefficients of zero portion of prediction filter. */
00058         short pk[2];    /*
00059                          * Signs of previous two samples of a partially
00060                          * reconstructed signal.
00061                          */
00062         short dq[6];    /*
00063                          * Previous 6 samples of the quantized difference
00064                          * signal represented in an internal floating point
00065                          * format.
00066                          */
00067         short sr[2];    /*
00068                          * Previous 2 samples of the quantized difference
00069                          * signal represented in an internal floating point
00070                          * format.
00071                          */
00072         char td;        /* delayed tone detect, new in 1988 version */
00073 };
00074 
00075 /* External function definitions. */
00076 
00077 extern void g72x_init_state(struct g72x_state *);
00078 extern int g721_encoder(
00079                 int sample,
00080                 int in_coding,
00081                 struct g72x_state *state_ptr);
00082 extern int g721_decoder(
00083                 int code,
00084                 int out_coding,
00085                 struct g72x_state *state_ptr);
00086 extern int g723_24_encoder(
00087                 int sample,
00088                 int in_coding,
00089                 struct g72x_state *state_ptr);
00090 extern int g723_24_decoder(
00091                 int code,
00092                 int out_coding,
00093                 struct g72x_state *state_ptr);
00094 extern int g723_40_encoder(
00095                 int sample,
00096                 int in_coding,
00097                 struct g72x_state *state_ptr);
00098 extern int g723_40_decoder(
00099                 int code,
00100                 int out_coding,
00101                 struct g72x_state *state_ptr);
00102 
00103 
00104 extern int
00105 quantize(
00106          int            d,      
00107          int            y,      
00108         short           *table, 
00109         int             size);
00110 extern int reconstruct(int,int,int);void
00111 
00112 extern update(
00113         int             code_size,      
00114         int             y,              
00115         int             wi,             
00116         int             fi,             
00117         int             dq,             
00118         int             sr,             
00119         int             dqsez,          
00120         struct g72x_state *state_ptr);
00121 extern int
00122 tandem_adjust_alaw(
00123         int             sr,     
00124         int             se,     
00125         int             y,      
00126         int             i,      
00127         int             sign,
00128         short           *qtab);
00129 
00130 extern int
00131 tandem_adjust_ulaw(
00132         int             sr,     
00133         int             se,     
00134         int             y,      
00135         int             i,      
00136         int             sign,
00137         short           *qtab);
00138 
00139 extern unsigned char
00140 linear2alaw(
00141         int             pcm_val);
00142 
00143 extern int
00144 alaw2linear(
00145         unsigned char   a_val);
00146 
00147 extern unsigned char
00148 linear2ulaw(int         pcm_val);
00149 
00150 extern int ulaw2linear( unsigned char   u_val);
00151 
00152 extern int predictor_zero(struct g72x_state *state_ptr);
00153 
00154 extern int predictor_pole(      struct g72x_state *state_ptr);
00155 extern int step_size(   struct g72x_state *state_ptr);
00156 #endif /* !_G72X_H */