cae.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*************************************************************************
  2. This software module was adopted from MPEG4 VM7.0 text, modified by 
  3. Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation
  4. (date: April, 1997)
  5. and edited by
  6. Yoshihiro Kikuchi (TOSHIBA CORPORATION)
  7. Takeshi Nagai (TOSHIBA CORPORATION)
  8. Toshiaki Watanabe (TOSHIBA CORPORATION)
  9. Noboru Yamaguchi (TOSHIBA CORPORATION)
  10. in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). 
  11. This software module is an implementation of a part of one or more MPEG-4 Video tools 
  12. as specified by the MPEG-4 Video. 
  13. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications 
  14. thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 
  15. Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents. 
  16. The original developer of this software module and his/her company, 
  17. the subsequent editors and their companies, 
  18. and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation. 
  19. Copyright is not released for non MPEG-4 Video conforming products. 
  20. Microsoft retains full right to use the code for his/her own purpose, 
  21. assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products. 
  22. This copyright notice must be included in all copies or derivative works. 
  23. Copyright (c) 1996, 1997.
  24. Module Name:
  25. cae.h
  26. Abstract:
  27. Context-based arithmatic coding
  28. Revision History:
  29. *************************************************************************/
  30. typedef unsigned short int USInt;
  31. #define CODE_BITS 32
  32. #define  HALF ((unsigned) 1 << (CODE_BITS-1))
  33. #define  QUARTER (1 << (CODE_BITS-2))
  34. #define ArCodec arcodec
  35. #define ArCoder arcodec
  36. #define ArDecoder arcodec
  37. Class COutBitStream;
  38. Class CInBitStream;
  39. Class arcodec {
  40. public:
  41. arcodec::~arcodec () {};
  42. arcodec::arcodec () {};
  43. UInt L; /* lower bound */
  44. UInt R; /* code range */
  45. UInt V; /* current code value */
  46. UInt arpipe;
  47. Int bits_to_follow; /* follow bit count */
  48. Int first_bit;
  49. Int nzeros;
  50. Int nonzero;
  51. Int nzerosf;
  52. Int extrabits;
  53. Int nBits;
  54. };
  55. #define MAXHEADING 8
  56. #define MAXMIDDLE 16
  57. #define MAXTRAILING 8
  58. // Added for error resilient mode by Toshiba(1997-11-14)
  59. #define MAXHEADING_ERR 3
  60. #define MAXMIDDLE_ERR 10
  61. #define MAXTRAILING_ERR 2
  62. // End Toshiba(1997-11-14)
  63. API Void StartArCoder(ArCoder *coder);
  64. API Int  StopArCoder(ArCoder *coder, COutBitStream *bitstream);
  65. API Void BitByItself(Int bit, ArCoder *coder, COutBitStream *bitstream);
  66. API Void BitPlusFollow(Int bit, ArCoder *coder, COutBitStream *bitstream);
  67. API Void ArCodeSymbol(Int bit, USInt c0, ArCoder *coder, COutBitStream *bitstream);
  68. API Void ENCODE_RENORMALISE(ArCoder *coder, COutBitStream *bitstream);
  69. API Void StartArDecoder(ArDecoder *decoder, CInBitStream *bitstream);
  70. API Void StopArDecoder(ArDecoder *decoder, CInBitStream *bitstream);
  71. API Void AddNextInputBit(CInBitStream *bitstream, ArDecoder *decoder);
  72. API Int  ArDecodeSymbol(USInt c0, ArDecoder *decoder, CInBitStream *bitstream);
  73. API Void DECODE_RENORMALISE(ArDecoder *decoder,  CInBitStream *bitstream);
  74. API Void  BitstreamFlushBits(CInBitStream *bitstream, Int nBits);