bitwindow.cpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:1k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /* MPEG/WAVE Sound library
  2.    (C) 1997 by Jung woo-jae */
  3. // Bitwindow.cc
  4. // It's bit reservior for MPEG layer 3
  5. #ifdef HAVE_CONFIG_H
  6. #include "config.h"
  7. #endif
  8. #include "MPEGaudio.h"
  9. #if SDL_BYTEORDER == SDL_LIL_ENDIAN
  10. #define _KEY 0
  11. #else
  12. #define _KEY 3
  13. #endif
  14. int Mpegbitwindow::getbits(int bits)
  15. {
  16.   union
  17.   {
  18.     char store[4];
  19.     int current;
  20.   }u;
  21.   int bi;
  22.   if(!bits)return 0;
  23.   u.current=0;
  24.   bi=(bitindex&7);
  25.   //  u.store[_KEY]=buffer[(bitindex>>3)&(WINDOWSIZE-1)]<<bi;
  26.   u.store[_KEY]=buffer[bitindex>>3]<<bi;
  27.   bi=8-bi;
  28.   bitindex+=bi;
  29.   while(bits)
  30.   {
  31.     if(!bi)
  32.     {
  33.       //      u.store[_KEY]=buffer[(bitindex>>3)&(WINDOWSIZE-1)];
  34.       u.store[_KEY]=buffer[bitindex>>3];
  35.       bitindex+=8;
  36.       bi=8;
  37.     }
  38.     if(bits>=bi)
  39.     {
  40.       u.current<<=bi;
  41.       bits-=bi;
  42.       bi=0;
  43.     }
  44.     else
  45.     {
  46.       u.current<<=bits;
  47.       bi-=bits;
  48.       bits=0;
  49.     }
  50.   }
  51.   bitindex-=bi;
  52.   return (u.current>>8);
  53. }