header.hh
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:2k
源码类别:

DVD

开发平台:

Unix_Linux

  1. #ifndef HEADER_H
  2. #define HEADER_H
  3. #ifdef __GNUG__
  4. #pragma interface
  5. #endif
  6. enum e_mode { stereo, joint_stereo, dual_channel, single_channel  };
  7. enum e_sample_frequency { fourtyfour_point_one, fourtyeight, thirtytwo };
  8. // Class for extraction information from a frame header:
  9. class Header {
  10.   static const uint32 frequencies[3];
  11.   uint32 h_layer, h_protection_bit, h_bitrate_index,
  12.  h_padding_bit, h_mode_extension;
  13.   e_mode h_mode;
  14.   e_sample_frequency h_sample_frequency;
  15.   uint32 h_number_of_subbands, h_intensity_stereo_bound;
  16.   bool h_copyright, h_original;
  17.   Crc16 *crc;
  18.   uint16 checksum;
  19.   uint32 calculate_framesize ();
  20.  public:
  21. Header (void) { crc = (Crc16 *)0; }
  22.        ~Header (void) { if (crc) delete crc; }
  23.   int read_header (AudioStream *, Crc16 **);
  24. // read a 32-bit header from the bitstream
  25.   // functions to query header contents:
  26.   uint32 layer (void) { return h_layer; };
  27.   uint32 bitrate_index (void) { return h_bitrate_index; };
  28.   e_sample_frequency sample_frequency (void) { return h_sample_frequency; };
  29.   uint32 frequency (void) { return frequencies[h_sample_frequency]; }
  30.   static uint32 frequency (e_sample_frequency rate) { return frequencies[rate]; }
  31.   e_mode mode (void) { return h_mode; };
  32.   bool checksums(void){ return (!h_protection_bit) ? True : False; }
  33.   bool copyright(void){ return h_copyright; }
  34.   bool original(void){ return h_original; }
  35.   bool checksum_ok(void){ return (checksum==crc->checksum()) ? True : False; }
  36. // compares computed checksum with stream checksum
  37.   // functions which return header informations as strings:
  38.   const char * layer_string (void);
  39.   const char * bitrate_string (void);
  40.   const char * sample_frequency_string (void);
  41.   const char * mode_string (void);
  42.   uint32 number_of_subbands (void) { return h_number_of_subbands; };
  43. // returns the number of subbands in the current frame
  44.   uint32 intensity_stereo_bound (void) {return h_intensity_stereo_bound; };
  45. // (Layer II joint stereo only)
  46. // returns the number of subbands which are in stereo mode,
  47. // subbands above that limit are in intensity stereo mode
  48. };
  49. #endif