diff options
Diffstat (limited to 'Src/Plugins/Input/in_mp3/LAMEinfo.h')
-rw-r--r-- | Src/Plugins/Input/in_mp3/LAMEinfo.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/Src/Plugins/Input/in_mp3/LAMEinfo.h b/Src/Plugins/Input/in_mp3/LAMEinfo.h new file mode 100644 index 00000000..d8e6db04 --- /dev/null +++ b/Src/Plugins/Input/in_mp3/LAMEinfo.h @@ -0,0 +1,118 @@ +#ifndef NULLSOFT_LAMEINFOH +#define NULLSOFT_LAMEINFOH + + +#define FRAMES_FLAG 0x0001 +#define BYTES_FLAG 0x0002 +#define TOC_FLAG 0x0004 +#define VBR_SCALE_FLAG 0x0008 + +#define FRAMES_AND_BYTES (FRAMES_FLAG | BYTES_FLAG) +#include <memory.h> +#pragma intrinsic(memset) +struct LAMEinfo +{ + LAMEinfo() + { + memset(this, 0, sizeof(LAMEinfo)); + } + + int cbr; // set to 1 if the file is actually just CBR + // Xing + int h_id; + int samprate; // determined from MPEG header + int flags; // from Xing header data + int frames; // total bit stream frames from Xing header data + int bytes; // total bit stream bytes from Xing header data + int vbr_scale; // encoded vbr scale from Xing header data + unsigned char *toc; // pointer to unsigned char toc_buffer[100] + // may be NULL if toc not desired + + // LAME + char lameTag[10]; // 9 characters, but we'll add an extra NULL just in case + float peak; + float replaygain_album_gain; + float replaygain_track_gain; + unsigned short lowpass; + unsigned short encoderDelay; + unsigned short padding; + int encodingMethod; +}; + +enum +{ + ENCODING_METHOD_LAME = 0, + ENCODING_METHOD_CBR = 1, + ENCODING_METHOD_ABR = 2, + ENCODING_METHOD_VBR1 = 3, + ENCODING_METHOD_VBR2 = 4, + ENCODING_METHOD_VBR3 = 5, + ENCODING_METHOD_VBR4 = 6, + ENCODING_METHOD_CBR_2PASS = 8, + ENCODING_METHOD_ABR_2PASS = 9, +}; + +int ReadLAMEinfo(unsigned char *buffer, LAMEinfo *lameInfo); + +class MPEGFrame +{ +public: + int GetNumChannels(); + + void ReadBuffer(const unsigned char *buffer); + bool IsSync(); + int GetBitrate(); + int GetPadding(); + int HeaderSize(); + int GetSampleRate() const; + int FrameSize(); + const char *GetMPEGVersionString(); + const char *GetChannelModeString(); + const char *GetEmphasisString(); + int GetLayer(); + bool IsCRC(); + bool IsCopyright(); + bool IsOriginal(); + int MPEGFrame::GetSamplesPerFrame() const; + + enum + { + NotPadded=0, + Padded=1, + CRC = 0, + NoProtection = 1, + Stereo = 0, + JointStereo = 1, + DualChannel = 2, + Mono = 3, + MPEG1 = 3, + MPEG2 = 2, + MPEG_Error = 1, + MPEG2_5 = 0, + Layer1 = 3, + Layer2 = 2, + Layer3 = 1, + LayerError = 0, + Emphasis_None = 0, + Emphasis_50_15_ms = 1, + Emphasis_reserved = 2, + Emphasis_CCIT_J_17 = 3, + }; + + unsigned int sync:11, +mpegVersion:2, +layer:2, +protection:1, +bitrateIndex:4, +paddingBit:1, +privateBit:1, +channelMode:2, +modeExtension:2, +sampleRateIndex:2, +copyright:1, +original:1, +emphasis:2; +}; + + +#endif
\ No newline at end of file |