1d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* ------------------------------------------------------------------ 2d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Copyright (C) 1998-2009 PacketVideo 3d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 4d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * you may not use this file except in compliance with the License. 6d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * You may obtain a copy of the License at 7d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 8d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 10d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Unless required by applicable law or agreed to in writing, software 11d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * express or implied. 14d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * See the License for the specific language governing permissions 15d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * and limitations under the License. 16d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * ------------------------------------------------------------------- 17d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 18d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* 19d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 20d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 21d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PacketVideo Corp. 22d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber MP3 Decoder Library 23d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 24d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Filename: pvmp3_getbits.cpp 25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Date: 09/21/2007 28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY 31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description: 34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS 37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Inputs: 39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tmp3Bits *inputStream, structure holding the input stream parameters 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 neededBits number of bits to read from the bit stream 42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Outputs: 44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber word parsed from teh bitstream, with size neededBits-bits, 46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION 49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996) 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/ 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_getbits.h" 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also. 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module but defined elsewhere 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint32 getNbits(tmp3Bits *ptBitStream, 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 neededBits) /* number of bits to read from the bitstream (up to 25) */ 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 offset; 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 bitIndex; 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 Elem; /* Needs to be same type as pInput->pBuffer */ 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 Elem1; 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 Elem2; 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 Elem3; 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 returnValue = 0; 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber if (!neededBits) 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (returnValue); 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset = (ptBitStream->usedBits) >> INBUF_ARRAY_INDEX_SHIFT; 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Elem = *(ptBitStream->pBuffer + module(offset , BUFSIZE)); 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Elem1 = *(ptBitStream->pBuffer + module(offset + 1, BUFSIZE)); 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Elem2 = *(ptBitStream->pBuffer + module(offset + 2, BUFSIZE)); 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Elem3 = *(ptBitStream->pBuffer + module(offset + 3, BUFSIZE)); 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber returnValue = (((uint32)(Elem)) << 24) | 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber (((uint32)(Elem1)) << 16) | 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber (((uint32)(Elem2)) << 8) | 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ((uint32)(Elem3)); 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* Remove extra high bits by shifting up */ 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber bitIndex = module(ptBitStream->usedBits, INBUF_BIT_WIDTH); 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* This line is faster than to mask off the high bits. */ 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber returnValue <<= bitIndex; 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* Move the field down. */ 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber returnValue >>= (32 - neededBits); 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ptBitStream->usedBits += neededBits; 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (returnValue); 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint16 getUpTo9bits(tmp3Bits *ptBitStream, 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 neededBits) /* number of bits to read from the bit stream 2 to 9 */ 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 offset; 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 bitIndex; 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 Elem; /* Needs to be same type as pInput->pBuffer */ 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 Elem1; 166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint16 returnValue; 167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset = (ptBitStream->usedBits) >> INBUF_ARRAY_INDEX_SHIFT; 169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Elem = *(ptBitStream->pBuffer + module(offset , BUFSIZE)); 171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Elem1 = *(ptBitStream->pBuffer + module(offset + 1, BUFSIZE)); 172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber returnValue = (((uint16)(Elem)) << 8) | 175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ((uint16)(Elem1)); 176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* Remove extra high bits by shifting up */ 178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber bitIndex = module(ptBitStream->usedBits, INBUF_BIT_WIDTH); 179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ptBitStream->usedBits += neededBits; 181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* This line is faster than to mask off the high bits. */ 182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber returnValue = (returnValue << (bitIndex)); 183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* Move the field down. */ 185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (uint16)(returnValue >> (16 - neededBits)); 187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 188d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 189d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 190d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 191d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 192d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 193d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 194d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint32 getUpTo17bits(tmp3Bits *ptBitStream, 195d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 neededBits) /* number of bits to read from the bit stream 2 to 8 */ 196d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 197d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 198d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 offset; 199d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 bitIndex; 200d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 Elem; /* Needs to be same type as pInput->pBuffer */ 201d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 Elem1; 202d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 Elem2; 203d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 returnValue; 204d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 205d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset = (ptBitStream->usedBits) >> INBUF_ARRAY_INDEX_SHIFT; 206d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 207d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Elem = *(ptBitStream->pBuffer + module(offset , BUFSIZE)); 208d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Elem1 = *(ptBitStream->pBuffer + module(offset + 1, BUFSIZE)); 209d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Elem2 = *(ptBitStream->pBuffer + module(offset + 2, BUFSIZE)); 210d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 211d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 212d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber returnValue = (((uint32)(Elem)) << 16) | 213d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber (((uint32)(Elem1)) << 8) | 214d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ((uint32)(Elem2)); 215d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 216d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* Remove extra high bits by shifting up */ 217d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber bitIndex = module(ptBitStream->usedBits, INBUF_BIT_WIDTH); 218d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 219d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ptBitStream->usedBits += neededBits; 220d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* This line is faster than to mask off the high bits. */ 221d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber returnValue = 0xFFFFFF & (returnValue << (bitIndex)); 222d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 223d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* Move the field down. */ 224d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 225d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (uint32)(returnValue >> (24 - neededBits)); 226d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 227d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 228d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 229d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 230d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 231d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 232d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 233d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint8 get1bit(tmp3Bits *ptBitStream) /* number of bits to read from the bit stream */ 234d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 235d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 236d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 offset; 237d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 bitIndex; 238d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint8 returnValue; 239d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 240d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset = (ptBitStream->usedBits) >> INBUF_ARRAY_INDEX_SHIFT; 241d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 242d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber returnValue = *(ptBitStream->pBuffer + module(offset , BUFSIZE)); 243d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 244d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* Remove extra high bits by shifting up */ 245d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber bitIndex = module(ptBitStream->usedBits, INBUF_BIT_WIDTH); 246d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ptBitStream->usedBits++; 247d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 248d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* This line is faster than to mask off the high bits. */ 249d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber returnValue = (returnValue << (bitIndex)); 250d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 251d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (uint8)(returnValue >> 7); 252d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 253d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 254d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 255d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 256d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 257d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 258