mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-18 19:35:46 -04:00
Initial community commit
This commit is contained in:
85
Src/replicant/nsmp3dec/huffmandecoder.h
Normal file
85
Src/replicant/nsmp3dec/huffmandecoder.h
Normal file
@ -0,0 +1,85 @@
|
||||
/***************************************************************************\
|
||||
*
|
||||
* MPEG Layer3-Audio Decoder
|
||||
* <20> 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
|
Reference in New Issue
Block a user