1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------ 2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License. 6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at 7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software 11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied. 14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions 15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License. 16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * ------------------------------------------------------------------- 17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* 19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pathname: pulse_nc.c 21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY 24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modified from original shareware code 26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modified to pass variables by reference to eliminate use 28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of global variables. 29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modified to bring code in-line with PV standards. 31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Pass in max as input argument. 33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Went back to the if-statement to check for max. 35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who: Date: 37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INPUT AND OUTPUT DEFINITIONS 41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Inputs: 43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coef[] = Array of quantized spectral coefficents. 44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (Int []) 45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseInfo = Pointer to structure which contains noiseless 47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber encoding info, includes information about the pulse data, 48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pulse amplitude, etc. 49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (const PulseInfo *) 50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pLongFrameInfo = Pointer to structure that holds information about 52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber each group. (long block flag, number of windows, 53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber scalefactor bands per group, etc.) 54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Variable is named (pLongFrameInfo) because this function 56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber is only used for LONG windows. 57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (FrameInfo *) 58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber max = Pointer to the maximum value of coef[] 59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores/Buffers/Pointers Needed: 61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores/Buffers/Pointers Needed: 64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Outputs: 67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pointers and Buffers Modified: 70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coef[] = coefficient contents are modified by the encoded pulse 71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores Modified: 73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores Modified: 75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FUNCTION DESCRIPTION 78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function adds pulses to defined ranges of coefficients in the window, 80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for the case of LONG windows. The pulses are unsigned, so 81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber negative coefficients subtract the pulse, and positive coefficients add it. 82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (The ampltiude of the coefficient is always increased by the pulse) 83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber A maximum of 4 coefficients may be modified by a pulse, and these 85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coefficients must all occur in the same scalefactor band. 86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber The number of pulse-encoded coefficients to be processed by this function 88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber is communicated to this function via pPulseInfo->number_pulse 89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This value is equal to the actual number of pulses - 1. 91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (e.g if pPulseInfo->number_pulse == 0, one pulse is assumed) 92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function must not be called if no pulse encoded data exists. 93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber The function assumes that at least one pulse exists. 94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REQUIREMENTS 96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This module shall correctly add transmitted pulse(s) to the correct 98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coefficients in a LONG window. 99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES 102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (1) ISO/IEC 14496-3:1999(E) 103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Part 3 104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Subpart 4.6.3.3 Decoding Process 105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) MPEG-2 NBC Audio Decoder 107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber "This software module was originally developed by AT&T, Dolby 108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Laboratories, Fraunhofer Gesellschaft IIS in the course of development 109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of the MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7, 14496-1,2 and 110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 3. This software module is an implementation of a part of one or more 111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4 112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Audio standard. ISO/IEC gives users of the MPEG-2 NBC/MPEG-4 Audio 113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber standards free license to this software module or modifications thereof 114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for use in hardware or software products claiming conformance to the 115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio standards. Those intending to use this software 116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module in hardware or software products are advised that this use may 117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber infringe existing patents. The original developer of this software 118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module and his/her company, the subsequent editors and their companies, 119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber and ISO/IEC have no liability for use of this software module or 120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber modifications thereof in an implementation. Copyright is not released 121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for non MPEG-2 NBC/MPEG-4 Audio conforming products.The original 122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber developer retains full right to use the code for his/her own purpose, 123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber assign or donate the code to a third party and to inhibit third party 124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber from using the code for non MPEG-2 NBC/MPEG-4 Audio conforming products. 125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This copyright notice must be included in all copies or derivative 126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber works." 127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Copyright(c)1996. 128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PSEUDO-CODE 131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber index = pLongFrameInfo->win_sfb_top[0][pPulseInfo->pulse_start_sfb]; 133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseOffset = &(pPulseInfo->pulse_offset[0]); 135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseAmp = &(pPulseInfo->pulse_amp[0]); 137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoef = &(Coef[index]); 139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FOR (index = pPulseInfo->number_pulse; index >= 0; index--) 141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoef = pCoef + *(pPulseOffset); 143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseOffset = pPulseOffset + 1; 144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber IF (*pCoef > 0) 146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pCoef) = *(pCoef) + *(pPulseAmp); 147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseAmp = pPulseAmp + 1; 148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ELSE 149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *(pCoef) = *(pCoef) - *(pPulseAmp); 150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseAmp = pPulseAmp + 1; 151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDIF 152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDFOR 154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RESOURCES USED 157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber When the code is written for a specific target processor the 158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber the resources used should be documented below. 159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber STACK USAGE: [stack count for this module] + [variable to represent 161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber stack usage for each subroutine called] 162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [stack usage variable] = stack usage for [subroutine 164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber DATA MEMORY USED: x words 167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PROGRAM MEMORY USED: x words 169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CLOCK CYCLES: [cycle count equation for this module] + [variable 171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber used to represent cycle count for each subroutine 172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber called] 173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [cycle count variable] = cycle count for [subroutine 175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/ 179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES 183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h" 185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "s_frameinfo.h" 186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "s_pulseinfo.h" 187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pulse_nc.h" 188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; MACROS 191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Define module specific macros here 192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*--------------------------------------------------------------------------- 195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; DEFINES 196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Include all pre-processor statements here. Include conditional 197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; compile variables also. 198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL FUNCTION DEFINITIONS 202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Function Prototype declaration 203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Variable declaration - defined here and used outside this module 208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL FUNCTION REFERENCES 212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare functions defined elsewhere and referenced in this module 213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare variables used in this module but defined elsewhere 218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; FUNCTION CODE 222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid pulse_nc( 225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 coef[], 226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const PulseInfo *pPulseInfo, 227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const FrameInfo *pLongFrameInfo, 228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int *max) 229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int index; 231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 *pCoef; 233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int temp; 234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int *pPulseOffset; 236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber const Int *pPulseAmp; 237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*--- Find the scalefactor band where pulse-encoded data starts ---*/ 239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (pPulseInfo->pulse_start_sfb > 0) 241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber index = pLongFrameInfo->win_sfb_top[0][pPulseInfo->pulse_start_sfb - 1]; 243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber else 245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber index = 0; 247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*------------------------------------------------------------------------- 250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Each pulse index is stored as an offset from the previous pulse 251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Example - here we have a sfb that is 20 coefficients in length: 253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [0][1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17][18][19] 255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber [ ][ ][ ][ ][ ][P][P][ ][ ][ ][ ][ ][ ][ ][ ][ P][ ][ ][ ][ P] 256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber The array pointed to by pPulseOffset == [5][1][9][4] 258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseAmp is of the same length as pPulseOffset, and contains 260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber an individual pulse amplitude for each coefficient. 261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber --------------------------------------------------------------------------*/ 262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoef = &(coef[index]); 264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseOffset = &(pPulseInfo->pulse_offset[0]); 266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseAmp = &(pPulseInfo->pulse_amp[0]); 268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (index = pPulseInfo->number_pulse; index > 0; index--) 270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pCoef += *pPulseOffset++; 272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp = *pCoef; 274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (temp > 0) 276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp += *(pPulseAmp++); 278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *pCoef = (Int16)temp; 279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (temp > *max) 280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *max = temp; 282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber else 285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp -= *(pPulseAmp++); 287dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *pCoef = (Int16)temp; 288dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (-temp > *max) 289dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 290dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *max = -temp; 291dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 292dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 293dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 294dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* for() */ 295dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 296dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return; 297dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 298dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} /* pulse_nc */ 299