bitstrm.hpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:7k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*************************************************************************
  2. This software module was originally developed by 
  3. Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation
  4. Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation
  5. Bruce Lin (blin@microsoft.com), Microsoft Corporation
  6. Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation
  7. (date: March, 1996)
  8. and also edited by
  9. Yoshihiro Kikuchi (TOSHIBA CORPORATION)
  10. Takeshi Nagai (TOSHIBA CORPORATION)
  11. Toshiaki Watanabe (TOSHIBA CORPORATION)
  12. Noboru Yamaguchi (TOSHIBA CORPORATION)
  13. in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). 
  14. This software module is an implementation of a part of one or more MPEG-4 Video tools 
  15. as specified by the MPEG-4 Video. 
  16. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications 
  17. thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 
  18. Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents. 
  19. The original developer of this software module and his/her company, 
  20. the subsequent editors and their companies, 
  21. and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation. 
  22. Copyright is not released for non MPEG-4 Video conforming products. 
  23. Microsoft retains full right to use the code for his/her own purpose, 
  24. assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products. 
  25. This copyright notice must be included in all copies or derivative works. 
  26. Copyright (c) 1996, 1997.
  27. Module Name:
  28. bitstrm.hpp
  29. Abstract:
  30. Classes for bitstream I/O.
  31. Revision History:
  32. *************************************************************************/
  33. #ifndef _BITSTREAM_HPP_
  34. #define _BITSTREAM_HPP_
  35. #include "inbits.h"
  36. class istream;
  37. class ostream;
  38. Class CIOBitStream
  39. {
  40. public:
  41. // Operations
  42.     Int getPosition () {return m_iBitPosition;}//get current bit position within current byte
  43.     Int getCounter () {return m_lCounter;}//get counter of processed bits
  44.     Void getCounter (Int lCounter) {m_lCounter = lCounter;}//set counter of processed bits
  45. protected:
  46.     Int m_lCounter;
  47.     Int m_iBitPosition;
  48.     UInt m_iBuffer;
  49.     CIOBitStream () {m_iBitPosition=0; m_iBuffer=0; m_lCounter=0;}
  50. };
  51. #if 0
  52. Class CInBitStream : public CIOBitStream
  53. {
  54. public:
  55. // Constructors
  56.     CInBitStream () {m_bBookmarkOn = FALSE; m_chDecBuffer = 0; m_uNumOfBitsInBuffer = 0;}//create unattached bitstream    
  57.     CInBitStream (CInByteStreamBase *inStream, Int iBitPosition = 0)//create bitstream and attach to inStream
  58.             {m_bBookmarkOn = FALSE; attach (inStream, iBitPosition); m_chDecBuffer = 0; m_uNumOfBitsInBuffer = 0;}
  59. // Attributes
  60. Int eof () const;//is EOF
  61. // Operations
  62.     UInt getBits (UInt numBits);//return bits from the stream
  63.     Int peekBits (const UInt numBits); //peek bits from the stream
  64. Int peekOneBit(const UInt numBits) const; //peek one bit as far ahead as needed
  65. Int peekBitsTillByteAlign (Int& nBitsToPeek); //peek 1-8 bits until the next byte alignment
  66. // Modified for Error Resilient Mode By Toshiba(1997-11-14)
  67.     Int peekBitsFromByteAlign (Int numBits) const; //peek from the stream at byte boundary
  68.     //Int peekBitsFromByteAlign (UInt numBits) const; //peek from the stream at byte boundary
  69. // End Toshiba(1997-11-14)
  70.     Void getBits (Char *pBits, Int lNOfBits);//get bits and write to the buffer
  71.     Void attach (CInByteStreamBase *inStream, Int iBitPosition = 0);//attach to the inStream
  72. Void flush (Int nExtraBits = 0);
  73. Void setBookmark ();
  74. Void gotoBookmark ();
  75. Void bookmark (Bool bSet);
  76. protected:
  77.     CInByteStreamBase *m_pInStream;
  78.     Char getBitsC (Int iNOfBits);
  79. UInt m_uNumOfBitsInBuffer;
  80. Char m_chDecBuffer;
  81. Bool m_bBookmarkOn;
  82. UInt m_uNumOfBitsInBuffer_bookmark;
  83. Char m_chDecBuffer_bookmark;
  84.     Int m_lCounter_bookmark;
  85.     Int m_iBitPosition_bookmark;
  86.     UInt m_iBuffer_bookmark;
  87.     Int m_bookmark_eofstate;
  88. };
  89. #endif
  90. Class COutBitStream : public CIOBitStream
  91. {
  92. public:
  93. // Constructors
  94. COutBitStream (){m_chEncBuffer = 0; m_uEncNumEmptyBits = 8;}//create unattached bitstream
  95. COutBitStream (Char* pchBuffer, Int iBitPosition = 0, ostream * pstrmTrace = NULL); //create bitstream and attach to outStream
  96. // attributes
  97. Char* str () const {return m_pchBuffer;}
  98. UInt pcount () const {return m_iBuffer;}
  99. // Operations
  100. Void putBits (Int data, UInt numBits, const Char* rgchSymbolName = NULL);//put bits into the stream
  101. Void putBits (Char *pBits, Int lNOfBits);//but bits from the array into the stream
  102. Void putBitStream(COutBitStream &cStrm); //put another bitstream into this one
  103. Void reset ();
  104. Void resetAll ();
  105. Void setBookmark ();
  106. Void gotoBookmark ();
  107. Int  flush ();//flush remaing bits in the COutBitStream into the attached ostream
  108. Void trace (const Char* rgchSymbolName);//dump a string into the trace stream
  109. Void trace (Int iValue, const Char* rgchSymbolName);//dump a variable into the trace stream
  110. Void trace (UInt iValue, const Char* rgchSymbolName);//dump a variable into the trace stream
  111. Void trace (Float fltValue, const Char* rgchSymbolName);
  112. #ifndef __DOUBLE_PRECISION_
  113. Void trace (Double dblValue, const Char* rgchSymbolName);
  114. #endif // __DOUBLE_PRECISION_
  115. Void trace (const CMotionVector& mvValue, const Char* rgchSymbolName);
  116. Void trace (const CVector2D& vctValue, const Char* rgchSymbolName);
  117. Void trace (const CSite& stValue, const Char* rgchSymbolName);
  118. Void trace (const CFloatImage* pfi, const Char* rgchSymbolName, CRct rct = CRct ());//dump a variable into the trace stream
  119. Void trace (const Float* rgflt, UInt cElem, const Char* rgchSymbolName);//dump a variable into the trace stream
  120. Void trace (const Int* rgi, UInt cElem, const Char* rgchSymbolName);//dump a variable into the trace stream
  121. Void trace (const PixelC* rgpxlc, Int cCol, Int cRow, const Char* rgchSymbolName); //this is for tracing shape buffers
  122. // Added for Data Partitioning mode by Toshiba(1998-1-16)
  123. Void SetDontSendBits(const Bool bDontSendBits) {m_bDontSendBits = bDontSendBits;}
  124. Bool GetDontSendBits() {return m_bDontSendBits;}
  125. // End Toshiba(1998-1-16)
  126. protected:
  127. Char* m_pchBuffer;
  128. Char* m_pchBufferRun;
  129. ostream* m_pstrmTrace; //stream for trace file
  130.     Void putBitsC (Char cBits, Int iNOfBits);
  131. Char m_chEncBuffer;
  132. UInt m_uEncNumEmptyBits;
  133. Void bookmark (Bool bSet);
  134. // Added for Data Partitioning mode by Toshiba(1998-1-16)
  135. Bool m_bDontSendBits;
  136. // End Toshiba(1998-1-16)
  137. };
  138. #endif