00001 00006 #define FRAMEHEADER 00007 #include "frameheader.h" 00008 00009 FrameHeader::FrameHeader(Bitstream &bs) : m_fh(bs) {} 00010 00011 void FrameHeader::Write(Bitstream &bs) 00012 { 00013 m_fh.Write(bs); 00014 } 00015 00016 int FrameHeader::Size() const 00017 { 00018 return size; 00019 } 00020 00021 int FrameHeader::Bitrate() const 00022 { 00023 return bitrate_table[m_fh^ID][m_fh^layer][m_fh^bitrate_index]; 00024 } 00025 00026 int FrameHeader::Version() const 00027 { 00028 return version_table[m_fh^IDex][m_fh^ID]; 00029 } 00030 00031 int FrameHeader::Layer() const 00032 { 00033 return layer_table[m_fh^layer]; 00034 } 00035 00036 bool FrameHeader::isCopyrighted() const 00037 { 00038 return (m_fh^copyright) != 0; 00039 } 00040 00041 bool FrameHeader::isOriginal() const 00042 { 00043 return (m_fh^original) != 0; 00044 } 00045 00046 bool FrameHeader::isCRC() const 00047 { 00048 return (m_fh^protection_bit) == 0; 00049 } 00050 00051 int FrameHeader::Frequency() const 00052 { 00053 return frequency_table[m_fh^IDex][m_fh^ID][m_fh^frequency]; 00054 } 00055 00056 int FrameHeader::Mode() const 00057 { 00058 return m_fh^mode; 00059 } 00060 00061 bool FrameHeader::isIntensStereo() const 00062 { 00063 return (m_fh^mode_extension) & 1 != 0; 00064 } 00065 00066 bool FrameHeader::isMSstereo() const 00067 { 00068 return (m_fh^mode_extension) & 2 != 0; 00069 } 00070 00071 int FrameHeader::NumChannels() const 00072 { 00073 return ((m_fh^mode) == single_channel) ? 1 : 2; 00074 } 00075 00076 int FrameHeader::NumGranules() const 00077 { 00078 return (Version() == 1) ? 2 : 1; 00079 } 00080 00081 int FrameHeader::FrameSize() const 00082 { 00083 return (m_fh^ID ? 144 : 72) * Bitrate() * 1000 / Frequency() + (m_fh^padding_bit); 00084 } 00085 00086 bool FrameHeader::isValid() const 00087 { //Only a few fields could be checked for validity, -1 means invalid value 00088 return Frequency() != -1 && Bitrate() != -1 && Layer() != -1 && Version() != -1 && Layer() == 3; 00089 } 00090 00091 void FrameHeader::Enlarge() 00092 { 00093 m_fh.Set(bitrate_index, (m_fh^bitrate_index) + 1); //Resize to next bitrate 00094 }