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

mp3frame.h

Go to the documentation of this file.
00001 
00006 #ifndef _MP3FRAME_H_
00007 #define _MP3FRAME_H_
00008 
00009 #include "bitstream.h"
00010 #include "frameheader.h"
00011 #include "dataheader.h"
00012 #include "channelheader.h"
00013 #include "audiodata.h"
00014 
00015 class MP3Stream;
00016 
00035 class MP3Frame
00036 {
00037   public:
00038     
00040     enum { nowrite,   
00041            fastwrite, 
00042            normal     
00043          };
00044     
00054     MP3Frame(MP3Stream *stream, MP3Frame *prev = 0);
00055     
00059     ~MP3Frame(); 
00060     
00066     MP3Frame *Destroy();
00067     
00073     MP3Frame *Next();
00074     
00086     void Write(Bitstream &bs);
00087     
00098     void SetDataBegin(int startpos);
00099     
00110     void Enlarge(int num);
00111     
00127     void WriteData(Bitstream &bs, MP3Frame *frame, int cutstart, int cutend);
00128     
00136     void SetFirst();
00137     
00147     bool isLocked() const;
00148     
00157     bool CorruptionFound() const;
00158     
00164     int Bitrate() const;
00165     
00174     int DataSize() const;
00175     
00181     void ChangeGain(int n);
00182     
00192     bool isSilent() const; 
00193     
00201     void ShowInfo(std::ostream &str) const; 
00202   
00203   private:
00204      //Initialize frame (may fail because of exception, called in loop)
00205     bool Init(MP3Frame *prev); 
00206     void Cleanup(); //Delete everything
00207     void SetZeroes(); //Set all variables to zero
00208     void WriteHeaders(Bitstream &bs); //Write frame headers
00209 
00210     FrameHeader *m_fh; //Frame header
00211     DataHeader *m_dh; //Data header (may be mono or stereo)
00212     ChannelHeader *m_ch[2][2]; //Header of each channel in each granule
00213     AudioData *m_data; //Raw audio data
00214     MP3Stream *m_stream; //Stream to read frame from
00215     MP3Frame *m_next; //Next frame (linked list)
00216     unsigned int m_CRC; //CRC code (rarely used)
00217     bool m_locked; //If the frame can't be deleted
00218     bool m_corruption; //If there was corruption before frame
00219     bool m_firstframe; //If the frame is first in a file
00220     int m_spacesize; //Size of part for data (without headers) in bytes
00221     int m_datasize; //Size of data belonging to frame
00222     int m_stuffing; //Number of added zero bytes
00223     int m_databegin; //Offset of first dfata byte in input stream
00224     int m_newdatabegin; //Offset in output stream
00225     int m_totalbytes; //Sum of space bytes in previius frames
00226     int m_framesize; //Total size of frame
00227     int m_sizechange; //Change of size after resize (bitrate change)
00228 };
00229 
00230 #endif //_MP3FRAME_H_

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