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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * FAAD - Freeware Advanced Audio Decoder
  3.  * Copyright (C) 2001 Menno Bakker
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  * You should have received a copy of the GNU Lesser General Public
  15.  * License along with this library; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  * $Id: bits.h,v 1.7 2002/07/01 20:44:18 wmay Exp $
  19.  */
  20. #ifndef __BITS_H__
  21. #define __BITS_H__ 1
  22. #include "all.h"
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26. typedef struct _bitfile2
  27. {
  28. /* bit input */
  29.   unsigned char *buffer;
  30.   unsigned char *rdptr;
  31.     int m_alignment_offset;
  32.   int incnt;
  33.   int bitcnt;
  34.   int framebits;
  35.   int maxbits;
  36. } bitfile;
  37. void faad_initbits(bitfile *ld, char *buffer, uint32_t buflen);
  38. uint32_t faad_getbits(bitfile *ld, int n);
  39. uint32_t faad_getbits_fast(bitfile *ld, int n);
  40. uint32_t faad_get1bit(bitfile *ld);
  41. uint32_t faad_byte_align(bitfile *ld);
  42. int faad_get_processed_bits(bitfile *ld);
  43.   int faad_bits_done(bitfile *ld);
  44.   void faad_bitdump(bitfile *ld);
  45. extern unsigned int faad_bit_msk[33];
  46. #define _SWAP(a) ((a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3])
  47. static __inline uint32_t faad_showbits(bitfile *ld, int n)
  48. {
  49.         unsigned char *v;
  50. int rbit = 32 - ld->bitcnt;
  51. uint32_t b;
  52. v = ld->rdptr;
  53. b = _SWAP(v);
  54. return ((b & faad_bit_msk[rbit]) >> (rbit-n));
  55. }
  56. static __inline void faad_flushbits(bitfile *ld, int n)
  57. {
  58. ld->bitcnt += n;
  59. if (ld->bitcnt >= 8) {
  60. ld->rdptr += (ld->bitcnt>>3);
  61. ld->bitcnt &= 7;
  62. }
  63. ld->framebits += n;
  64. }
  65. #ifdef __cplusplus
  66. }
  67. #endif
  68. #endif