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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is MPEG4IP.
  13.  * 
  14.  * The Initial Developer of the Original Code is Cisco Systems Inc.
  15.  * Portions created by Cisco Systems Inc. are
  16.  * Copyright (C) Cisco Systems Inc. 2001.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  *              Bill May        wmay@cisco.com
  20.  */
  21. #ifndef __BITSTREAM_H__
  22. #define __BITSTREAM_H__ 1
  23. #include "systems.h"
  24. class CBitstream {
  25.  public:
  26.   CBitstream(void) {};
  27.   CBitstream(const uint8_t *buffer, uint32_t bit_len) {
  28.     init(buffer, bit_len);
  29.   };
  30.   ~CBitstream (void) {};
  31.   void init(const uint8_t *buffer, uint32_t bit_len);
  32.   void init(const char *buffer, uint32_t bit_len) {
  33.     init((const uint8_t *)buffer, (uint32_t)bit_len);
  34.   };
  35.   void init(const char *buffer, int bit_len) {
  36.     init((const uint8_t *)buffer, (uint32_t)bit_len);
  37.   };
  38.   void init(const uint8_t *buffer, int bit_len) {
  39.     init(buffer, (uint32_t)bit_len);
  40.   };
  41.   void init(const char *buffer, unsigned short bit_len) {
  42.     init((const uint8_t *)buffer, (uint32_t)bit_len);
  43.   };
  44.   void init(const uint8_t *buffer, unsigned short bit_len) {
  45.     init(buffer, (uint32_t)bit_len);
  46.   };
  47.   uint32_t GetBits(uint32_t bits);
  48.   int getbits(uint32_t bits, uint32_t *retvalue) {
  49.     try {
  50.       *retvalue = GetBits(bits);
  51.     } catch (...) {
  52.       return -1;
  53.     }
  54.     return 0;
  55.   }
  56.   int peekbits(uint32_t bits, uint32_t *retvalue) {
  57.     int ret;
  58.     bookmark(1);
  59.     ret = getbits(bits, retvalue);
  60.     bookmark(0);
  61.     return (ret);
  62.   }
  63.   uint32_t PeekBits(uint32_t bits) {
  64.     uint32_t ret;
  65.     bookmark(1);
  66.     ret = GetBits(bits);
  67.     bookmark(0);
  68.     return ret;
  69.   }
  70.   void bookmark(int on);
  71.   int bits_remain (void) {
  72.     return m_chDecBufferSize + m_uNumOfBitsInBuffer;
  73.   };
  74.   int byte_align(void);
  75.  private:
  76.   uint32_t m_uNumOfBitsInBuffer;
  77.   const uint8_t *m_chDecBuffer;
  78.   unsigned char m_chDecData;
  79.   uint32_t m_chDecBufferSize;
  80.   int m_bBookmarkOn;
  81.   uint32_t m_uNumOfBitsInBuffer_bookmark;
  82.   const uint8_t *m_chDecBuffer_bookmark;
  83.   uint32_t m_chDecBufferSize_bookmark;
  84. };
  85. #endif