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 |
+ * |