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 *--------------------------------------------------------------------------*
215d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen *       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(
365d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* (i)    : Input signal                      */
375d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 m,                             /* (i)    : LPC order                         */
385d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 r_h[],                         /* (o)    : Autocorrelations  (msb)           */
395d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 r_l[]                          /* (o)    : Autocorrelations  (lsb)           */
405d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen         );
41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Lag_window(
435d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 r_h[],                         /* (i/o)   : Autocorrelations  (msb)          */
445d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 r_l[]                          /* (i/o)   : Autocorrelations  (lsb)          */
455d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen           );
46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_Levinson(
485d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * mem                          /* output  :static memory (18 words) */
495d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Levinson(
525d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 Rh[],                          /* (i)     : Rh[M+1] Vector of autocorrelations (msb) */
535d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 Rl[],                          /* (i)     : Rl[M+1] Vector of autocorrelations (lsb) */
545d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 A[],                           /* (o) Q12 : A[M]    LPC coefficients  (m = 16)       */
555d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 rc[],                          /* (o) Q15 : rc[M]   Reflection coefficients.         */
565d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * mem                          /* (i/o)   :static memory (18 words)                  */
575d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen         );
58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Az_isp(
605d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 a[],                           /* (i) Q12 : predictor coefficients                 */
615d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 isp[],                         /* (o) Q15 : Immittance spectral pairs              */
625d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 old_isp[]                      /* (i)     : old isp[] (in case not found M roots)  */
635d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen       );
64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Isp_Az(
665d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 isp[],                         /* (i) Q15 : Immittance spectral pairs            */
675d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 a[],                           /* (o) Q12 : predictor coefficients (order = M)   */
685d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 m,
695d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 adaptive_scaling               /* (i) 0   : adaptive scaling disabled */
705d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        /*     1   : adaptive scaling enabled  */
715d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen       );
72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Isp_isf(
745d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 isp[],                         /* (i) Q15 : isp[m] (range: -1<=val<1)                */
755d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 isf[],                         /* (o) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */
765d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 m                              /* (i)     : LPC order                                */
775d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Isf_isp(
805d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 isf[],                         /* (i) Q15 : isf[m] normalized (range: 0.0<=val<=0.5) */
815d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 isp[],                         /* (o) Q15 : isp[m] (range: -1<=val<1)                */
825d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 m                              /* (i)     : LPC order                                */
835d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Int_isp(
865d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 isp_old[],                     /* input : isps from past frame              */
875d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 isp_new[],                     /* input : isps from present frame           */
885d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 frac[],                        /* input : fraction for 3 first subfr (Q15)  */
895d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 Az[]                           /* output: LP coefficients in 4 subframes    */
905d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Weight_a(
935d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 a[],                           /* (i) Q12 : a[m+1]  LPC coefficients             */
945d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 ap[],                          /* (o) Q12 : Spectral expanded LPC coefficients   */
955d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 gamma,                         /* (i) Q15 : Spectral expansion factor.           */
965d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 m                              /* (i)     : LPC order.                           */
975d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen         );
98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-----------------------------------------------------------------*
101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *                        isf quantizers                           *
102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-----------------------------------------------------------------*/
103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Qpisf_2s_46b(
1055d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */
1065d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */
1075d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */
1085d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * indice,                      /* (o)     : quantization indices                 */
1095d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */
1105d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Qpisf_2s_36b(
1135d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf1,                        /* (i) Q15 : ISF in the frequency domain (0..0.5) */
1145d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf_q,                       /* (o) Q15 : quantized ISF               (0..0.5) */
1155d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * past_isfq,                   /* (io)Q15 : past ISF quantizer                   */
1165d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * indice,                      /* (o)     : quantization indices                 */
1175d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 nb_surv                        /* (i)     : number of survivor (1, 2, 3 or 4)    */
1185d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Dpisf_2s_46b(
1215d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * indice,                      /* input:  quantization indices                       */
1225d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */
1235d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */
1245d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isfold,                      /* input : past quantized ISF                    */
1255d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf_buf,                     /* input : isf buffer                                                        */
1265d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 bfi,                           /* input : Bad frame indicator                   */
1275d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 enc_dec
1285d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Dpisf_2s_36b(
1315d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * indice,                      /* input:  quantization indices                       */
1325d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf_q,                       /* output: quantized ISF in frequency domain (0..0.5) */
1335d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * past_isfq,                   /* i/0   : past ISF quantizer                    */
1345d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isfold,                      /* input : past quantized ISF                    */
1355d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf_buf,                     /* input : isf buffer                                                        */
1365d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 bfi,                           /* input : Bad frame indicator                   */
1375d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 enc_dec
1385d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
140e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Qisf_ns(
1415d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf1,                        /* input : ISF in the frequency domain (0..0.5) */
1425d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf_q,                       /* output: quantized ISF                        */
1435d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * indice                       /* output: quantization indices                 */
1445d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Disf_ns(
1475d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * indice,                      /* input:  quantization indices                  */
1485d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf_q                        /* input : ISF in the frequency domain (0..0.5)  */
1495d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
151e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 Sub_VQ(                             /* output: return quantization index     */
1525d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * x,                           /* input : ISF residual vector           */
1535d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * dico,                        /* input : quantization codebook         */
1545d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 dim,                           /* input : dimention of vector           */
1555d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 dico_size,                     /* input : size of quantization codebook */
1565d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word32 * distance                     /* output: error of quantization         */
1575d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen         );
158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Reorder_isf(
1605d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * isf,                         /* (i/o) Q15: ISF in the frequency domain (0..0.5) */
1615d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 min_dist,                      /* (i) Q15  : minimum distance to keep             */
1625d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 n                              /* (i)      : number of ISF                        */
1635d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*-----------------------------------------------------------------*
166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *                       filter prototypes                         *
167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *-----------------------------------------------------------------*/
168e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
169e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_Decim_12k8(
1705d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mem[]                          /* output: memory (2*NB_COEF_DOWN) set to zeros */
1715d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
172e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Decim_12k8(
1735d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 sig16k[],                      /* input:  signal to downsampling  */
1745d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 lg,                            /* input:  length of input         */
1755d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 sig12k8[],                     /* output: decimated signal        */
1765d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mem[]                          /* in/out: memory (2*NB_COEF_DOWN) */
1775d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen           );
178e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
179e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_HP50_12k8(Word16 mem[]);
180e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid HP50_12k8(
1815d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 signal[],                      /* input/output signal */
1825d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 lg,                            /* lenght of signal    */
1835d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mem[]                          /* filter memory [6]   */
1845d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen          );
185e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_HP400_12k8(Word16 mem[]);
186e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid HP400_12k8(
1875d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 signal[],                      /* input/output signal */
1885d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 lg,                            /* lenght of signal    */
1895d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mem[]                          /* filter memory [6]   */
1905d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen           );
191e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
192e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Init_Filt_6k_7k(Word16 mem[]);
193e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Filt_6k_7k(
1945d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 signal[],                      /* input:  signal                  */
1955d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 lg,                            /* input:  length of input         */
1965d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mem[]                          /* in/out: memory (size=30)        */
1975d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen           );
198e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Filt_6k_7k_asm(
1995d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 signal[],                      /* input:  signal                  */
2005d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 lg,                            /* input:  length of input         */
2015d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mem[]                          /* in/out: memory (size=30)        */
2025d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen           );
203e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
204e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid LP_Decim2(
2055d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* in/out: signal to process         */
2065d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 l,                             /* input : size of filtering         */
2075d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mem[]                          /* in/out: memory (size=3)           */
2085d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen          );
209e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
210e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Preemph(
2115d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
2125d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
2135d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 lg,                            /* (i)     : lenght of filtering                    */
2145d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
2155d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
216e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Preemph2(
2175d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
2185d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
2195d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 lg,                            /* (i)     : lenght of filtering                    */
2205d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
2215d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen         );
222e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Deemph(
2235d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
2245d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mu,                            /* (i) Q15 : deemphasis factor                      */
2255d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 L,                             /* (i)     : vector size                            */
2265d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * mem                          /* (i/o)   : memory (y[-1])                         */
2275d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen       );
228e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Deemph2(
2295d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
2305d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mu,                            /* (i) Q15 : deemphasis factor                      */
2315d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 L,                             /* (i)     : vector size                            */
2325d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * mem                          /* (i/o)   : memory (y[-1])                         */
2335d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
234e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Deemph_32(
2355d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */
2365d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */
2375d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 y[],                           /* (o)     : output signal (x16)      */
2385d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 mu,                            /* (i) Q15 : deemphasis factor        */
2395d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 L,                             /* (i)     : vector size              */
2405d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * mem                          /* (i/o)   : memory (y[-1])           */
2415d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen          );
242e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
243e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Deemph_32_asm(
2445d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x_hi[],                        /* (i)     : input signal (bit31..16) */
2455d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x_lo[],                        /* (i)     : input signal (bit15..4)  */
2465d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 y[],                           /* (o)     : output signal (x16)      */
2475d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 * mem                          /* (i/o)   : memory (y[-1])           */
2485d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen          );
249e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
250e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Convolve(
2515d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* (i)     : input vector                              */
2525d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 h[],                           /* (i) Q15    : impulse response                       */
2535d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 y[],                           /* (o) 12 bits: output vector                          */
2545d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 L                              /* (i)     : vector size                               */
2555d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen         );
256e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
257e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Convolve_asm(
2585d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* (i)     : input vector                              */
2595d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 h[],                           /* (i) Q15    : impulse response                       */
2605d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 y[],                           /* (o) 12 bits: output vector                          */
2615d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 L                              /* (i)     : vector size                               */
2625d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen         );
263e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
264e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Residu(
2655d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 a[],                           /* (i) Q12 : prediction coefficients                     */
2665d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */
2675d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 y[],                           /* (o)     : residual signal                             */
2685d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 lg                             /* (i)     : size of filtering                           */
2695d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
270e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
271e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Residu_opt(
2725d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 a[],                           /* (i) Q12 : prediction coefficients                     */
2735d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed         */
2745d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 y[],                           /* (o)     : residual signal                             */
2755d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        Word16 lg                             /* (i)     : size of filtering                           */
2765d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        );
277e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
278e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Syn_filt(
2795d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
2805d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 x[],                           /* (i)     : input signal                             */
2815d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 y[],                           /* (o)     : output signal                            */
2825d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 lg,                            /* (i)     : size of filtering                        */
2835d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */
2845d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 update                         /* (i)     : 0=no update, 1=update of memory.         */
2855d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    );
286e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
287e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Syn_filt_asm(
2885d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
2895d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 x[],                           /* (i)     : input signal                             */
2905d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 y[],                           /* (o)     : output signal                            */
2915d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 mem[]                          /* (i/o)   : memory associated with this filtering.   */
2925d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    );
293e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
294e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Syn_filt_32(
2955d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
2965d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 m,                             /* (i)     : order of LP filter             */
2975d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
2985d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
2995d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
3005d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
3015d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 lg                             /* (i)     : size of filtering              */
3025d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    );
303e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
304e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Syn_filt_32_asm(
3055d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
3065d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 m,                             /* (i)     : order of LP filter             */
3075d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
3085d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
3095d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
3105d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
3115d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    Word16 lg                             /* (i)     : size of filtering              */
3125d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    );
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.                   */
4465d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen                       /* (o) : index (36): 9+9+9+9 = 36 bits.                   */
4475d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen                       /* (o) : index (44): 13+9+13+9 = 44 bits.                 */
4485d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen                       /* (o) : index (52): 13+13+13+13 = 52 bits.               */
4495d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen                       /* (o) : index (64): 2+2+2+2+14+14+14+14 = 64 bits.       */
4505d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen                       /* (o) : index (72): 10+2+10+2+10+14+10+14 = 72 bits.     */
4515d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen                       /* (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