Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

channelheader.h

Go to the documentation of this file.
00001 
00006 #ifndef _CHANNELHEADER_H_
00007 #define _CHANNELHEADER_H_
00008 
00009 #include "mp3_format.h"
00010 #include "bitstream.h"
00011 #include "bitarray.h"
00012 
00019 class ChannelHeader
00020 {
00021   public:
00022     
00030     ChannelHeader(Bitstream &bs) {}
00031     
00037     virtual int Size() const = 0;
00038     
00044     virtual void Write(Bitstream &bs) = 0;
00045     
00051     virtual int DataSize() const = 0;
00052     
00058     virtual int Gain() const = 0;
00059     
00065     virtual void ChangeGain(int n) = 0;
00066     
00072     virtual ~ChannelHeader() {}
00073 };
00074 
00075 template<class T> class ChannelHeaderTemplate : public ChannelHeader
00076 {
00077   public:
00078     ChannelHeaderTemplate<T>(Bitstream &bs) : ChannelHeader(bs), m_ch(bs) {}
00079     int Size() const { return T::size; }
00080     void Write(Bitstream &bs) { m_ch.Write(bs); }
00081     int DataSize() const { return m_ch^T::part2_3_length; }
00082     int Gain() const { return m_ch^T::global_gain; }
00083     void ChangeGain(int n) { m_ch.Set(T::global_gain, (m_ch^T::global_gain) + n); }
00084   
00085   private:
00086     Bitarray<T> m_ch; //Data (bit struct)
00087 };
00088 
00089 extern template class ChannelHeaderTemplate<mp3_channel_header_mpeg1>;
00090 extern template class ChannelHeaderTemplate<mp3_channel_header_mpeg2>;
00091 
00092 typedef ChannelHeaderTemplate<mp3_channel_header_mpeg1> ChannelHeaderMPEG1;
00093 typedef ChannelHeaderTemplate<mp3_channel_header_mpeg2> ChannelHeaderMPEG2;
00094 
00095 #endif //_CHANNELHEADER_H_

Generated on Wed Sep 6 00:17:57 2006 for Kraken by  doxygen 1.4.4