1 /* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18 /**************************************************************************************** 19 Portions of this file are derived from the following 3GPP standard: 20 21 3GPP TS 26.073 22 ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec 23 Available from http://www.3gpp.org 24 25 (C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC) 26 Permission to distribute, modify and use this file under the standard license 27 terms listed above has been obtained from the copyright holder. 28 ****************************************************************************************/ 29 /* 30 31 Filename: /audio/gsm_amr/c/src/bits2prm.c 32 33 ------------------------------------------------------------------------------ 34 REVISION HISTORY 35 36 Description: Fixed a typo in the include section. Optimized some lines of 37 code as per review comments. 38 39 Description: Replaced "int" and/or "char" with OSCL defined types. 40 41 Who: Date: 42 Description: 43 44 ------------------------------------------------------------------------------ 45 */ 46 47 /*---------------------------------------------------------------------------- 48 ; INCLUDES 49 ----------------------------------------------------------------------------*/ 50 #include "bits2prm.h" 51 #include "typedef.h" 52 #include "mode.h" 53 #include "bitno_tab.h" 54 55 /*---------------------------------------------------------------------------- 56 ; MACROS 57 ; [Define module specific macros here] 58 ----------------------------------------------------------------------------*/ 59 60 /*---------------------------------------------------------------------------- 61 ; DEFINES 62 ; [Include all pre-processor statements here. Include conditional 63 ; compile variables also.] 64 ----------------------------------------------------------------------------*/ 65 66 /*---------------------------------------------------------------------------- 67 ; LOCAL FUNCTION DEFINITIONS 68 ; [List function prototypes here] 69 ----------------------------------------------------------------------------*/ 70 71 /*---------------------------------------------------------------------------- 72 ; LOCAL VARIABLE DEFINITIONS 73 ; [Variable declaration - defined here and used outside this module] 74 ----------------------------------------------------------------------------*/ 75 76 /* 77 ------------------------------------------------------------------------------ 78 FUNCTION NAME: Bin2int 79 ------------------------------------------------------------------------------ 80 INPUT AND OUTPUT DEFINITIONS 81 82 Inputs: 83 no_of_bits = number of bits associated with value 84 bitstream = pointer to buffer where bits are read 85 86 Outputs: 87 None 88 89 Returns: 90 None 91 92 Global Variables Used: 93 None 94 95 Local Variables Needed: 96 None 97 98 ------------------------------------------------------------------------------ 99 FUNCTION DESCRIPTION 100 101 Function : Bin2int 102 Purpose : Read "no_of_bits" bits from the array bitstream[] 103 and convert to integer. 104 105 ------------------------------------------------------------------------------ 106 REQUIREMENTS 107 108 None 109 110 ------------------------------------------------------------------------------ 111 REFERENCES 112 113 bits2prm.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 114 115 ------------------------------------------------------------------------------ 116 PSEUDO-CODE 117 118 static Word16 Bin2int ( // Reconstructed parameter 119 Word16 no_of_bits, // input : number of bits associated with value 120 Word16 *bitstream // output: address where bits are written 121 ) 122 { 123 Word16 value, i, bit; 124 125 value = 0; 126 for (i = 0; i < no_of_bits; i++) 127 { 128 value = shl (value, 1); 129 bit = *bitstream++; 130 if (sub (bit, BIT_1) == 0) 131 value = add (value, 1); 132 } 133 return (value); 134 } 135 136 ------------------------------------------------------------------------------ 137 RESOURCES USED [optional] 138 139 When the code is written for a specific target processor the 140 the resources used should be documented below. 141 142 HEAP MEMORY USED: x bytes 143 144 STACK MEMORY USED: x bytes 145 146 CLOCK CYCLES: (cycle count equation for this function) + (variable 147 used to represent cycle count for each subroutine 148 called) 149 where: (cycle count variable) = cycle count for [subroutine 150 name] 151 152 ------------------------------------------------------------------------------ 153 CAUTION [optional] 154 [State any special notes, constraints or cautions for users of this function] 155 156 ------------------------------------------------------------------------------ 157 */ 158 159 /*---------------------------------------------------------------------------- 160 ; FUNCTION CODE 161 ----------------------------------------------------------------------------*/ 162 static Word16 Bin2int( /* Reconstructed parameter */ 163 Word16 no_of_bits, /* input : number of bits associated with value */ 164 Word16 *bitstream /* input: address where bits are read from */ 165 ) 166 { 167 Word16 value; 168 Word16 i; 169 Word16 single_bit; 170 171 value = 0; 172 for (i = 0; i < no_of_bits; i++) 173 { 174 value <<= 1; 175 single_bit = *(bitstream++); 176 value |= single_bit; 177 } 178 return (value); 179 } 180 181 182 /* 183 ------------------------------------------------------------------------------ 184 FUNCTION NAME: bits2prm 185 ------------------------------------------------------------------------------ 186 INPUT AND OUTPUT DEFINITIONS 187 188 Inputs: 189 mode = AMR mode of type enum Mode 190 bits[] = pointer to serial bits of type Word16 191 prm[] = pointer to analysis parameters of type Word16 192 193 Outputs: 194 None 195 196 Returns: 197 None 198 199 Global Variables Used: 200 None 201 202 Local Variables Needed: 203 None 204 205 ------------------------------------------------------------------------------ 206 FUNCTION DESCRIPTION 207 208 Function : Bits2prm 209 Purpose : Retrieves the vector of encoder parameters from 210 the received serial bits in a frame. 211 212 ------------------------------------------------------------------------------ 213 REQUIREMENTS 214 215 None 216 217 ------------------------------------------------------------------------------ 218 REFERENCES 219 220 bits2prm.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001 221 222 ------------------------------------------------------------------------------ 223 PSEUDO-CODE 224 225 void Bits2prm ( 226 enum Mode mode, // i : AMR mode 227 Word16 bits[], // i : serial bits (size <= MAX_SERIAL_SIZE) 228 Word16 prm[] // o : analysis parameters (size <= MAX_PRM_SIZE) 229 ) 230 { 231 Word16 i; 232 233 for (i = 0; i < prmno[mode]; i++) 234 { 235 prm[i] = Bin2int (bitno[mode][i], bits); 236 bits += bitno[mode][i]; 237 add(0,0); // account for above pointer update 238 } 239 240 return; 241 } 242 243 ------------------------------------------------------------------------------ 244 RESOURCES USED [optional] 245 246 When the code is written for a specific target processor the 247 the resources used should be documented below. 248 249 HEAP MEMORY USED: x bytes 250 251 STACK MEMORY USED: x bytes 252 253 CLOCK CYCLES: (cycle count equation for this function) + (variable 254 used to represent cycle count for each subroutine 255 called) 256 where: (cycle count variable) = cycle count for [subroutine 257 name] 258 259 ------------------------------------------------------------------------------ 260 CAUTION [optional] 261 [State any special notes, constraints or cautions for users of this function] 262 263 ------------------------------------------------------------------------------ 264 */ 265 266 /*---------------------------------------------------------------------------- 267 ; FUNCTION CODE 268 ----------------------------------------------------------------------------*/ 269 OSCL_EXPORT_REF void Bits2prm( 270 enum Mode mode, /* i : AMR mode */ 271 Word16 bits[], /* i : serial bits (size <= MAX_SERIAL_SIZE) */ 272 Word16 prm[] /* o : analysis parameters (size <= MAX_PRM_SIZE) */ 273 ) 274 { 275 Word16 i; 276 277 for (i = 0; i < prmno[mode]; i++) 278 { 279 prm[i] = Bin2int(bitno[mode][i], bits); 280 bits += bitno[mode][i]; 281 } 282 283 return; 284 } 285 286 287 288 289 290 291 292 293