www.pudn.com > FlashPlayer.zip > bitstream.h


/***************************************************************************\
*
* (C) copyright Fraunhofer - IIS (1997)
* All Rights Reserved
*
* filename: bitstream.h
* project : MPEG Decoder
* author : Martin Sieler
* date : 1997-12-05
* contents/description: generic bitbuffer - HEADER
*
*
\***************************************************************************/

/*
* $Date: 1998/12/18 17:23:43 $
* $Header: /home/cvs/mms/corelibs/mp3dec/bitstream.h,v 1.7 1998/12/18 17:23:43 sir 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();

void Connect(CGioBase *_pGB);

void ResetBitCnt() { m_BitCnt = 0; }
int GetBitCnt() const { return m_BitCnt; }

unsigned int GetBits(unsigned int nBits);
unsigned long Get32Bits();

int Ff(int nBits);
int Rewind(int nBits);
int Seek(int nBits)
{
m_BitCnt += nBits;
m_ValidBits -= nBits;
m_BitNdx = (m_BitNdx+nBits) &amt; (m_nBits-1);
return 1;
}

int GetValidBits() const { return m_ValidBits; }
int GetFree() const;

void SetEof();
int Fill(const unsigned char *pBuf, int cbSize);
int Fill(CBitStream &amt;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_nBits; // size of buffer in bits
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
};

/*-------------------------------------------------------------------------*/
#endif