| Index: speex/libspeex/modes.c
|
| ===================================================================
|
| --- speex/libspeex/modes.c (revision 0)
|
| +++ speex/libspeex/modes.c (revision 0)
|
| @@ -0,0 +1,366 @@
|
| +/* Copyright (C) 2002-2006 Jean-Marc Valin
|
| + File: modes.c
|
| +
|
| + Describes the different modes of the codec
|
| +
|
| + Redistribution and use in source and binary forms, with or without
|
| + modification, are permitted provided that the following conditions
|
| + are met:
|
| +
|
| + - Redistributions of source code must retain the above copyright
|
| + notice, this list of conditions and the following disclaimer.
|
| +
|
| + - Redistributions in binary form must reproduce the above copyright
|
| + notice, this list of conditions and the following disclaimer in the
|
| + documentation and/or other materials provided with the distribution.
|
| +
|
| + - Neither the name of the Xiph.org Foundation nor the names of its
|
| + contributors may be used to endorse or promote products derived from
|
| + this software without specific prior written permission.
|
| +
|
| + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
|
| + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
| + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| +
|
| +*/
|
| +
|
| +#ifdef HAVE_CONFIG_H
|
| +#include "config.h"
|
| +#endif
|
| +
|
| +#include "modes.h"
|
| +#include "ltp.h"
|
| +#include "quant_lsp.h"
|
| +#include "cb_search.h"
|
| +#include "sb_celp.h"
|
| +#include "nb_celp.h"
|
| +#include "vbr.h"
|
| +#include "arch.h"
|
| +#include <math.h>
|
| +
|
| +#ifndef NULL
|
| +#define NULL 0
|
| +#endif
|
| +
|
| +
|
| +/* Extern declarations for all codebooks we use here */
|
| +extern const signed char gain_cdbk_nb[];
|
| +extern const signed char gain_cdbk_lbr[];
|
| +extern const signed char exc_5_256_table[];
|
| +extern const signed char exc_5_64_table[];
|
| +extern const signed char exc_8_128_table[];
|
| +extern const signed char exc_10_32_table[];
|
| +extern const signed char exc_10_16_table[];
|
| +extern const signed char exc_20_32_table[];
|
| +
|
| +
|
| +/* Parameters for Long-Term Prediction (LTP)*/
|
| +static const ltp_params ltp_params_nb = {
|
| + gain_cdbk_nb,
|
| + 7,
|
| + 7
|
| +};
|
| +
|
| +/* Parameters for Long-Term Prediction (LTP)*/
|
| +static const ltp_params ltp_params_vlbr = {
|
| + gain_cdbk_lbr,
|
| + 5,
|
| + 0
|
| +};
|
| +
|
| +/* Parameters for Long-Term Prediction (LTP)*/
|
| +static const ltp_params ltp_params_lbr = {
|
| + gain_cdbk_lbr,
|
| + 5,
|
| + 7
|
| +};
|
| +
|
| +/* Parameters for Long-Term Prediction (LTP)*/
|
| +static const ltp_params ltp_params_med = {
|
| + gain_cdbk_lbr,
|
| + 5,
|
| + 7
|
| +};
|
| +
|
| +/* Split-VQ innovation parameters for very low bit-rate narrowband */
|
| +static const split_cb_params split_cb_nb_vlbr = {
|
| + 10, /*subvect_size*/
|
| + 4, /*nb_subvect*/
|
| + exc_10_16_table, /*shape_cb*/
|
| + 4, /*shape_bits*/
|
| + 0,
|
| +};
|
| +
|
| +/* Split-VQ innovation parameters for very low bit-rate narrowband */
|
| +static const split_cb_params split_cb_nb_ulbr = {
|
| + 20, /*subvect_size*/
|
| + 2, /*nb_subvect*/
|
| + exc_20_32_table, /*shape_cb*/
|
| + 5, /*shape_bits*/
|
| + 0,
|
| +};
|
| +
|
| +/* Split-VQ innovation parameters for low bit-rate narrowband */
|
| +static const split_cb_params split_cb_nb_lbr = {
|
| + 10, /*subvect_size*/
|
| + 4, /*nb_subvect*/
|
| + exc_10_32_table, /*shape_cb*/
|
| + 5, /*shape_bits*/
|
| + 0,
|
| +};
|
| +
|
| +
|
| +/* Split-VQ innovation parameters narrowband */
|
| +static const split_cb_params split_cb_nb = {
|
| + 5, /*subvect_size*/
|
| + 8, /*nb_subvect*/
|
| + exc_5_64_table, /*shape_cb*/
|
| + 6, /*shape_bits*/
|
| + 0,
|
| +};
|
| +
|
| +/* Split-VQ innovation parameters narrowband */
|
| +static const split_cb_params split_cb_nb_med = {
|
| + 8, /*subvect_size*/
|
| + 5, /*nb_subvect*/
|
| + exc_8_128_table, /*shape_cb*/
|
| + 7, /*shape_bits*/
|
| + 0,
|
| +};
|
| +
|
| +/* Split-VQ innovation for low-band wideband */
|
| +static const split_cb_params split_cb_sb = {
|
| + 5, /*subvect_size*/
|
| + 8, /*nb_subvect*/
|
| + exc_5_256_table, /*shape_cb*/
|
| + 8, /*shape_bits*/
|
| + 0,
|
| +};
|
| +
|
| +
|
| +
|
| +/* 2150 bps "vocoder-like" mode for comfort noise */
|
| +static const SpeexSubmode nb_submode1 = {
|
| + 0,
|
| + 1,
|
| + 0,
|
| + 0,
|
| + /* LSP quantization */
|
| + lsp_quant_lbr,
|
| + lsp_unquant_lbr,
|
| + /* No pitch quantization */
|
| + forced_pitch_quant,
|
| + forced_pitch_unquant,
|
| + NULL,
|
| + /* No innovation quantization (noise only) */
|
| + noise_codebook_quant,
|
| + noise_codebook_unquant,
|
| + NULL,
|
| + -1,
|
| + 43
|
| +};
|
| +
|
| +/* 3.95 kbps very low bit-rate mode */
|
| +static const SpeexSubmode nb_submode8 = {
|
| + 0,
|
| + 1,
|
| + 0,
|
| + 0,
|
| + /*LSP quantization*/
|
| + lsp_quant_lbr,
|
| + lsp_unquant_lbr,
|
| + /*No pitch quantization*/
|
| + forced_pitch_quant,
|
| + forced_pitch_unquant,
|
| + NULL,
|
| + /*Innovation quantization*/
|
| + split_cb_search_shape_sign,
|
| + split_cb_shape_sign_unquant,
|
| + &split_cb_nb_ulbr,
|
| + QCONST16(.5,15),
|
| + 79
|
| +};
|
| +
|
| +/* 5.95 kbps very low bit-rate mode */
|
| +static const SpeexSubmode nb_submode2 = {
|
| + 0,
|
| + 0,
|
| + 0,
|
| + 0,
|
| + /*LSP quantization*/
|
| + lsp_quant_lbr,
|
| + lsp_unquant_lbr,
|
| + /*No pitch quantization*/
|
| + pitch_search_3tap,
|
| + pitch_unquant_3tap,
|
| + <p_params_vlbr,
|
| + /*Innovation quantization*/
|
| + split_cb_search_shape_sign,
|
| + split_cb_shape_sign_unquant,
|
| + &split_cb_nb_vlbr,
|
| + QCONST16(.6,15),
|
| + 119
|
| +};
|
| +
|
| +/* 8 kbps low bit-rate mode */
|
| +static const SpeexSubmode nb_submode3 = {
|
| + -1,
|
| + 0,
|
| + 1,
|
| + 0,
|
| + /*LSP quantization*/
|
| + lsp_quant_lbr,
|
| + lsp_unquant_lbr,
|
| + /*Pitch quantization*/
|
| + pitch_search_3tap,
|
| + pitch_unquant_3tap,
|
| + <p_params_lbr,
|
| + /*Innovation quantization*/
|
| + split_cb_search_shape_sign,
|
| + split_cb_shape_sign_unquant,
|
| + &split_cb_nb_lbr,
|
| + QCONST16(.55,15),
|
| + 160
|
| +};
|
| +
|
| +/* 11 kbps medium bit-rate mode */
|
| +static const SpeexSubmode nb_submode4 = {
|
| + -1,
|
| + 0,
|
| + 1,
|
| + 0,
|
| + /*LSP quantization*/
|
| + lsp_quant_lbr,
|
| + lsp_unquant_lbr,
|
| + /*Pitch quantization*/
|
| + pitch_search_3tap,
|
| + pitch_unquant_3tap,
|
| + <p_params_med,
|
| + /*Innovation quantization*/
|
| + split_cb_search_shape_sign,
|
| + split_cb_shape_sign_unquant,
|
| + &split_cb_nb_med,
|
| + QCONST16(.45,15),
|
| + 220
|
| +};
|
| +
|
| +/* 15 kbps high bit-rate mode */
|
| +static const SpeexSubmode nb_submode5 = {
|
| + -1,
|
| + 0,
|
| + 3,
|
| + 0,
|
| + /*LSP quantization*/
|
| + lsp_quant_nb,
|
| + lsp_unquant_nb,
|
| + /*Pitch quantization*/
|
| + pitch_search_3tap,
|
| + pitch_unquant_3tap,
|
| + <p_params_nb,
|
| + /*Innovation quantization*/
|
| + split_cb_search_shape_sign,
|
| + split_cb_shape_sign_unquant,
|
| + &split_cb_nb,
|
| + QCONST16(.3,15),
|
| + 300
|
| +};
|
| +
|
| +/* 18.2 high bit-rate mode */
|
| +static const SpeexSubmode nb_submode6 = {
|
| + -1,
|
| + 0,
|
| + 3,
|
| + 0,
|
| + /*LSP quantization*/
|
| + lsp_quant_nb,
|
| + lsp_unquant_nb,
|
| + /*Pitch quantization*/
|
| + pitch_search_3tap,
|
| + pitch_unquant_3tap,
|
| + <p_params_nb,
|
| + /*Innovation quantization*/
|
| + split_cb_search_shape_sign,
|
| + split_cb_shape_sign_unquant,
|
| + &split_cb_sb,
|
| + QCONST16(.2,15),
|
| + 364
|
| +};
|
| +
|
| +/* 24.6 kbps high bit-rate mode */
|
| +static const SpeexSubmode nb_submode7 = {
|
| + -1,
|
| + 0,
|
| + 3,
|
| + 1,
|
| + /*LSP quantization*/
|
| + lsp_quant_nb,
|
| + lsp_unquant_nb,
|
| + /*Pitch quantization*/
|
| + pitch_search_3tap,
|
| + pitch_unquant_3tap,
|
| + <p_params_nb,
|
| + /*Innovation quantization*/
|
| + split_cb_search_shape_sign,
|
| + split_cb_shape_sign_unquant,
|
| + &split_cb_nb,
|
| + QCONST16(.1,15),
|
| + 492
|
| +};
|
| +
|
| +
|
| +/* Default mode for narrowband */
|
| +static const SpeexNBMode nb_mode = {
|
| + 160, /*frameSize*/
|
| + 40, /*subframeSize*/
|
| + 10, /*lpcSize*/
|
| + 17, /*pitchStart*/
|
| + 144, /*pitchEnd*/
|
| +#ifdef FIXED_POINT
|
| + 29491, 19661, /* gamma1, gamma2 */
|
| +#else
|
| + 0.9, 0.6, /* gamma1, gamma2 */
|
| +#endif
|
| + QCONST16(.0002,15), /*lpc_floor*/
|
| + {NULL, &nb_submode1, &nb_submode2, &nb_submode3, &nb_submode4, &nb_submode5, &nb_submode6, &nb_submode7,
|
| + &nb_submode8, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
|
| + 5,
|
| + {1, 8, 2, 3, 3, 4, 4, 5, 5, 6, 7}
|
| +};
|
| +
|
| +
|
| +/* Default mode for narrowband */
|
| +EXPORT const SpeexMode speex_nb_mode = {
|
| + &nb_mode,
|
| + nb_mode_query,
|
| + "narrowband",
|
| + 0,
|
| + 4,
|
| + &nb_encoder_init,
|
| + &nb_encoder_destroy,
|
| + &nb_encode,
|
| + &nb_decoder_init,
|
| + &nb_decoder_destroy,
|
| + &nb_decode,
|
| + &nb_encoder_ctl,
|
| + &nb_decoder_ctl,
|
| +};
|
| +
|
| +
|
| +
|
| +EXPORT int speex_mode_query(const SpeexMode *mode, int request, void *ptr)
|
| +{
|
| + return mode->query(mode->mode, request, ptr);
|
| +}
|
| +
|
| +#ifdef FIXED_DEBUG
|
| +long long spx_mips=0;
|
| +#endif
|
| +
|
|
|
| Property changes on: speex/libspeex/modes.c
|
| ___________________________________________________________________
|
| Name: svn:executable
|
| + *
|
|
|
|
|