root / gnuradio-core / src / lib / g72x / g72x.h @ 5d69a524
History | View | Annotate | Download (4.1 kB)
| 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 | */ |
| 49 | struct 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 | |
| 77 | extern void g72x_init_state(struct g72x_state *); |
| 78 | extern int g721_encoder( |
| 79 | int sample,
|
| 80 | int in_coding,
|
| 81 | struct g72x_state *state_ptr);
|
| 82 | extern int g721_decoder( |
| 83 | int code,
|
| 84 | int out_coding,
|
| 85 | struct g72x_state *state_ptr);
|
| 86 | extern int g723_24_encoder( |
| 87 | int sample,
|
| 88 | int in_coding,
|
| 89 | struct g72x_state *state_ptr);
|
| 90 | extern int g723_24_decoder( |
| 91 | int code,
|
| 92 | int out_coding,
|
| 93 | struct g72x_state *state_ptr);
|
| 94 | extern int g723_40_encoder( |
| 95 | int sample,
|
| 96 | int in_coding,
|
| 97 | struct g72x_state *state_ptr);
|
| 98 | extern int g723_40_decoder( |
| 99 | int code,
|
| 100 | int out_coding,
|
| 101 | struct g72x_state *state_ptr);
|
| 102 | |
| 103 | |
| 104 | extern int |
| 105 | quantize( |
| 106 | int d,
|
| 107 | int y,
|
| 108 | short *table,
|
| 109 | int size);
|
| 110 | extern int reconstruct(int,int,int);void |
| 111 | |
| 112 | extern update(
|
| 113 | int code_size,
|
| 114 | int y,
|
| 115 | int wi,
|
| 116 | int fi,
|
| 117 | int dq,
|
| 118 | int sr,
|
| 119 | int dqsez,
|
| 120 | struct g72x_state *state_ptr);
|
| 121 | extern int |
| 122 | tandem_adjust_alaw( |
| 123 | int sr,
|
| 124 | int se,
|
| 125 | int y,
|
| 126 | int i,
|
| 127 | int sign,
|
| 128 | short *qtab);
|
| 129 | |
| 130 | extern int |
| 131 | tandem_adjust_ulaw( |
| 132 | int sr,
|
| 133 | int se,
|
| 134 | int y,
|
| 135 | int i,
|
| 136 | int sign,
|
| 137 | short *qtab);
|
| 138 | |
| 139 | extern unsigned char |
| 140 | linear2alaw( |
| 141 | int pcm_val);
|
| 142 | |
| 143 | extern int |
| 144 | alaw2linear( |
| 145 | unsigned char a_val); |
| 146 | |
| 147 | extern unsigned char |
| 148 | linear2ulaw(int pcm_val);
|
| 149 | |
| 150 | extern int ulaw2linear( unsigned char u_val); |
| 151 | |
| 152 | extern int predictor_zero(struct g72x_state *state_ptr); |
| 153 | |
| 154 | extern int predictor_pole( struct g72x_state *state_ptr); |
| 155 | extern int step_size( struct g72x_state *state_ptr); |
| 156 | #endif /* !_G72X_H */ |