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