mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-18 15:25:47 -04:00
Initial community commit
This commit is contained in:
103
Src/replicant/nsmp3dec/bitstream.h
Normal file
103
Src/replicant/nsmp3dec/bitstream.h
Normal file
@ -0,0 +1,103 @@
|
||||
/***************************************************************************\
|
||||
*
|
||||
* MPEG Layer3-Audio Decoder
|
||||
* <20> 1997-2006 by Fraunhofer IIS
|
||||
* All Rights Reserved
|
||||
*
|
||||
* filename: bitstream.h
|
||||
* project : MPEG Decoder
|
||||
* author : Martin Sieler
|
||||
* date : 1997-12-05
|
||||
* contents/description: generic bitbuffer - HEADER
|
||||
*
|
||||
*
|
||||
\***************************************************************************/
|
||||
|
||||
/*
|
||||
* $Date: 2011/01/18 18:22:02 $
|
||||
* $Id: bitstream.h,v 1.4 2011/01/18 18:22:02 audiodsp Exp $
|
||||
*/
|
||||
|
||||
#ifndef __BITSTREAM_H__
|
||||
#define __BITSTREAM_H__
|
||||
|
||||
/* ------------------------ includes --------------------------------------*/
|
||||
|
||||
/*-------------------------- defines --------------------------------------*/
|
||||
|
||||
class CGioBase;
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
//
|
||||
// Bitstream input class.
|
||||
//
|
||||
// This class defines the interface that the mp3 decoder object will
|
||||
// read all of its bitstream input data from.
|
||||
//
|
||||
|
||||
class CBitStream
|
||||
{
|
||||
public:
|
||||
|
||||
CBitStream(int cbSize);
|
||||
CBitStream(unsigned char *pBuf, int cbSize, bool fDataValid = false);
|
||||
virtual ~CBitStream();
|
||||
|
||||
virtual void Reset();
|
||||
bool ByteAligned() const { return !(m_BitNdx & 7); }
|
||||
bool ResetOccurred() { return m_ResetOccurred; }
|
||||
void SetResetState(bool state) { m_ResetOccurred = state; }
|
||||
|
||||
void Connect(CGioBase *pGB);
|
||||
|
||||
void ResetBitCnt() { m_BitCnt = 0; }
|
||||
int GetBitCnt() const { return m_BitCnt; }
|
||||
|
||||
unsigned int GetBits(unsigned int nBits); // gets 16 bits or less
|
||||
unsigned int GetBits8(unsigned int nBits); // gets 8 bits or less
|
||||
unsigned int Get1Bit();
|
||||
unsigned long Get32Bits();
|
||||
|
||||
bool Ff(int nBits) { return ( (nBits > 0) ? Seek(nBits) : false); }
|
||||
bool Rewind(int nBits) { return ( (nBits > 0) ? Seek(-nBits) : false); }
|
||||
bool Seek(int nBits)
|
||||
{
|
||||
m_BitCnt += nBits;
|
||||
m_ValidBits -= nBits;
|
||||
m_BitNdx = (m_BitNdx+nBits) & m_bitMask;
|
||||
return true;
|
||||
}
|
||||
|
||||
int GetValidBits() const { return m_ValidBits; }
|
||||
int GetFree() const;
|
||||
|
||||
void SetEof();
|
||||
int Fill(const unsigned char *pBuf, int cbSize);
|
||||
int Fill(CBitStream &Bs, int cbSize);
|
||||
|
||||
protected:
|
||||
|
||||
int Refill();
|
||||
bool IsEof() const;
|
||||
bool IsConnected() const;
|
||||
|
||||
private:
|
||||
|
||||
CGioBase *m_pGB; // I/O object
|
||||
int m_nBytes; // size of buffer in bytes
|
||||
int m_mask;
|
||||
int m_nBits; // size of buffer in bits
|
||||
int m_bitMask;
|
||||
int m_ValidBits; // valid bits in buffer
|
||||
int m_ReadOffset; // where to write next
|
||||
int m_BitCnt; // bit counter
|
||||
int m_BitNdx; // position of next bit in byte
|
||||
bool m_fEof; // indication of input eof
|
||||
unsigned char *m_Buf; // the buffer
|
||||
bool m_fBufferIntern; // did we allocate the buffer ourselves
|
||||
bool m_ResetOccurred; // reset just occurred, only for dynamic buffer used
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
#endif
|
Reference in New Issue
Block a user