123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /***************************************************************************\
- *
- * MPEG Layer3-Audio Decoder
- * © 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
|