86 lines
2.5 KiB
C++
86 lines
2.5 KiB
C++
/***************************************************************************\
|
|
*
|
|
* 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
|