/***************************************************************************\ * * MPEG Layer3-Audio Decoder * © 1997-2006 by Fraunhofer IIS * All Rights Reserved * * filename: huffmantable.h * project : MPEG Decoder * author : Martin Sieler * date : 1998-01-05 * contents/description: HEADER - huffman table object * * \***************************************************************************/ /* * $Date: 2011/01/18 23:00:53 $ * $Id: huffmantable.h,v 1.3 2011/01/18 23:00:53 audiodsp Exp $ */ #ifndef __HUFFMANTABLE_H__ #define __HUFFMANTABLE_H__ /* ------------------------ includes --------------------------------------*/ /*-------------------------- defines --------------------------------------*/ #define HUFFMAN_BITS_4 /*-------------------------------------------------------------------------*/ // Huffman tables. // // This object holds the huffman table for ISO/MPEG Layer-3. // typedef struct { const unsigned char length; const unsigned char value; } huffman_entry_t; class CHuffmanTable { public: /*unsigned int nTableIndex; */ CHuffmanTable(); virtual ~CHuffmanTable(); void SetTableIndex(unsigned int _nTableIndex) { nTableIndex = _nTableIndex; } unsigned int GetBitsPerLevel() const { return BITS_PER_LEVEL; } unsigned int GetLinBits() const { return ht[nTableIndex].linbits; } unsigned char GetCode (unsigned int nIndex, unsigned int nValue) const { return (ht[nTableIndex].table[nIndex][nValue] & 0xff); } unsigned char GetLength(unsigned int nIndex, unsigned int nValue) const { return ((ht[nTableIndex].table[nIndex][nValue] >> 8) & 0xff); } bool IsTableValid() const { return (ht[nTableIndex].table ? true:false); } bool IsLengthZero(unsigned int nIndex, unsigned int nValue) const { return ((ht[nTableIndex].table[nIndex][nValue] & 0xff00) == 0); } enum { #if defined HUFFMAN_BITS_2 /* HuffmanBits parallel huffman tables */ BITS_PER_LEVEL = 2, ENTRIES_PER_LEVEL = 4 #elif defined HUFFMAN_BITS_3 BITS_PER_LEVEL = 3, ENTRIES_PER_LEVEL = 8 #elif defined HUFFMAN_BITS_4 /* HuffmanBits parallel huffman tables */ BITS_PER_LEVEL = 4, ENTRIES_PER_LEVEL = 16 #endif }; protected: private: typedef struct { unsigned int linbits; const unsigned short(*table)[ENTRIES_PER_LEVEL]; } huffmantab; static const huffmantab ht[]; unsigned int nTableIndex; }; /*-------------------------------------------------------------------------*/ #endif