aboutsummaryrefslogtreecommitdiff
path: root/Src/replicant/nsmp3/LAMEInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/replicant/nsmp3/LAMEInfo.h')
-rw-r--r--Src/replicant/nsmp3/LAMEInfo.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/Src/replicant/nsmp3/LAMEInfo.h b/Src/replicant/nsmp3/LAMEInfo.h
new file mode 100644
index 00000000..4ed8d666
--- /dev/null
+++ b/Src/replicant/nsmp3/LAMEInfo.h
@@ -0,0 +1,66 @@
+#pragma once
+#include "foundation/types.h"
+#include "MPEGHeader.h"
+#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)
+
+struct LAMEInfo
+{
+ LAMEInfo();
+ uint64_t GetSeekPoint(double percent) const; /* 0 <= percent <= 1.0 */
+ int Read(const MPEGHeader &frame, const uint8_t *buffer, size_t bufferlen);
+ double GetLengthSeconds() const;
+ uint64_t GetSamples() const;
+ uint32_t GetFrames() const;
+
+ bool Flag(int flag) const;
+ int GetGaps(size_t *pregap, size_t *postgap);
+protected:
+ int version;
+ int sample_rate;
+ int samples_per_frame;
+
+ int cbr; // set to 1 if the file is actually just CBR
+ // Xing
+ int flags; // from Xing header data
+ uint32_t frames; // total bit stream frames from Xing header data
+ uint64_t bytes; // total bit stream bytes from Xing header data
+ int vbr_scale; // encoded vbr scale from Xing header data
+ uint8_t toc[100]; // pointer to unsigned char toc_buffer[100]
+ // may be NULL if toc not desired
+
+ // LAME
+ char encoder[32]; // 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 encoder_delay;
+ unsigned short padding;
+ uint8_t encoding_method;
+ uint8_t tag_revision;
+ uint8_t abr_bitrate;
+ uint32_t music_length;
+ uint16_t music_crc;
+ uint16_t tag_crc;
+};
+
+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(const MPEGHeader &frame, const uint8_t *buffer, LAMEInfo *lameInfo);
+