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

dataheader.h

Go to the documentation of this file.
00001 
00006 #ifndef _DATAHEADER_H_
00007 #define _DATAHEADER_H_
00008 
00009 #include "mp3_format.h"
00010 #include "bitarray.h"
00011 
00018 class DataHeader
00019 {
00020   public:
00021     
00029     DataHeader(Bitstream &bs) {}
00030    
00036     virtual int Size() const = 0;
00037     
00043     virtual void Write(Bitstream &bs) = 0;
00044     
00052     virtual int DataBegin() const = 0;
00053     
00059     virtual int MaxDataBegin() const = 0;
00060     
00066     virtual void SetDataBegin(int databegin) = 0;
00067 
00073     virtual ~DataHeader() {}
00074 };
00075 
00076 template<class T> class DataHeaderTemplate : public DataHeader
00077 {
00078   public:
00079     DataHeaderTemplate<T>(Bitstream &bs) : DataHeader(bs), m_dh(bs) {}
00080     int Size() const { return T::size; }
00081     void Write(Bitstream &bs) { m_dh.Write(bs); }
00082     int DataBegin() const { return m_dh^T::main_data_begin; }
00083     int MaxDataBegin() const { return m_dh.Max(T::main_data_begin); }
00084     void SetDataBegin(int databegin) { m_dh.Set(T::main_data_begin, databegin); }
00085   
00086   private:
00087     Bitarray<T> m_dh; //Data (bit struct)
00088 };
00089 
00090 extern template class DataHeaderTemplate<mp3_data_header_mpeg1_1ch>;
00091 extern template class DataHeaderTemplate<mp3_data_header_mpeg1_2ch>;
00092 extern template class DataHeaderTemplate<mp3_data_header_mpeg2_1ch>;
00093 extern template class DataHeaderTemplate<mp3_data_header_mpeg2_2ch>;
00094 
00095 typedef DataHeaderTemplate<mp3_data_header_mpeg1_1ch> DataHeaderMPEG1Mono;
00096 typedef DataHeaderTemplate<mp3_data_header_mpeg1_2ch> DataHeaderMPEG1Stereo;
00097 typedef DataHeaderTemplate<mp3_data_header_mpeg2_1ch> DataHeaderMPEG2Mono;
00098 typedef DataHeaderTemplate<mp3_data_header_mpeg2_2ch> DataHeaderMPEG2Stereo;
00099 
00100 #endif //_DATAHEADER_H_

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