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: get_pulse_data.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: Put into PV format 31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 1) Change loop to use pointers. 33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 2) Rename to from get_nec_nc to get_pulse_data 34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Changes per code review 36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 1) Fix pathname 37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 2) Read in two fields to save call to getbits 38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 3) Change how pPulseInfo->number_pulse is stored. 39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Placed typecast to Int in places where UInt->Int 41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Replace some instances of getbits to get9_n_lessbits 43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber when the number of bits read is 9. 44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who: Date: 46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INPUT AND OUTPUT DEFINITIONS 49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Inputs: 51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream = pointer to a BITS structure, used by the function getbits 52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber to provide data. Data type pointer to BITS structure 53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseInfo = pointer to pulse data structure to be filled with data 55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber concerning pulses in the frequency domain. 56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Data type pointer to PulseInfo 57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores/Buffers/Pointers Needed: None 59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores/Buffers/Pointers Needed: None 61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Outputs: 63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = return value, zero signifies success, non-zero otherwise. 64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Presently this function only returns a success, error 65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber checking may be added later. 66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Data type Int. 67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pointers and Buffers Modified: 69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseInfo contents are updated with pulse information. Specifically, 71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseInfo->number_pulse with the number of pulses found, and 72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseInfo->pulse_start_sfb is set to the first scale factor band. 73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Then pPulseInfo->pulse_offset and pPulseInfo->pulse_amp are filled 74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber with data. For these array, only the number of pulses defined will be 75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber set, those values beyond the number of pulses will retain their previous 76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber value and should not be read from. 77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Note: The value in pPulseInfo->number_pulse is different by a value of 78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber one from the original ISO code. 79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputBuffer contents are updated to the next location to be read from 81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber the input stream. 82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores Modified: None 84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores Modified: None 86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FUNCTION DESCRIPTION 89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function fills in the pulse data structure with information to be used 91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber later for restoring pulses in the spectrum. 92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REQUIREMENTS 95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function shall not use global or static variables. 97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES 100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (1) ISO/IEC 13818-7:1997 Titled "Information technology - Generic coding 102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of moving pictures and associated audio information - Part 7: Advanced 103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Audio Coding (AAC)", Table 6.17 - Syntax of pulse_data(), 104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber page 15, and section 9.3 "Decoding process", starting on page 41. 105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) MPEG-2 NBC Audio Decoder 108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber "This software module was originally developed by AT&T, Dolby 109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Laboratories, Fraunhofer Gesellschaft IIS in the course of development 110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of the MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7, 14496-1,2 and 111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 3. This software module is an implementation of a part of one or more 112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4 113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Audio standard. ISO/IEC gives users of the MPEG-2 NBC/MPEG-4 Audio 114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber standards free license to this software module or modifications thereof 115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for use in hardware or software products claiming conformance to the 116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio standards. Those intending to use this software 117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module in hardware or software products are advised that this use may 118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber infringe existing patents. The original developer of this software 119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module and his/her company, the subsequent editors and their companies, 120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber and ISO/IEC have no liability for use of this software module or 121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber modifications thereof in an implementation. Copyright is not released 122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for non MPEG-2 NBC/MPEG-4 Audio conforming products.The original 123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber developer retains full right to use the code for his/her own purpose, 124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber assign or donate the code to a third party and to inhibit third party 125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber from using the code for non MPEG-2 NBC/MPEG-4 Audio conforming products. 126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This copyright notice must be included in all copies or derivative 127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber works." 128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Copyright(c)1996. 129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PSEUDO-CODE 132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber status = SUCCESS; 134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CALL getbits(neededBits = LEN_PULSE_NPULSE + LEN_PULSE_ST_SFB, 136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream = pInputStream) 137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING(*pInputStream) 138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING(temp) 139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseInfo->number_pulse = 1 + (temp >> LEN_PULSE_ST_SFB); 141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseInfo->pulse_start_sfb = temp & ((1 << LEN_PULSE_ST_SFB) - 1); 142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseOffset = &pPulseInfo->pulse_offset[0]; 144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseAmp = &pPulseInfo->pulse_amp[0]; 145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FOR (i = PulseInfo->number_pulse; i > 0; i--) 147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CALL getbits(neededBits = LEN_PULSE_POFF + LEN_PULSE_PAMP, 148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream = pInputStream) 149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING(*pInputStream) 150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURNING(temp) 151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *pPulseOffset++ = temp >> LEN_PULSE_PAMP; 153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *pPulseAmp++ = temp & ((1 << LEN_PULSE_PAMP) - 1); 154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber END FOR 155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING (*pInputStream) 157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MODIFYING (*pPulseInfo) 158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RETURN status 160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RESOURCES USED 163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber When the code is written for a specific target processor the 164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber the resources used should be documented below. 165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber STACK USAGE: [stack count for this module] + [variable to represent 167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber stack usage for each subroutine called] 168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [stack usage variable] = stack usage for [subroutine 170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber DATA MEMORY USED: x words 173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PROGRAM MEMORY USED: x words 175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CLOCK CYCLES: [cycle count equation for this module] + [variable 177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber used to represent cycle count for each subroutine 178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber called] 179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [cycle count variable] = cycle count for [subroutine 181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/ 185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES 189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h" 192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "ibstream.h" 193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "s_pulseinfo.h" 194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "s_bits.h" 195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "e_rawbitstreamconst.h" 196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "get_pulse_data.h" 197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; MACROS 201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Define module specific macros here 202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; DEFINES 206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Include all pre-processor statements here. Include conditional 207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; compile variables also. 208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL FUNCTION DEFINITIONS 212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Function Prototype declaration 213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL VARIABLE DEFINITIONS 217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Variable declaration - defined here and used outside this module 218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL FUNCTION REFERENCES 222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare functions defined elsewhere and referenced in this module 223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL VARIABLES REFERENCES 227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare variables used in this module but defined elsewhere 228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; FUNCTION CODE 232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 233dacaa73ae5010b66f4224d70a520945e5b653544Andreas HuberInt get_pulse_data( 234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PulseInfo *pPulseInfo, 235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber BITS *pInputStream) 236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int i; 238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int *pPulseOffset; 239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int *pPulseAmp; 240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int status = SUCCESS; 241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber UInt temp; 242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Read in both field fields at once to save cycles. These are the 245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * original lines of code: 246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * pPulseInfo->number_pulse = getbits(LEN_PULSE_NPULSE, pInputStream); 247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * pPulseInfo->pulse_start_sfb = getbits(LEN_PULSE_ST_SFB, pInputStream); 248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp = 251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber get9_n_lessbits( 252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber LEN_PULSE_NPULSE + LEN_PULSE_ST_SFB, 253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream); 254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseInfo->number_pulse = (Int)(1 + (temp >> LEN_PULSE_ST_SFB)); 256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseInfo->pulse_start_sfb = (Int)(temp & ((1 << LEN_PULSE_ST_SFB) - 1)); 257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseOffset = &pPulseInfo->pulse_offset[0]; 259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pPulseAmp = &pPulseInfo->pulse_amp[0]; 260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This loop needs to count one more than the number read in from 263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * the bitstream - look at reference [1]. 264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (i = pPulseInfo->number_pulse; i > 0; i--) 267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Read in both fields. Original lines: 270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * *pPulseOffset++ = getbits(LEN_PULSE_POFF, pInputStream); 271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * *pPulseAmp++ = getbits(LEN_PULSE_PAMP, pInputStream); 272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber temp = 275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber get9_n_lessbits( 276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber LEN_PULSE_POFF + LEN_PULSE_PAMP, 277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInputStream); 278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *pPulseOffset++ = (Int)(temp >> LEN_PULSE_PAMP); 280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *pPulseAmp++ = (Int)(temp & ((1 << LEN_PULSE_PAMP) - 1)); 282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (status); 285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} 286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 287