GNU Radio 2.x: g72x.h Source File

Main Page | Modules | Namespace List | Class Hierarchy | Compound List | File List | Namespace Members | Compound Members | File Members

# 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 */