| /*************************************************************************/ |
| /* */ |
| /* Language Technologies Institute */ |
| /* Carnegie Mellon University */ |
| /* Copyright (c) 2010 */ |
| /* All Rights Reserved. */ |
| /* */ |
| /* Permission is hereby granted, free of charge, to use and distribute */ |
| /* this software and its documentation without restriction, including */ |
| /* without limitation the rights to use, copy, modify, merge, publish, */ |
| /* distribute, sublicense, and/or sell copies of this work, and to */ |
| /* permit persons to whom this work is furnished to do so, subject to */ |
| /* the following conditions: */ |
| /* 1. The code must retain the above copyright notice, this list of */ |
| /* conditions and the following disclaimer. */ |
| /* 2. Any modifications must be clearly marked as such. */ |
| /* 3. Original authors' names are not deleted. */ |
| /* 4. The authors' names are not used to endorse or promote products */ |
| /* derived from this software without specific prior written */ |
| /* permission. */ |
| /* */ |
| /* CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK */ |
| /* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */ |
| /* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */ |
| /* SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE */ |
| /* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */ |
| /* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */ |
| /* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */ |
| /* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */ |
| /* THIS SOFTWARE. */ |
| /* */ |
| /*************************************************************************/ |
| /* Author: Alan W Black (awb@cs.cmu.edu) */ |
| /* Date: March 2001 */ |
| /*************************************************************************/ |
| /* */ |
| /* Minor fixes to make it properly ansi and fit into cst */ |
| /* */ |
| /*************************************************************************/ |
| /* |
| * This source code is a product of Sun Microsystems, Inc. and is provided |
| * for unrestricted use. Users may copy or modify this source code without |
| * charge. |
| * |
| * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING |
| * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. |
| * |
| * Sun source code is provided with no support and without any obligation on |
| * the part of Sun Microsystems, Inc. to assist in its use, correction, |
| * modification or enhancement. |
| * |
| * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE |
| * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE |
| * OR ANY PART THEREOF. |
| * |
| * In no event will Sun Microsystems, Inc. be liable for any lost revenue |
| * or profits or other special, indirect and consequential damages, even if |
| * Sun has been advised of the possibility of such damages. |
| * |
| * Sun Microsystems, Inc. |
| * 2550 Garcia Avenue |
| * Mountain View, California 94043 |
| */ |
| |
| /* |
| * g72x.h |
| * |
| * Header file for CCITT conversion routines. |
| * |
| */ |
| #ifndef _G72X_H |
| #define _G72X_H |
| |
| #include "cst_wave.h" |
| |
| |
| |
| #define AUDIO_ENCODING_ULAW (1) /* ISDN u-law */ |
| #define AUDIO_ENCODING_ALAW (2) /* ISDN A-law */ |
| #define AUDIO_ENCODING_LINEAR (3) /* PCM 2's-complement (0-center) */ |
| |
| /* |
| * The following is the definition of the state structure |
| * used by the G.721/G.723 encoder and decoder to preserve their internal |
| * state between successive calls. The meanings of the majority |
| * of the state structure fields are explained in detail in the |
| * CCITT Recommendation G.721. The field names are essentially indentical |
| * to variable names in the bit level description of the coding algorithm |
| * included in this Recommendation. |
| */ |
| struct g72x_state { |
| long yl; /* Locked or steady state step size multiplier. */ |
| short yu; /* Unlocked or non-steady state step size multiplier. */ |
| short dms; /* Short term energy estimate. */ |
| short dml; /* Long term energy estimate. */ |
| short ap; /* Linear weighting coefficient of 'yl' and 'yu'. */ |
| |
| short a[2]; /* Coefficients of pole portion of prediction filter. */ |
| short b[6]; /* Coefficients of zero portion of prediction filter. */ |
| short pk[2]; /* |
| * Signs of previous two samples of a partially |
| * reconstructed signal. |
| */ |
| short dq[6]; /* |
| * Previous 6 samples of the quantized difference |
| * signal represented in an internal floating point |
| * format. |
| */ |
| short sr[2]; /* |
| * Previous 2 samples of the quantized difference |
| * signal represented in an internal floating point |
| * format. |
| */ |
| char td; /* delayed tone detect, new in 1988 version */ |
| }; |
| |
| /* External function definitions. */ |
| |
| extern void g72x_init_state(struct g72x_state *); |
| extern int g721_encoder( |
| int sample, |
| int in_coding, |
| struct g72x_state *state_ptr); |
| extern int g721_decoder( |
| int code, |
| int out_coding, |
| struct g72x_state *state_ptr); |
| extern int g723_24_encoder( |
| int sample, |
| int in_coding, |
| struct g72x_state *state_ptr); |
| extern int g723_24_decoder( |
| int code, |
| int out_coding, |
| struct g72x_state *state_ptr); |
| extern int g723_40_encoder( |
| int sample, |
| int in_coding, |
| struct g72x_state *state_ptr); |
| extern int g723_40_decoder( |
| int code, |
| int out_coding, |
| struct g72x_state *state_ptr); |
| |
| /* Internal functions */ |
| int g72x_predictor_zero(struct g72x_state *state_ptr); |
| int g72x_predictor_pole(struct g72x_state *state_ptr); |
| int g72x_step_size(struct g72x_state *state_ptr); |
| int |
| g72x_quantize( |
| int d, /* Raw difference signal sample */ |
| int y, /* Step size multiplier */ |
| short *table, /* quantization table */ |
| int size); /* table size of short integers */ |
| int |
| g72x_reconstruct( |
| int sign, /* 0 for non-negative value */ |
| int dqln, /* G.72x codeword */ |
| int y); /* Step size multiplier */ |
| void |
| g72x_update( |
| int code_size, /* distinguish 723_40 with others */ |
| int y, /* quantizer step size */ |
| int wi, /* scale factor multiplier */ |
| int fi, /* for long/short term energies */ |
| int dq, /* quantized prediction difference */ |
| int sr, /* reconstructed signal */ |
| int dqsez, /* difference from 2-pole predictor */ |
| struct g72x_state *state_ptr); /* coder state pointer */ |
| |
| |
| |
| #endif /* !_G72X_H */ |