1250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/* ------------------------------------------------------------------ 2250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Copyright (C) 1998-2009 PacketVideo 3250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 4250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * you may not use this file except in compliance with the License. 6250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * You may obtain a copy of the License at 7250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 8250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 10250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Unless required by applicable law or agreed to in writing, software 11250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * express or implied. 14250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * See the License for the specific language governing permissions 15250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * and limitations under the License. 16250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * ------------------------------------------------------------------- 17250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber */ 18250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/* 19250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 20250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 21250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber PacketVideo Corp. 22250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber MP3 Decoder Library 23250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 24250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Filename: pvmp3_getbits.cpp 25250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 26250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 27250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Date: 09/21/2007 28250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 29250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 30250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REVISION HISTORY 31250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 32250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 33250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Description: 34250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 35250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 36250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber INPUT AND OUTPUT DEFINITIONS 37250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 38250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Inputs: 39250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 40250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber tmp3Bits *inputStream, structure holding the input stream parameters 41250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 neededBits number of bits to read from the bit stream 42250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 43250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Outputs: 44250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 45250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber word parsed from teh bitstream, with size neededBits-bits, 46250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 47250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 48250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber FUNCTION DESCRIPTION 49250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 50250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 51250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 52250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REQUIREMENTS 53250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 54250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 55250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 56250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REFERENCES 57250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996) 58250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension 59250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 60250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 61250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 62250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber PSEUDO-CODE 63250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 64250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 65250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber*/ 66250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 67250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 68250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; INCLUDES 69250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 70250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pvmp3_getbits.h" 71250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 72250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 73250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; MACROS 74250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Define module specific macros here 75250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 76250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 77250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 78250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 79250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; DEFINES 80250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Include all pre-processor statements here. Include conditional 81250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; compile variables also. 82250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 83250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 84250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 85250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 86250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; LOCAL FUNCTION DEFINITIONS 87250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Function Prototype declaration 88250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 89250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 90250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 91250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 92250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Variable declaration - defined here and used outside this module 93250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 94250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 95250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 96250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; EXTERNAL FUNCTION REFERENCES 97250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Declare functions defined elsewhere and referenced in this module 98250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 99250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 100250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 101250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 102250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Declare variables used in this module but defined elsewhere 103250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 104250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 105250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 106250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 107250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; FUNCTION CODE 108250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 109250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 110250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberuint32 getNbits(tmp3Bits *ptBitStream, 111250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 neededBits) /* number of bits to read from the bitstream (up to 25) */ 112250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 113250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 114250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 offset; 115250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 bitIndex; 116250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 Elem; /* Needs to be same type as pInput->pBuffer */ 117250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 Elem1; 118250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 Elem2; 119250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 Elem3; 120250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 returnValue = 0; 121250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 122250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber if (!neededBits) 123250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 124250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (returnValue); 125250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 126250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 127250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber offset = (ptBitStream->usedBits) >> INBUF_ARRAY_INDEX_SHIFT; 128250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 129250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Elem = *(ptBitStream->pBuffer + module(offset , BUFSIZE)); 130250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Elem1 = *(ptBitStream->pBuffer + module(offset + 1, BUFSIZE)); 131250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Elem2 = *(ptBitStream->pBuffer + module(offset + 2, BUFSIZE)); 132250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Elem3 = *(ptBitStream->pBuffer + module(offset + 3, BUFSIZE)); 133250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 134250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 135250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber returnValue = (((uint32)(Elem)) << 24) | 136250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber (((uint32)(Elem1)) << 16) | 137250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber (((uint32)(Elem2)) << 8) | 138250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber ((uint32)(Elem3)); 139250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 140250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* Remove extra high bits by shifting up */ 141250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber bitIndex = module(ptBitStream->usedBits, INBUF_BIT_WIDTH); 142250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 143250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* This line is faster than to mask off the high bits. */ 144250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber returnValue <<= bitIndex; 145250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 146250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* Move the field down. */ 147250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber returnValue >>= (32 - neededBits); 148250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 149250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber ptBitStream->usedBits += neededBits; 150250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 151250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (returnValue); 152250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 153250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 154250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 155250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; FUNCTION CODE 156250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 157250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 158250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberuint16 getUpTo9bits(tmp3Bits *ptBitStream, 159250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 neededBits) /* number of bits to read from the bit stream 2 to 9 */ 160250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 161250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 162250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 offset; 163250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 bitIndex; 164250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 Elem; /* Needs to be same type as pInput->pBuffer */ 165250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 Elem1; 166250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint16 returnValue; 167250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 168250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber offset = (ptBitStream->usedBits) >> INBUF_ARRAY_INDEX_SHIFT; 169250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 170250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Elem = *(ptBitStream->pBuffer + module(offset , BUFSIZE)); 171250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Elem1 = *(ptBitStream->pBuffer + module(offset + 1, BUFSIZE)); 172250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 173250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 174250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber returnValue = (((uint16)(Elem)) << 8) | 175250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber ((uint16)(Elem1)); 176250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 177250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* Remove extra high bits by shifting up */ 178250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber bitIndex = module(ptBitStream->usedBits, INBUF_BIT_WIDTH); 179250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 180250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber ptBitStream->usedBits += neededBits; 181250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* This line is faster than to mask off the high bits. */ 182250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber returnValue = (returnValue << (bitIndex)); 183250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 184250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* Move the field down. */ 185250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 186250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (uint16)(returnValue >> (16 - neededBits)); 187250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 188250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 189250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 190250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 191250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; FUNCTION CODE 192250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 193250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 194250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberuint32 getUpTo17bits(tmp3Bits *ptBitStream, 195250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 neededBits) /* number of bits to read from the bit stream 2 to 8 */ 196250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 197250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 198250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 offset; 199250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 bitIndex; 200250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 Elem; /* Needs to be same type as pInput->pBuffer */ 201250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 Elem1; 202250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 Elem2; 203250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 returnValue; 204250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 205250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber offset = (ptBitStream->usedBits) >> INBUF_ARRAY_INDEX_SHIFT; 206250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 207250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Elem = *(ptBitStream->pBuffer + module(offset , BUFSIZE)); 208250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Elem1 = *(ptBitStream->pBuffer + module(offset + 1, BUFSIZE)); 209250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Elem2 = *(ptBitStream->pBuffer + module(offset + 2, BUFSIZE)); 210250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 211250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 212250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber returnValue = (((uint32)(Elem)) << 16) | 213250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber (((uint32)(Elem1)) << 8) | 214250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber ((uint32)(Elem2)); 215250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 216250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* Remove extra high bits by shifting up */ 217250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber bitIndex = module(ptBitStream->usedBits, INBUF_BIT_WIDTH); 218250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 219250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber ptBitStream->usedBits += neededBits; 220250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* This line is faster than to mask off the high bits. */ 221250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber returnValue = 0xFFFFFF & (returnValue << (bitIndex)); 222250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 223250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* Move the field down. */ 224250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 225250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (uint32)(returnValue >> (24 - neededBits)); 226250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 227250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 228250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 229250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 230250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; FUNCTION CODE 231250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 232250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 233250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberuint8 get1bit(tmp3Bits *ptBitStream) /* number of bits to read from the bit stream */ 234250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 235250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 236250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 offset; 237250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint32 bitIndex; 238250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber uint8 returnValue; 239250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 240250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber offset = (ptBitStream->usedBits) >> INBUF_ARRAY_INDEX_SHIFT; 241250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 242250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber returnValue = *(ptBitStream->pBuffer + module(offset , BUFSIZE)); 243250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 244250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* Remove extra high bits by shifting up */ 245250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber bitIndex = module(ptBitStream->usedBits, INBUF_BIT_WIDTH); 246250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber ptBitStream->usedBits++; 247250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 248250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber /* This line is faster than to mask off the high bits. */ 249250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber returnValue = (returnValue << (bitIndex)); 250250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 251250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (uint8)(returnValue >> 7); 252250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 253250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 254250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 255250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 256250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 257250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 258