1d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/* ------------------------------------------------------------------
2d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *
4d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * you may not use this file except in compliance with the License.
6d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * You may obtain a copy of the License at
7d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *
8d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber *
10d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * Unless required by applicable law or agreed to in writing, software
11d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * express or implied.
14d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * See the License for the specific language governing permissions
15d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * and limitations under the License.
16d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber * -------------------------------------------------------------------
17d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber */
18d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/****************************************************************************************
19d49b526dd2009270cb15f7fe4e70b74673950608Andreas HuberPortions of this file are derived from the following 3GPP standard:
20d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
21d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    3GPP TS 26.073
22d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Available from http://www.3gpp.org
24d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
25d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26d49b526dd2009270cb15f7fe4e70b74673950608Andreas HuberPermission to distribute, modify and use this file under the standard license
27d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huberterms listed above has been obtained from the copyright holder.
28d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber****************************************************************************************/
29d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*
30d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
31d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
32d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
33d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
34d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Pathname: ./audio/gsm-amr/c/src/cbsearch.c
35d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Functions: D_plsf_3
36d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
37d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     Date: 01/31/2002
38d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
39d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
40d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REVISION HISTORY
41d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
42d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description:
43d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber (1) Removed "count.h" and "basic_op.h" and replaced with individual include
44d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     files (add.h, sub.h, etc.)
45d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber (2) Added pOverflow parameter to code_10i40_35bits()
46d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
47d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description:  Replaced "int" and/or "char" with OSCL defined types.
48d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
49d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Description:
50d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
51d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber ------------------------------------------------------------------------------
52d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber INPUT AND OUTPUT DEFINITIONS
53d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
54d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Inputs:
55d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    x[] -- array of type Word16 -- target vector, Q0
56d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    h[] -- array of type Word16 -- impulse response of weighted synthesis
57d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                                   filter h[-L_subfr..-1] must be set to
58d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                                   zero. Q12
59d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    T0  -- Word16 -- Pitch lag
60d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    pitch_sharp -- Word16 -- Last quantized pitch gain, Q14
61d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    gain_pit --  Word16 gain_pit -- Pitch gain, Q14
62d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    res2[] -- array of type Word16 -- Long term prediction residual, Q0
63d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    mode -- enum Mode --  coder mode
64d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    subNr -- Word16 -- subframe number
65d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
66d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Outputs:
67d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    code[] -- array of type Word16 -- Innovative codebook, Q13
68d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    y[] -- array of type Word16 -- filtered fixed codebook excitation
69d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                                   Q12
70d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
71d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    anap -- Double pointer to Word16 -- Signs of the pulses
72d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
73d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
74d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    pOverflow -- pointer to Flag -- Flag set when overflow occurs
75d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
76d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Returns:
77d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Zero
78d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
79d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Global Variables Used:
80d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None
81d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
82d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber Local Variables Needed:
83d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    None
84d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
85d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
86d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber FUNCTION DESCRIPTION
87d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
88d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Purpose          : Inovative codebook search (find index and gain)
89d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
90d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
91d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REQUIREMENTS
92d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
93d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
94d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
95d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
96d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber REFERENCES
97d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
98d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber cbsearch.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
99d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
100d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
101d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber PSEUDO-CODE
102d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
103d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
104d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
105d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
106d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber RESOURCES USED
107d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber   When the code is written for a specific target processor the
108d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     the resources used should be documented below.
109d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
110d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber STACK USAGE: [stack count for this module] + [variable to represent
111d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber          stack usage for each subroutine called]
112d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
113d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     where: [stack usage variable] = stack usage for [subroutine
114d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         name] (see [filename].ext)
115d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
116d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber DATA MEMORY USED: x words
117d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
118d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber PROGRAM MEMORY USED: x words
119d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
120d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber CLOCK CYCLES: [cycle count equation for this module] + [variable
121d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber           used to represent cycle count for each subroutine
122d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber           called]
123d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
124d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     where: [cycle count variable] = cycle count for [subroutine
125d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        name] (see [filename].ext)
126d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
127d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber------------------------------------------------------------------------------
128d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber*/
129d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
130d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
131d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
132d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; INCLUDES
133d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
134d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "cbsearch.h"
135d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
136d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "typedef.h"
137d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "c2_9pf.h"
138d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "c2_11pf.h"
139d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "c3_14pf.h"
140d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "c4_17pf.h"
141d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "c8_31pf.h"
142d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "c1035pf.h"
143d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "mode.h"
144d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "basic_op.h"
145d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber#include "cnst.h"
146d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
147d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
148d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; MACROS
149d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Define module specific macros here
150d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
151d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
152d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
153d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
154d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; DEFINES
155d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Include all pre-processor statements here. Include conditional
156d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; compile variables also.
157d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
158d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
159d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
160d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; LOCAL FUNCTION DEFINITIONS
161d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Function Prototype declaration
162d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
163d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
164d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
165d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
166d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS
167d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Variable declaration - defined here and used outside this module
168d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
169d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
170d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
171d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; EXTERNAL FUNCTION REFERENCES
172d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Declare functions defined elsewhere and referenced in this module
173d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
174d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
175d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
176d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
177d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; Declare variables used in this module but defined elsewhere
178d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
179d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
180d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber/*----------------------------------------------------------------------------
181d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber; FUNCTION CODE
182d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber----------------------------------------------------------------------------*/
183d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
184d49b526dd2009270cb15f7fe4e70b74673950608Andreas Hubervoid cbsearch(Word16 x[],        /* i : target vector, Q0                     */
185d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Word16 h[],        /* i : impulse response of weighted synthesis*/
186d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              /*     filter h[-L_subfr..-1] must be set to */
187d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              /*     zero. Q12                             */
188d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Word16 T0,         /* i : Pitch lag                             */
189d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Word16 pitch_sharp,/* i : Last quantized pitch gain, Q14        */
190d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Word16 gain_pit,   /* i : Pitch gain, Q14                       */
191d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Word16 res2[],     /* i : Long term prediction residual, Q0     */
192d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Word16 code[],     /* o : Innovative codebook, Q13              */
193d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Word16 y[],        /* o : filtered fixed codebook excitation    */
194d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              /*     Q12                                   */
195d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Word16 **anap,     /* o : Signs of the pulses                   */
196d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              enum Mode mode,    /* i : coder mode                            */
197d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Word16 subNr,      /* i : subframe number                       */
198d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber              Flag  *pOverflow)  /* o : Flag set when overflow occurs         */
199d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber{
200d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 index;
201d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 i;
202d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 temp;
203d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    Word16 pit_sharpTmp;
204d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
205d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    /* For MR74, the pre and post CB pitch sharpening is included in the
206d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     * codebook search routine, while for MR122 is it not.
207d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber     */
208d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
209d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    if ((mode == MR475) || (mode == MR515))
210d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {
211d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /* MR475, MR515 */
212d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *(*anap)++ =
213d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            code_2i40_9bits(
214d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                subNr,
215d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                x,
216d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                h,
217d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                T0,
218d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pitch_sharp,
219d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                code,
220d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                y,
221d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                &index,
222d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pOverflow);
223d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
224d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *(*anap)++ = index;    /* sign index */
225d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
226d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    else if (mode == MR59)
227d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {   /* MR59 */
228d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *(*anap)++ =
229d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            code_2i40_11bits(
230d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                x,
231d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                h,
232d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                T0,
233d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pitch_sharp,
234d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                code,
235d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                y,
236d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                &index,
237d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pOverflow);
238d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
239d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *(*anap)++ = index;    /* sign index */
240d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
241d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    else if (mode == MR67)
242d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {   /* MR67 */
243d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *(*anap)++ =
244d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            code_3i40_14bits(
245d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                x,
246d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                h,
247d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                T0,
248d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pitch_sharp,
249d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                code,
250d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                y,
251d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                &index,
252d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pOverflow);
253d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
254d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *(*anap)++ = index;    /* sign index */
255d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
256d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    else if ((mode == MR74) || (mode == MR795))
257d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {   /* MR74, MR795 */
258d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *(*anap)++ =
259d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            code_4i40_17bits(
260d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                x,
261d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                h,
262d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                T0,
263d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pitch_sharp,
264d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                code,
265d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                y,
266d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                &index,
267d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pOverflow);
268d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
269d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *(*anap)++ = index;    /* sign index */
270d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
271d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    else if (mode == MR102)
272d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {   /* MR102 */
273d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*-------------------------------------------------------------*
274d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         * - include pitch contribution into impulse resp. h1[]        *
275d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         *-------------------------------------------------------------*/
276d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /* pit_sharpTmp = pit_sharp;                     */
277d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /* if (pit_sharpTmp > 1.0) pit_sharpTmp = 1.0;   */
278d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
279d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        pit_sharpTmp =
280d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            shl(
281d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pitch_sharp,
282d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                1,
283d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                pOverflow);
284d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
285d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        for (i = T0; i < L_SUBFR; i++)
286d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        {
287d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            temp =
288d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                mult(
289d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    h[i - T0],
290d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pit_sharpTmp,
291d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pOverflow);
292d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
293d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            h[i] =
294d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                add(
295d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    h[i],
296d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    temp,
297d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pOverflow);
298d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        }
299d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
300d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*--------------------------------------------------------------*
301d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         * - Innovative codebook search (find index and gain)           *
302d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         *--------------------------------------------------------------*/
303d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        code_8i40_31bits(
304d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            x,
305d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            res2,
306d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            h,
307d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            code,
308d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            y,
309d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            *anap,
310d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            pOverflow);
311d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
312d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *anap += 7;
313d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
314d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*-------------------------------------------------------*
315d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         * - Add the pitch contribution to code[].               *
316d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         *-------------------------------------------------------*/
317d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        for (i = T0; i < L_SUBFR; i++)
318d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        {
319d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            temp =
320d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                mult(
321d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    code[i - T0],
322d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pit_sharpTmp,
323d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pOverflow);
324d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
325d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            code[i] =
326d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                add(
327d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    code[i],
328d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    temp,
329d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pOverflow);
330d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        }
331d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
332d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    else
333d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    {  /* MR122 */
334d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*-------------------------------------------------------------*
335d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         * - include pitch contribution into impulse resp. h1[]        *
336d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         *-------------------------------------------------------------*/
337d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
338d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /* pit_sharpTmp = gain_pit;                      */
339d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /* if (pit_sharpTmp > 1.0) pit_sharpTmp = 1.0;   */
340d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
341d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        pit_sharpTmp = shl(gain_pit, 1, pOverflow);
342d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
343d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        for (i = T0; i < L_SUBFR; i++)
344d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        {
345d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            temp = ((Word32)h[i - T0] * pit_sharpTmp) >> 15;
346d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            /*
347d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                     mult(
348d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                            h[i - T0],
349d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                            ,
350d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                            pOverflow);
351d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            */
352d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            h[i] =
353d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                add(
354d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    h[i],
355d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    temp,
356d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pOverflow);
357d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        }
358d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*--------------------------------------------------------------*
359d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         * - Innovative codebook search (find index and gain)           *
360d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         *--------------------------------------------------------------*/
361d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
362d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        code_10i40_35bits(
363d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            x,
364d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            res2,
365d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            h,
366d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            code,
367d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            y,
368d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            *anap,
369d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            pOverflow);
370d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
371d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        *anap += 10;
372d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
373d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        /*-------------------------------------------------------*
374d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         * - Add the pitch contribution to code[].               *
375d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber         *-------------------------------------------------------*/
376d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        for (i = T0; i < L_SUBFR; i++)
377d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        {
378d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            temp =
379d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                mult(
380d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    code[i - T0],
381d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pit_sharpTmp,
382d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pOverflow);
383d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
384d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber            code[i] =
385d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                add(
386d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    code[i],
387d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    temp,
388d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber                    pOverflow);
389d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber        }
390d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber    }
391d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber
392d49b526dd2009270cb15f7fe4e70b74673950608Andreas Huber}
393