1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*--------------------------------------------------------------------------* 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * ACELP.H * 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *--------------------------------------------------------------------------* 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * Function * 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *--------------------------------------------------------------------------*/ 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#ifndef __ACELP_H__ 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define __ACELP_H__ 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "typedef.h" 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "cod_main.h" 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-----------------------------------------------------------------* 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * LPC prototypes * 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-----------------------------------------------------------------*/ 32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 33e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 median5(Word16 x[]); 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Autocorr( 36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i) : Input signal */ 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 m, /* (i) : LPC order */ 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 r_h[], /* (o) : Autocorrelations (msb) */ 39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 r_l[] /* (o) : Autocorrelations (lsb) */ 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Lag_window( 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 r_h[], /* (i/o) : Autocorrelations (msb) */ 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 r_l[] /* (i/o) : Autocorrelations (lsb) */ 45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_Levinson( 48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* output :static memory (18 words) */ 49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Levinson( 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 Rh[], /* (i) : Rh[M+1] Vector of autocorrelations (msb) */ 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 Rl[], /* (i) : Rl[M+1] Vector of autocorrelations (lsb) */ 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 A[], /* (o) Q12 : A[M] LPC coefficients (m = 16) */ 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 rc[], /* (o) Q15 : rc[M] Reflection coefficients. */ 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* (i/o) :static memory (18 words) */ 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Az_isp( 60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 a[], /* (i) Q12 : predictor coefficients */ 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isp[], /* (o) Q15 : Immittance spectral pairs */ 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 old_isp[] /* (i) : old isp[] (in case not found M roots) */ 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Isp_Az( 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isp[], /* (i) Q15 : Immittance spectral pairs */ 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 a[], /* (o) Q12 : predictor coefficients (order = M) */ 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 m, 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 adaptive_scaling /* (i) 0 : adaptive scaling disabled */ 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* 1 : adaptive scaling enabled */ 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Isp_isf( 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isp[], /* (i) Q15 : isp[m] (range: -1<=val<1) */ 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isf[], /* (o) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */ 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 m /* (i) : LPC order */ 77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Isf_isp( 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isf[], /* (i) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */ 81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isp[], /* (o) Q15 : isp[m] (range: -1<=val<1) */ 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 m /* (i) : LPC order */ 83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Int_isp( 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isp_old[], /* input : isps from past frame */ 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isp_new[], /* input : isps from present frame */ 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 frac[], /* input : fraction for 3 first subfr (Q15) */ 89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 Az[] /* output: LP coefficients in 4 subframes */ 90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Weight_a( 93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 a[], /* (i) Q12 : a[m+1] LPC coefficients */ 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 ap[], /* (o) Q12 : Spectral expanded LPC coefficients */ 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 gamma, /* (i) Q15 : Spectral expansion factor. */ 96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 m /* (i) : LPC order. */ 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-----------------------------------------------------------------* 101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * isf quantizers * 102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-----------------------------------------------------------------*/ 103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Qpisf_2s_46b( 105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf1, /* (i) Q15 : ISF in the frequency domain (0..0.5) */ 106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_q, /* (o) Q15 : quantized ISF (0..0.5) */ 107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * past_isfq, /* (io)Q15 : past ISF quantizer */ 108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * indice, /* (o) : quantization indices */ 109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 nb_surv /* (i) : number of survivor (1, 2, 3 or 4) */ 110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Qpisf_2s_36b( 113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf1, /* (i) Q15 : ISF in the frequency domain (0..0.5) */ 114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_q, /* (o) Q15 : quantized ISF (0..0.5) */ 115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * past_isfq, /* (io)Q15 : past ISF quantizer */ 116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * indice, /* (o) : quantization indices */ 117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 nb_surv /* (i) : number of survivor (1, 2, 3 or 4) */ 118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Dpisf_2s_46b( 121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * indice, /* input: quantization indices */ 122e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_q, /* output: quantized ISF in frequency domain (0..0.5) */ 123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * past_isfq, /* i/0 : past ISF quantizer */ 124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isfold, /* input : past quantized ISF */ 125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_buf, /* input : isf buffer */ 126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 bfi, /* input : Bad frame indicator */ 127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 enc_dec 128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Dpisf_2s_36b( 131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * indice, /* input: quantization indices */ 132e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_q, /* output: quantized ISF in frequency domain (0..0.5) */ 133e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * past_isfq, /* i/0 : past ISF quantizer */ 134e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isfold, /* input : past quantized ISF */ 135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_buf, /* input : isf buffer */ 136e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 bfi, /* input : Bad frame indicator */ 137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 enc_dec 138e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 140e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Qisf_ns( 141e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf1, /* input : ISF in the frequency domain (0..0.5) */ 142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_q, /* output: quantized ISF */ 143e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * indice /* output: quantization indices */ 144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Disf_ns( 147e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * indice, /* input: quantization indices */ 148e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_q /* input : ISF in the frequency domain (0..0.5) */ 149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 151e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 Sub_VQ( /* output: return quantization index */ 152e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * x, /* input : ISF residual vector */ 153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * dico, /* input : quantization codebook */ 154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 dim, /* input : dimention of vector */ 155e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 dico_size, /* input : size of quantization codebook */ 156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word32 * distance /* output: error of quantization */ 157e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Reorder_isf( 160e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf, /* (i/o) Q15: ISF in the frequency domain (0..0.5) */ 161e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 min_dist, /* (i) Q15 : minimum distance to keep */ 162e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 n /* (i) : number of ISF */ 163e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-----------------------------------------------------------------* 166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * filter prototypes * 167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-----------------------------------------------------------------*/ 168e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 169e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_Decim_12k8( 170e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* output: memory (2*NB_COEF_DOWN) set to zeros */ 171e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 172e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Decim_12k8( 173e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 sig16k[], /* input: signal to downsampling */ 174e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* input: length of input */ 175e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 sig12k8[], /* output: decimated signal */ 176e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* in/out: memory (2*NB_COEF_DOWN) */ 177e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 178e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 179e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_HP50_12k8(Word16 mem[]); 180e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid HP50_12k8( 181e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 signal[], /* input/output signal */ 182e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* lenght of signal */ 183e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* filter memory [6] */ 184e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 185e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_HP400_12k8(Word16 mem[]); 186e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid HP400_12k8( 187e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 signal[], /* input/output signal */ 188e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* lenght of signal */ 189e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* filter memory [6] */ 190e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 191e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 192e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_Filt_6k_7k(Word16 mem[]); 193e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Filt_6k_7k( 194e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 signal[], /* input: signal */ 195e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* input: length of input */ 196e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* in/out: memory (size=30) */ 197e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 198e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Filt_6k_7k_asm( 199e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 signal[], /* input: signal */ 200e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* input: length of input */ 201e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* in/out: memory (size=30) */ 202e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 203e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 204e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid LP_Decim2( 205e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* in/out: signal to process */ 206e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 l, /* input : size of filtering */ 207e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* in/out: memory (size=3) */ 208e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 209e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 210e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Preemph( 211e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i/o) : input signal overwritten by the output */ 212e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mu, /* (i) Q15 : preemphasis coefficient */ 213e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* (i) : lenght of filtering */ 214e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* (i/o) : memory (x[-1]) */ 215e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 216e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Preemph2( 217e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i/o) : input signal overwritten by the output */ 218e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mu, /* (i) Q15 : preemphasis coefficient */ 219e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* (i) : lenght of filtering */ 220e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* (i/o) : memory (x[-1]) */ 221e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 222e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Deemph( 223e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i/o) : input signal overwritten by the output */ 224e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mu, /* (i) Q15 : deemphasis factor */ 225e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L, /* (i) : vector size */ 226e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* (i/o) : memory (y[-1]) */ 227e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 228e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Deemph2( 229e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i/o) : input signal overwritten by the output */ 230e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mu, /* (i) Q15 : deemphasis factor */ 231e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L, /* (i) : vector size */ 232e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* (i/o) : memory (y[-1]) */ 233e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 234e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Deemph_32( 235e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x_hi[], /* (i) : input signal (bit31..16) */ 236e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x_lo[], /* (i) : input signal (bit15..4) */ 237e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) : output signal (x16) */ 238e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mu, /* (i) Q15 : deemphasis factor */ 239e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L, /* (i) : vector size */ 240e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* (i/o) : memory (y[-1]) */ 241e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 242e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 243e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Deemph_32_asm( 244e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x_hi[], /* (i) : input signal (bit31..16) */ 245e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x_lo[], /* (i) : input signal (bit15..4) */ 246e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) : output signal (x16) */ 247e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* (i/o) : memory (y[-1]) */ 248e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 249e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 250e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Convolve( 251e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i) : input vector */ 252e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 h[], /* (i) Q15 : impulse response */ 253e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) 12 bits: output vector */ 254e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L /* (i) : vector size */ 255e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 256e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 257e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Convolve_asm( 258e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i) : input vector */ 259e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 h[], /* (i) Q15 : impulse response */ 260e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) 12 bits: output vector */ 261e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L /* (i) : vector size */ 262e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 263e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 264e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Residu( 265e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 a[], /* (i) Q12 : prediction coefficients */ 266e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i) : speech (values x[-m..-1] are needed */ 267e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) : residual signal */ 268e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg /* (i) : size of filtering */ 269e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 270e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 271e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Residu_opt( 272e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 a[], /* (i) Q12 : prediction coefficients */ 273e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i) : speech (values x[-m..-1] are needed */ 274e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) : residual signal */ 275e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg /* (i) : size of filtering */ 276e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 277e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 278e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Syn_filt( 279e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 a[], /* (i) Q12 : a[m+1] prediction coefficients */ 280e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i) : input signal */ 281e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) : output signal */ 282e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* (i) : size of filtering */ 283e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[], /* (i/o) : memory associated with this filtering. */ 284e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 update /* (i) : 0=no update, 1=update of memory. */ 285e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 286e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 287e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Syn_filt_asm( 288e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 a[], /* (i) Q12 : a[m+1] prediction coefficients */ 289e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i) : input signal */ 290e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) : output signal */ 291e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* (i/o) : memory associated with this filtering. */ 292e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 293e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 294e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Syn_filt_32( 295e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 a[], /* (i) Q12 : a[m+1] prediction coefficients */ 296e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 m, /* (i) : order of LP filter */ 297e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 exc[], /* (i) Qnew: excitation (exc[i] >> Qnew) */ 298e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 Qnew, /* (i) : exc scaling = 0(min) to 8(max) */ 299e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 sig_hi[], /* (o) /16 : synthesis high */ 300e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 sig_lo[], /* (o) /16 : synthesis low */ 301e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg /* (i) : size of filtering */ 302e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 303e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 304e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Syn_filt_32_asm( 305e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 a[], /* (i) Q12 : a[m+1] prediction coefficients */ 306e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 m, /* (i) : order of LP filter */ 307e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 exc[], /* (i) Qnew: excitation (exc[i] >> Qnew) */ 308e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 Qnew, /* (i) : exc scaling = 0(min) to 8(max) */ 309e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 sig_hi[], /* (o) /16 : synthesis high */ 310e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 sig_lo[], /* (o) /16 : synthesis low */ 311e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg /* (i) : size of filtering */ 312e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ); 313e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-----------------------------------------------------------------* 314e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * pitch prototypes * 315e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-----------------------------------------------------------------*/ 316e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 317e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 Pitch_ol( /* output: open loop pitch lag */ 318e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 signal[], /* input : signal used to compute the open loop pitch */ 319e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* signal[-pit_max] to signal[-1] should be known */ 320e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 pit_min, /* input : minimum pitch lag */ 321e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 pit_max, /* input : maximum pitch lag */ 322e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_frame /* input : length of frame to compute pitch */ 323e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 324e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 325e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 Pitch_med_ol( /* output: open loop pitch lag */ 326e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 wsp[], /* input : signal used to compute the open loop pitch */ 327e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* wsp[-pit_max] to wsp[-1] should be known */ 328e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Coder_State *st, /* i/o : global codec structure */ 329e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_frame /* input : length of frame to compute pitch */ 330e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 331e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 332e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 Med_olag( /* output : median of 5 previous open-loop lags */ 333e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 prev_ol_lag, /* input : previous open-loop lag */ 334e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 old_ol_lag[5] 335e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 336e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 337e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_Hp_wsp(Word16 mem[]); 338e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid scale_mem_Hp_wsp(Word16 mem[], Word16 exp); 339e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Hp_wsp( 340e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 wsp[], /* i : wsp[] signal */ 341e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 hp_wsp[], /* o : hypass wsp[] */ 342e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* i : lenght of signal */ 343e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* i/o : filter memory [9] */ 344e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 345e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 346e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 Pitch_fr4( /* (o) : pitch period. */ 347e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 exc[], /* (i) : excitation buffer */ 348e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 xn[], /* (i) : target vector */ 349e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 h[], /* (i) Q15 : impulse response of synth/wgt filters */ 350e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 t0_min, /* (i) : minimum value in the searched range. */ 351e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 t0_max, /* (i) : maximum value in the searched range. */ 352e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * pit_frac, /* (o) : chosen fraction (0, 1, 2 or 3). */ 353e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 i_subfr, /* (i) : indicator for first subframe. */ 354e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 t0_fr2, /* (i) : minimum value for resolution 1/2 */ 355e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 t0_fr1, /* (i) : minimum value for resolution 1 */ 356e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_subfr /* (i) : Length of subframe */ 357e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 358e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Pred_lt4( 359e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 exc[], /* in/out: excitation buffer */ 360e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 T0, /* input : integer pitch lag */ 361e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 frac, /* input : fraction of lag */ 362e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_subfr /* input : subframe size */ 363e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 364e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 365e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid pred_lt4_asm( 366e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 exc[], /* in/out: excitation buffer */ 367e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 T0, /* input : integer pitch lag */ 368e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 frac, /* input : fraction of lag */ 369e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_subfr /* input : subframe size */ 370e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 371e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 372e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-----------------------------------------------------------------* 373e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * gain prototypes * 374e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-----------------------------------------------------------------*/ 375e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 376e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 G_pitch( /* (o) Q14 : Gain of pitch lag saturated to 1.2 */ 377e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 xn[], /* (i) : Pitch target. */ 378e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y1[], /* (i) : filtered adaptive codebook. */ 379e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 g_coeff[], /* : Correlations need for gain quantization. */ 380e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_subfr /* : Length of subframe. */ 381e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 382e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_Q_gain2( 383e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* output :static memory (2 words) */ 384e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 385e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 Q_gain2( /* Return index of quantization. */ 386e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 xn[], /* (i) Q_xn:Target vector. */ 387e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y1[], /* (i) Q_xn:Adaptive codebook. */ 388e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 Q_xn, /* (i) :xn and y1 format */ 389e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y2[], /* (i) Q9 :Filtered innovative vector. */ 390e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 code[], /* (i) Q9 :Innovative vector. */ 391e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 g_coeff[], /* (i) :Correlations <xn y1> <y1 y1> */ 392e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* Compute in G_pitch(). */ 393e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_subfr, /* (i) :Subframe lenght. */ 394e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 nbits, /* (i) : number of bits (6 or 7) */ 395e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * gain_pit, /* (i/o)Q14:Pitch gain. */ 396e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word32 * gain_cod, /* (o) Q16 :Code gain. */ 397e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 gp_clip, /* (i) : Gp Clipping flag */ 398e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* (i/o) :static memory (2 words) */ 399e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 400e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 401e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_D_gain2( 402e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* output :static memory (4 words) */ 403e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 404e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid D_gain2( 405e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 index, /* (i) :index of quantization. */ 406e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 nbits, /* (i) : number of bits (6 or 7) */ 407e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 code[], /* (i) Q9 :Innovative vector. */ 408e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_subfr, /* (i) :Subframe lenght. */ 409e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * gain_pit, /* (o) Q14 :Pitch gain. */ 410e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word32 * gain_cod, /* (o) Q16 :Code gain. */ 411e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 bfi, /* (i) :bad frame indicator */ 412e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 prev_bfi, /* (i) : Previous BF indicator */ 413e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 state, /* (i) : State of BFH */ 414e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 unusable_frame, /* (i) : UF indicator */ 415e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 vad_hist, /* (i) :number of non-speech frames */ 416e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * mem /* (i/o) :static memory (4 words) */ 417e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 418e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 419e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-----------------------------------------------------------------* 420e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * acelp prototypes * 421e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-----------------------------------------------------------------*/ 422e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 423e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid cor_h_x( 424e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 h[], /* (i) Q12 : impulse response of weighted synthesis filter */ 425e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i) Q0 : target vector */ 426e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 dn[] /* (o) <12bit : correlation between target and h[] */ 427e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 428e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid ACELP_2t64_fx( 429e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 dn[], /* (i) <12b : correlation between target x[] and H[] */ 430e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 cn[], /* (i) <12b : residual after long term prediction */ 431e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 H[], /* (i) Q12: impulse response of weighted synthesis filter */ 432e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 code[], /* (o) Q9 : algebraic (fixed) codebook excitation */ 433e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) Q9 : filtered fixed codebook excitation */ 434e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * index /* (o) : index (12): 5+1+5+1 = 11 bits. */ 435e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 436e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 437e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid ACELP_4t64_fx( 438e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 dn[], /* (i) <12b : correlation between target x[] and H[] */ 439e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 cn[], /* (i) <12b : residual after long term prediction */ 440e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 H[], /* (i) Q12: impulse response of weighted synthesis filter */ 441e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 code[], /* (o) Q9 : algebraic (fixed) codebook excitation */ 442e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) Q9 : filtered fixed codebook excitation */ 443e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 nbbits, /* (i) : 20, 36, 44, 52, 64, 72 or 88 bits */ 444e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 ser_size, /* (i) : bit rate */ 445e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 _index[] /* (o) : index (20): 5+5+5+5 = 20 bits. */ 446e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* (o) : index (36): 9+9+9+9 = 36 bits. */ 447e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* (o) : index (44): 13+9+13+9 = 44 bits. */ 448e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* (o) : index (52): 13+13+13+13 = 52 bits. */ 449e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* (o) : index (64): 2+2+2+2+14+14+14+14 = 64 bits. */ 450e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* (o) : index (72): 10+2+10+2+10+14+10+14 = 72 bits. */ 451e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* (o) : index (88): 11+11+11+11+11+11+11+11 = 88 bits. */ 452e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 453e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 454e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Pit_shrp( 455e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * x, /* in/out: impulse response (or algebraic code) */ 456e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 pit_lag, /* input : pitch lag */ 457e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 sharp, /* input : pitch sharpening factor (Q15) */ 458e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_subfr /* input : subframe size */ 459e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 460e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 461e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 462e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-----------------------------------------------------------------* 463e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * others prototypes * 464e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-----------------------------------------------------------------*/ 465e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 466e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Copy( 467e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i) : input vector */ 468e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 y[], /* (o) : output vector */ 469e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L /* (i) : vector length */ 470e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 471e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Set_zero( 472e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (o) : vector to clear */ 473e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L /* (i) : length of vector */ 474e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 475e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Updt_tar( 476e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * x, /* (i) Q0 : old target (for pitch search) */ 477e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * x2, /* (o) Q0 : new target (for codebook search) */ 478e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * y, /* (i) Q0 : filtered adaptive codebook vector */ 479e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 gain, /* (i) Q14 : adaptive codebook gain */ 480e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L /* (i) : subframe size */ 481e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 482e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 voice_factor( /* (o) Q15 : factor (-1=unvoiced to 1=voiced) */ 483e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 exc[], /* (i) Q_exc: pitch excitation */ 484e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 Q_exc, /* (i) : exc format */ 485e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 gain_pit, /* (i) Q14 : gain of pitch */ 486e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 code[], /* (i) Q9 : Fixed codebook excitation */ 487e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 gain_code, /* (i) Q0 : gain of code */ 488e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_subfr /* (i) : subframe length */ 489e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 490e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Scale_sig( 491e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i/o) : signal to scale */ 492e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* (i) : size of x[] */ 493e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 exp /* (i) : exponent: x = round(x << exp) */ 494e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 495e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 496e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Scale_sig_opt( 497e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 x[], /* (i/o) : signal to scale */ 498e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 lg, /* (i) : size of x[] */ 499e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 exp /* (i) : exponent: x = round(x << exp) */ 500e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 501e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 502e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 Random(Word16 * seed); 503e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 504e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_gp_clip( 505e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* (o) : memory of gain of pitch clipping algorithm */ 506e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 507e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 Gp_clip( 508e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* (i/o) : memory of gain of pitch clipping algorithm */ 509e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 510e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Gp_clip_test_isf( 511e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isf[], /* (i) : isf values (in frequency domain) */ 512e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* (i/o) : memory of gain of pitch clipping algorithm */ 513e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 514e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Gp_clip_test_gain_pit( 515e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 gain_pit, /* (i) : gain of quantized pitch */ 516e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 mem[] /* (i/o) : memory of gain of pitch clipping algorithm */ 517e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 518e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 519e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 520e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif //__ACELP_H__ 521e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 522