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_crc.cpp 25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Functions: 27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber getbits_crc 28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber calculate_crc 29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Date: 09/21/2007 31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY 34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description: 37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS 40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubergetbits_crc 42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput 44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber tbits *inputStream, bit stream structure 45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 neededBits, number of bits to read from the bit stream 46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 *crc, memory location holding calculated crc value 47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 crc_enabled flag to enable/disable crc checking 48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INPUT AND OUTPUT DEFINITIONS 51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubercalculate_crc 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberInput 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 data, data vector 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 length, number of element upon the crc will be calculated 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 *crc, memory location holding calculated crc value 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber FUNCTION DESCRIPTION 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REQUIREMENTS 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REFERENCES 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber [1] ISO MPEG Audio Subgroup Software Simulation Group (1996) 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------ 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber PSEUDO-CODE 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber ------------------------------------------------------------------------------ 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/ 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; INCLUDES 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_getbits.h" 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_crc.h" 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; MACROS 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Define module specific macros here 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; DEFINES 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Include all pre-processor statements here. Include conditional 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; compile variables also. 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL FUNCTION DEFINITIONS 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Function Prototype declaration 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Variable declaration - defined here and used outside this module 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL FUNCTION REFERENCES 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare functions defined elsewhere and referenced in this module 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; Declare variables used in this module but defined elsewhere 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberuint32 getbits_crc(tmp3Bits *inputStream, /* bit stream structure */ 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 neededBits, /* number of bits to read from the bit stream */ 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 *crc, 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 crc_enabled) 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 bits = getNbits(inputStream, neededBits); 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber if (crc_enabled) 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber calculate_crc(bits, neededBits, crc); 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return(bits); 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*---------------------------------------------------------------------------- 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber; FUNCTION CODE 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber----------------------------------------------------------------------------*/ 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubervoid calculate_crc(uint32 data, 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 length, 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 *crc) 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 carry; 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber uint32 masking = 1 << length; 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber while ((masking >>= 1)) 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber carry = *crc & 0x8000; 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *crc <<= 1; 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber if (!carry ^ !(data & masking)) 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *crc ^= CRC16_POLYNOMIAL; 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *crc &= 0xffff; 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 162