1b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* ------------------------------------------------------------------ 2b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * 4b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * you may not use this file except in compliance with the License. 6b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * You may obtain a copy of the License at 7b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * 8b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * 10b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * Unless required by applicable law or agreed to in writing, software 11b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * express or implied. 14b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * See the License for the specific language governing permissions 15b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * and limitations under the License. 16b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * ------------------------------------------------------------------- 17b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber */ 18b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/**************************************************************************************** 19b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPortions of this file are derived from the following 3GPP standard: 20b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 21b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 3GPP TS 26.073 22b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec 23b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Available from http://www.3gpp.org 24b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 25b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC) 26b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberPermission to distribute, modify and use this file under the standard license 27b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huberterms listed above has been obtained from the copyright holder. 28b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber****************************************************************************************/ 29b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 30b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 31b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 32b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 33b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 34b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Pathname: ./audio/gsm-amr/c/src/gain_q.c 35b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Functions: 36b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 37b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Date: 02/05/2002 38b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 39b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 40b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REVISION HISTORY 41b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 42b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Updated template used to PV coding template. 43b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Changed to accept the pOverflow flag for EPOC compatibility. 44b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 45b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Removed everything associated with gc_pred_init 46b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber and gc_pred_exit. gc_pred_exit was simply removed -- gc_pred_init 47b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber was replaced with calls to gc_pred_reset. This is because the gc_pred 48b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber related structures are no longer dynamically allocated via malloc. 49b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 50b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: For gainQuant() 51b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 1. Replaced gc_pred_copy() with memcpy. 52b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 2. Eliminated unused include file gc_pred.h. 53b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 54b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Replaced OSCL mem type functions and eliminated include 55b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber files that now are chosen by OSCL definitions 56b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 57b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: Replaced "int" and/or "char" with OSCL defined types. 58b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 59b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Description: 60b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 61b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 62b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MODULE DESCRIPTION 63b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 64b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Quantazation of gains 65b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 66b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 67b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 68b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 69b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; INCLUDES 70b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 71b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include <stdlib.h> 72b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include <string.h> 73b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 74b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "gain_q.h" 75b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "typedef.h" 76b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "basic_op.h" 77b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "qua_gain.h" 78b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "cnst.h" 79b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "mode.h" 80b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "g_code.h" 81b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "q_gain_c.h" 82b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "calc_en.h" 83b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "qgain795.h" 84b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "qgain475.h" 85b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#include "set_zero.h" 86b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 87b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 88b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 89b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; MACROS 90b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Define module specific macros here 91b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 92b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 93b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 94b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; DEFINES 95b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Include all pre-processor statements here. Include conditional 96b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; compile variables also. 97b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 98b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber#define NPRED 4 /* number of prediction taps */ 99b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 100b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 101b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; LOCAL FUNCTION DEFINITIONS 102b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Function Prototype declaration 103b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 104b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 105b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/*---------------------------------------------------------------------------- 106b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; LOCAL VARIABLE DEFINITIONS 107b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber; Variable declaration - defined here and used outside this module 108b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber----------------------------------------------------------------------------*/ 109b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 110b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 111b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 112b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: gainQuant_init 113b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 114b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS 115b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 116b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs: 117b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st -- double pointer to gainQuantState 118b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 119b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs: 120b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st -- double ponter to gainQuantState 121b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 122b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns: 123b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber -1 if an error occurs during memory initialization 124b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 0 if OK 125b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 126b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used: 127b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 128b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 129b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed: 130b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 131b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 132b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 133b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION 134b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 135b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Allocates state memory and initializes state memory 136b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 137b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 138b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS 139b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 140b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 141b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 142b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 143b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES 144b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 145b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_q.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 146b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 147b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 148b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE 149b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 150b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 151b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 152b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional] 153b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 154b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the 155b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below. 156b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 157b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes 158b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 159b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes 160b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 161b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 162b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber used to represent cycle count for each subroutine 163b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber called) 164b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber where: (cycle count variable) = cycle count for [subroutine 165b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber name] 166b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 167b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 168b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional] 169b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function] 170b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 171b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 172b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 173b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 174b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberWord16 gainQuant_init(gainQuantState **state) 175b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{ 176b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gainQuantState* s; 177b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 178b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (state == (gainQuantState **) NULL) 179b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 180b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* fprintf(stderr, "gainQuant_init: invalid parameter\n"); */ 181b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return -1; 182b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 183b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *state = NULL; 184b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 185b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* allocate memory */ 186b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if ((s = (gainQuantState *) malloc(sizeof(gainQuantState))) == NULL) 187b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 188b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* fprintf(stderr, "gainQuant_init: can not malloc state structure\n"); */ 189b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return -1; 190b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 191b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 192b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber s->gain_idx_ptr = NULL; 193b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 194b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber s->adaptSt = NULL; 195b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 196b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Init sub states */ 197b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (gc_pred_reset(&s->gc_predSt) 198b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber || gc_pred_reset(&s->gc_predUnqSt) 199b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber || gain_adapt_init(&s->adaptSt)) 200b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 201b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gainQuant_exit(&s); 202b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return -1; 203b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 204b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 205b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gainQuant_reset(s); 206b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *state = s; 207b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 208b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return 0; 209b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber} 210b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 211b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 212b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 213b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: gainQuant_reset 214b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 215b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS 216b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 217b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs: 218b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st -- double pointer to gainQuantState 219b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 220b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs: 221b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st -- double ponter to gainQuantState 222b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 223b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns: 224b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber -1 if an error occurs 225b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 0 if OK 226b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 227b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used: 228b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 229b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 230b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed: 231b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 232b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 233b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 234b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION 235b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 236b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Initializes state memory to zero 237b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 238b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS 239b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 240b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 241b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 242b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 243b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES 244b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 245b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_q.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 246b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 247b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 248b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE 249b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 250b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 251b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 252b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional] 253b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 254b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the 255b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below. 256b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 257b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes 258b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 259b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes 260b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 261b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 262b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber used to represent cycle count for each subroutine 263b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber called) 264b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber where: (cycle count variable) = cycle count for [subroutine 265b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber name] 266b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 267b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 268b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional] 269b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function] 270b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 271b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 272b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 273b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 274b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas HuberWord16 gainQuant_reset(gainQuantState *state) 275b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{ 276b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 277b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (state == (gainQuantState *) NULL) 278b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 279b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* fprintf(stderr, "gainQuant_reset: invalid parameter\n"); */ 280b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return -1; 281b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 282b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 283b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber state->sf0_exp_gcode0 = 0; 284b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber state->sf0_frac_gcode0 = 0; 285b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber state->sf0_exp_target_en = 0; 286b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber state->sf0_frac_target_en = 0; 287b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 288b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Set_zero(state->sf0_exp_coeff, 5); 289b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Set_zero(state->sf0_frac_coeff, 5); 290b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber state->gain_idx_ptr = NULL; 291b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 292b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gc_pred_reset(&(state->gc_predSt)); 293b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gc_pred_reset(&(state->gc_predUnqSt)); 294b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_adapt_reset(state->adaptSt); 295b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 296b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return 0; 297b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber} 298b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 299b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 300b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 301b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: gainQuant_exit 302b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 303b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS 304b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 305b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs: 306b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st -- double pointer to gainQuantState 307b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 308b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs: 309b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 310b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 311b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns: 312b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 313b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 314b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used: 315b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 316b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 317b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed: 318b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 319b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 320b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 321b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION 322b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 323b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber The memory used for state memory is freed 324b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 325b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS 326b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 327b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 328b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 329b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 330b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES 331b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 332b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_q.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 333b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 334b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 335b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE 336b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 337b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 338b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 339b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional] 340b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 341b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the 342b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below. 343b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 344b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes 345b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 346b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes 347b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 348b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 349b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber used to represent cycle count for each subroutine 350b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber called) 351b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber where: (cycle count variable) = cycle count for [subroutine 352b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber name] 353b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 354b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 355b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional] 356b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function] 357b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 358b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 359b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 360b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 361b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Hubervoid gainQuant_exit(gainQuantState **state) 362b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{ 363b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (state == NULL || *state == NULL) 364b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return; 365b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 366b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_adapt_exit(&(*state)->adaptSt); 367b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 368b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* deallocate memory */ 369b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber free(*state); 370b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *state = NULL; 371b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 372b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return; 373b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber} 374b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 375b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 376b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 377b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber/* 378b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 379b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION NAME: gainQuant 380b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 381b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber INPUT AND OUTPUT DEFINITIONS 382b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 383b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Inputs: 384b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st -- pointer to gainQuantState 385b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode -- enum Mode -- coder mode 386b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber res -- Word16 array -- LP residual, Q0 387b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exc -- Word16 array -- LTP excitation (unfiltered), Q0 388b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber code -- Word16 array -- CB innovation (unfiltered), Q13 389b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber (unsharpened for MR475) 390b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn -- Word16 array -- Target vector. 391b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn2 -- Word16 array -- Target vector. 392b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber y1 -- Word16 array -- Adaptive codebook. 393b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Y2 -- Word16 array -- Filtered innovative vector. 394b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber g_coeff -- Word16 array -- Correlations <xn y1> <y1 y1> 395b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Compute in G_pitch(). 396b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 397b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber even_subframe -- Word16 -- even subframe indicator flag 398b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gp_limit -- Word16 -- pitch gain limit 399b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_pit -- Word16 Pointer -- Pitch gain. 400b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 401b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Outputs: 402b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st -- pointer to gainQuantState 403b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sf0_gain_pit -- Word16 Pointer -- Pitch gain sf 0. MR475 404b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sf0_gain_cod -- Word16 Pointer -- Code gain sf 0. MR475 405b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_pit -- Word16 Pointer -- Pitch gain. 406b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_cod -- Word16 Pointer -- Code gain. 407b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MR475: gain_* unquantized in even 408b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber subframes, quantized otherwise 409b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 410b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber anap -- Word16 Double Pointer -- Index of quantization 411b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 412b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow -- Flag Pointer -- overflow indicator 413b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 414b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Returns: 415b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Zero 416b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 417b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Global Variables Used: 418b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 419b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 420b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Local Variables Needed: 421b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 422b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 423b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 424b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber FUNCTION DESCRIPTION 425b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 426b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Quantazation of gains 427b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 428b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 429b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REQUIREMENTS 430b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 431b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber None 432b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 433b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 434b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber REFERENCES 435b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 436b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_q.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 437b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 438b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 439b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber PSEUDO-CODE 440b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 441b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 442b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 443b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber RESOURCES USED [optional] 444b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 445b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber When the code is written for a specific target processor the 446b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber the resources used should be documented below. 447b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 448b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber HEAP MEMORY USED: x bytes 449b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 450b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber STACK MEMORY USED: x bytes 451b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 452b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CLOCK CYCLES: (cycle count equation for this function) + (variable 453b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber used to represent cycle count for each subroutine 454b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber called) 455b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber where: (cycle count variable) = cycle count for [subroutine 456b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber name] 457b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 458b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 459b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber CAUTION [optional] 460b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber [State any special notes, constraints or cautions for users of this function] 461b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 462b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber------------------------------------------------------------------------------ 463b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber*/ 464b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 465b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 466b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 467b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Hubervoid gainQuant( 468b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gainQuantState *st, /* i/o : State struct */ 469b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber enum Mode mode, /* i : coder mode */ 470b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 res[], /* i : LP residual, Q0 */ 471b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 exc[], /* i : LTP excitation (unfiltered), Q0 */ 472b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 code[], /* i : CB innovation (unfiltered), Q13 */ 473b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* (unsharpened for MR475) */ 474b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 xn[], /* i : Target vector. */ 475b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 xn2[], /* i : Target vector. */ 476b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 y1[], /* i : Adaptive codebook. */ 477b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 Y2[], /* i : Filtered innovative vector. */ 478b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 g_coeff[], /* i : Correlations <xn y1> <y1 y1> */ 479b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* Compute in G_pitch(). */ 480b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 even_subframe, /* i : even subframe indicator flag */ 481b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 gp_limit, /* i : pitch gain limit */ 482b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 *sf0_gain_pit, /* o : Pitch gain sf 0. MR475 */ 483b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 *sf0_gain_cod, /* o : Code gain sf 0. MR475 */ 484b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 *gain_pit, /* i/o : Pitch gain. */ 485b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 *gain_cod, /* o : Code gain. */ 486b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* MR475: gain_* unquantized in even */ 487b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* subframes, quantized otherwise */ 488b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 **anap, /* o : Index of quantization */ 489b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Flag *pOverflow /* o : overflow indicator */ 490b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber) 491b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber{ 492b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 exp_gcode0; 493b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 frac_gcode0; 494b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 qua_ener_MR122; 495b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 qua_ener; 496b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 frac_coeff[5]; 497b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 exp_coeff[5]; 498b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 exp_en; 499b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 frac_en; 500b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 cod_gain_exp; 501b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 cod_gain_frac; 502b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Word16 temp; 503b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 504b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (mode == MR475) 505b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 506b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (even_subframe != 0) 507b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 508b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* save position in output parameter stream and current 509b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber state of codebook gain predictor */ 510b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->gain_idx_ptr = (*anap)++; 511b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 512b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber// gc_pred_copy(&(st->gc_predSt), &(st->gc_predUnqSt)); 513b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 514b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber memcpy(st->gc_predUnqSt.past_qua_en, 515b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->gc_predSt.past_qua_en, 516b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber NPRED*sizeof(Word16)); 517b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber memcpy(st->gc_predUnqSt.past_qua_en_MR122, 518b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->gc_predSt.past_qua_en_MR122, 519b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber NPRED*sizeof(Word16)); 520b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 521b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 522b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* predict codebook gain (using "unquantized" predictor)*/ 523b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* (note that code[] is unsharpened in MR475) */ 524b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gc_pred( 525b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &(st->gc_predUnqSt), 526b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode, 527b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber code, 528b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &st->sf0_exp_gcode0, 529b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &st->sf0_frac_gcode0, 530b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &exp_en, 531b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &frac_en, 532b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 533b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 534b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* calculate energy coefficients for quantization 535b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber and store them in state structure (will be used 536b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber in next subframe when real quantizer is run) */ 537b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber calc_filt_energies( 538b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode, 539b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn, 540b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn2, 541b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber y1, 542b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Y2, 543b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber g_coeff, 544b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_frac_coeff, 545b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_exp_coeff, 546b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &cod_gain_frac, 547b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &cod_gain_exp, 548b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 549b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 550b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* store optimum codebook gain (Q1) */ 551b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber temp = 552b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber add( 553b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber cod_gain_exp, 554b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 1, 555b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 556b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 557b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *gain_cod = 558b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber shl( 559b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber cod_gain_frac, 560b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber temp, 561b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 562b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 563b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber calc_target_energy( 564b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn, 565b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &st->sf0_exp_target_en, 566b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &st->sf0_frac_target_en, 567b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 568b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 569b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* calculate optimum codebook gain and update 570b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber "unquantized" predictor */ 571b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MR475_update_unq_pred( 572b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &(st->gc_predUnqSt), 573b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_exp_gcode0, 574b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_frac_gcode0, 575b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber cod_gain_exp, 576b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber cod_gain_frac, 577b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 578b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 579b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* the real quantizer is not run here... */ 580b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 581b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else 582b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 583b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* predict codebook gain (using "unquantized" predictor) */ 584b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* (note that code[] is unsharpened in MR475) */ 585b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gc_pred( 586b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &(st->gc_predUnqSt), 587b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode, 588b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber code, 589b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &exp_gcode0, 590b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &frac_gcode0, 591b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &exp_en, 592b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &frac_en, 593b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 594b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 595b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* calculate energy coefficients for quantization */ 596b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber calc_filt_energies( 597b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode, 598b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn, 599b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn2, 600b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber y1, 601b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Y2, 602b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber g_coeff, 603b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_coeff, 604b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_coeff, 605b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &cod_gain_frac, 606b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &cod_gain_exp, 607b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 608b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 609b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber calc_target_energy( 610b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn, 611b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &exp_en, 612b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &frac_en, 613b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 614b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 615b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* run real (4-dim) quantizer and update real gain predictor */ 616b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *st->gain_idx_ptr = 617b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MR475_gain_quant( 618b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &(st->gc_predSt), 619b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_exp_gcode0, 620b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_frac_gcode0, 621b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_exp_coeff, 622b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_frac_coeff, 623b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_exp_target_en, 624b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->sf0_frac_target_en, 625b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber code, 626b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_gcode0, 627b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_gcode0, 628b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_coeff, 629b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_coeff, 630b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_en, 631b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_en, 632b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gp_limit, 633b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sf0_gain_pit, 634b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber sf0_gain_cod, 635b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_pit, 636b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_cod, 637b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 638b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 639b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 640b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else 641b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 642b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /*-------------------------------------------------------------------* 643b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * predict codebook gain and quantize * 644b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * (also compute normalized CB innovation energy for MR795) * 645b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *-------------------------------------------------------------------*/ 646b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gc_pred( 647b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &(st->gc_predSt), 648b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode, 649b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber code, 650b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &exp_gcode0, 651b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &frac_gcode0, 652b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &exp_en, 653b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &frac_en, 654b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 655b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 656b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (mode == MR122) 657b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 658b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *gain_cod = 659b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber G_code( 660b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn2, 661b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Y2, 662b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 663b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 664b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *(*anap)++ = 665b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber q_gain_code( 666b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode, 667b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_gcode0, 668b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_gcode0, 669b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_cod, 670b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &qua_ener_MR122, 671b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &qua_ener, 672b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 673b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 674b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else 675b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 676b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /* calculate energy coefficients for quantization */ 677b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber calc_filt_energies( 678b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode, 679b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn, 680b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber xn2, 681b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber y1, 682b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Y2, 683b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber g_coeff, 684b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_coeff, 685b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_coeff, 686b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &cod_gain_frac, 687b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &cod_gain_exp, 688b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 689b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 690b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber if (mode == MR795) 691b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 692b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber MR795_gain_quant( 693b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber st->adaptSt, 694b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber res, 695b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exc, 696b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber code, 697b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_coeff, 698b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_coeff, 699b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_en, 700b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_en, 701b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_gcode0, 702b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_gcode0, 703b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber L_SUBFR, 704b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber cod_gain_frac, 705b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber cod_gain_exp, 706b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gp_limit, 707b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_pit, 708b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_cod, 709b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &qua_ener_MR122, 710b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &qua_ener, 711b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber anap, 712b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 713b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 714b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber else 715b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber { 716b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *(*anap)++ = 717b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber Qua_gain( 718b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber mode, 719b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_gcode0, 720b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_gcode0, 721b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber frac_coeff, 722b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber exp_coeff, 723b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gp_limit, 724b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_pit, 725b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gain_cod, 726b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &qua_ener_MR122, 727b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &qua_ener, 728b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber pOverflow); 729b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 730b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 731b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 732b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber /*------------------------------------------------------------------* 733b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * update table of past quantized energies * 734b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 735b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * st->past_qua_en(Q10) = 20 * Log10(qua_gain_code) / constant * 736b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * = Log2(qua_gain_code) * 737b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * = qua_ener * 738b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber * constant = 20*Log10(2) * 739b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber *------------------------------------------------------------------*/ 740b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber gc_pred_update( 741b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber &(st->gc_predSt), 742b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber qua_ener_MR122, 743b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber qua_ener); 744b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber } 745b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber 746b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber return; 747b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber} 748