aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_mp3/LAMEinfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Input/in_mp3/LAMEinfo.h')
-rw-r--r--Src/Plugins/Input/in_mp3/LAMEinfo.h118
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