layer3.h
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:2k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* layer3.h
  2.    Declarations for the Layer III decoder object */
  3. #ifndef LAYERIII_H
  4. #define LAYERIII_H
  5. #include "all.h"
  6. #include "l3type.h"
  7. #include "ibitstr.h"
  8. #include "obuffer.h"
  9. #include "bit_res.h"
  10. #include "header.h"
  11. #include "synfilt.h"
  12. #define SSLIMIT 18
  13. #define SBLIMIT 32
  14. /* Size of the table of whole numbers raised to 4/3 power.
  15.    This may be adjusted for performance without any problems. */
  16. #define POW_TABLE_LIMIT 512
  17. class LayerIII_Decoder {
  18. public:
  19. LayerIII_Decoder(Ibitstream *stream0, Header *header0,
  20.                   SynthesisFilter *filtera, SynthesisFilter *filterb,
  21.                     Obuffer *buffer0, enum e_channels which_ch0);
  22.    ~LayerIII_Decoder();
  23.    // Notify decoder that a seek is being made
  24.    void seek_notify();
  25.    // Decode one frame, filling the buffer with the output samples
  26. void decode();
  27. private:
  28. // private data
  29. int32 is_1d[SBLIMIT*SSLIMIT];
  30.    real  ro[2][SBLIMIT][SSLIMIT];
  31.    real  lr[2][SBLIMIT][SSLIMIT];
  32. real out_1d[SBLIMIT*SSLIMIT];
  33.    real  prevblck[2][SBLIMIT*SSLIMIT];
  34.    real  k[2][SBLIMIT*SSLIMIT];
  35.    int32 nonzero[2];
  36. Ibitstream *stream;
  37.    Header *header;
  38.    SynthesisFilter *filter1, *filter2;
  39.    Obuffer *buffer;
  40.    enum e_channels which_channels;
  41.    Bit_Reserve *br;
  42.    III_side_info_t *si;
  43.    III_scalefac_t scalefac;
  44.    uint32 max_gr;
  45.    int32  frame_start;
  46.    int32  part2_start;
  47.    uint32 channels;
  48.    uint32 first_channel;
  49.    uint32 last_channel;
  50.    uint32 sfreq;
  51.    // private member functions
  52. bool get_side_info();
  53. void get_scale_factors(uint32 ch, uint32 gr);
  54.    void get_LSF_scale_data(uint32 ch, uint32 gr);
  55.    void get_LSF_scale_factors(uint32 ch, uint32 gr);
  56.    void huffman_decode(uint32 ch, uint32 gr);
  57.    void i_stereo_k_values(uint32 is_pos, uint32 io_type, uint32 i);
  58. void dequantize_sample(real xr[SBLIMIT][SSLIMIT], uint32 ch, uint32 gr);
  59. void reorder(real xr[SBLIMIT][SSLIMIT], uint32 ch, uint32 gr);
  60. void stereo(uint32 gr);
  61. void antialias(uint32 ch, uint32 gr);
  62. void hybrid(uint32 ch, uint32 gr);
  63.    void do_downmix();
  64. };
  65. #endif