12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /***************************************************************************\
- *
- * MPEG Layer3-Audio Decoder
- * © 1997-2006 by Fraunhofer IIS
- * All Rights Reserved
- *
- * filename: huffmandecoder.h
- * project : MPEG Decoder
- * author : Martin Sieler
- * date : 1998-02-08
- * contents/description: HEADER - huffman decoder
- *
- *
- \***************************************************************************/
- /*
- * $Date: 2011/01/21 22:25:58 $
- * $Id: huffmandecoder.h,v 1.4 2011/01/21 22:25:58 audiodsp Exp $
- */
- #ifndef __HUFFMANDECODER_H__
- #define __HUFFMANDECODER_H__
- /* ------------------------ includes --------------------------------------*/
- #include "bitsequence.h"
- #include "huffmanbitobj.h"
- #include "huffmantable.h"
- /*-------------------------- defines --------------------------------------*/
- class CBitStream;
- /*-------------------------------------------------------------------------*/
- //
- // Huffman decoder (helper) class.
- //
- // This object reads and decodes MPEG Layer-3 huffman data.
- //
- class CHuffmanDecoder
- {
- public:
- CHuffmanDecoder();
- virtual ~CHuffmanDecoder();
- int ReadHuffmanCode(CBitStream &Bs,
- int *pIsp,
- const int *pTableSelect,
- const int *pRegionEnd,
- int Count1TableSelect,
- int Part2_3Length);
- protected:
- private:
- int ReadBigValues(CBitStream &Bs,
- int *pIsp,
- const int *pTableSelect,
- const int *pRegionEnd);
- int ReadCount1Area(CBitStream &Bs,
- int *pIsp,
- int Count1TableSelect,
- int Count1Start,
- int Part2_3Length);
- #ifdef _MSC_VER
- // these only have one caller and inlining shows notable improvements in the profiler
- __forceinline void ReadHuffmanDual (CBitStream &Bs, int *pIsp);
- __forceinline void ReadHuffmanDualLin(CBitStream &Bs, int *pIsp);
- __forceinline bool ReadHuffmanQuad (CBitStream &Bs, int *pIsp);
- #else
- void ReadHuffmanDual (CBitStream &Bs, int *pIsp);
- void ReadHuffmanDualLin(CBitStream &Bs, int *pIsp);
- bool ReadHuffmanQuad (CBitStream &Bs, int *pIsp);
- #endif
- CHuffmanTable m_HuffmanTable;
- CHuffmanBitObj m_HuffmanBitObj;
- CBitSequence m_LinBits;
- };
- /*-------------------------------------------------------------------------*/
- #endif
|