aboutsummaryrefslogtreecommitdiff
path: root/Src/id3v2/id3_field.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/id3v2/id3_field.h')
-rw-r--r--Src/id3v2/id3_field.h282
1 files changed, 282 insertions, 0 deletions
diff --git a/Src/id3v2/id3_field.h b/Src/id3v2/id3_field.h
new file mode 100644
index 00000000..0c17a761
--- /dev/null
+++ b/Src/id3v2/id3_field.h
@@ -0,0 +1,282 @@
+// The authors have released ID3Lib as Public Domain (PD) and claim no copyright,
+// patent or other intellectual property protection in this work. This means that
+// it may be modified, redistributed and used in commercial and non-commercial
+// software and hardware without restrictions. ID3Lib is distributed on an "AS IS"
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
+//
+// The ID3Lib authors encourage improvements and optimisations to be sent to the
+// ID3Lib coordinator, currently Dirk Mahoney (dirk@id3.org). Approved
+// submissions may be altered, and will be included and released under these terms.
+//
+// Mon Nov 23 18:34:01 1998
+// improved/optimized/whatEVER jan-08-2006 benski
+
+#ifndef ID3LIB_FIELD_H
+#define ID3LIB_FIELD_H
+
+
+#include <wchar.h>
+#include "id3_types.h"
+#include "id3_error.h"
+
+
+// field flags
+#define ID3FF_NULL (1 << 0)
+#define ID3FF_NULLDIVIDE (1 << 1)
+#define ID3FF_ADJUSTENC (1 << 2)
+#define ID3FF_ADJUSTEDBY (1 << 3)
+
+
+enum ID3_TextEnc
+{
+ ID3TE_ASCII = 0,
+ ID3TE_UNICODE = 1, // UTF-16
+ ID3TE_UTF16_BE = 2, // UTF-16 big endian, no BOM
+ ID3TE_UTF8 = 3, // UTF-8
+};
+
+enum ID3_FieldType
+{
+ ID3FTY_INTEGER = 0,
+ ID3FTY_BITFIELD,
+ ID3FTY_BINARY,
+ ID3FTY_ASCIISTRING,
+ ID3FTY_UNICODESTRING,
+ ID3FTY_UTF8STRING,
+};
+
+enum ID3_FieldID
+{
+ ID3FN_NOFIELD = 0,
+ ID3FN_TEXTENC,
+ ID3FN_TEXT,
+ ID3FN_URL,
+ ID3FN_DATA,
+ ID3FN_DESCRIPTION,
+ ID3FN_OWNER,
+ ID3FN_EMAIL,
+ ID3FN_RATING,
+ ID3FN_FILENAME,
+ ID3FN_LANGUAGE,
+ ID3FN_PICTURETYPE,
+ ID3FN_IMAGEFORMAT,
+ ID3FN_MIMETYPE,
+ ID3FN_TIMESTAMP,
+ ID3FN_CONTENTTYPE,
+ ID3FN_COUNTER,
+ ID3FN_SYMBOL,
+ ID3FN_VOLUMEADJ,
+ ID3FN_NUMBITS,
+ ID3FN_VOLCHGRIGHT,
+ ID3FN_VOLCHGLEFT,
+ ID3FN_PEAKVOLRIGHT,
+ ID3FN_PEAKVOLLEFT,
+ ID3FN_CD_TOC,
+
+ ID3FN_LASTFIELDID
+};
+
+
+enum ID3_FrameID
+{
+ ID3FID_NOFRAME = 0,
+ ID3FID_ENCODEDBY,
+ ID3FID_ORIGALBUM,
+ ID3FID_PUBLISHER,
+ ID3FID_ENCODERSETTINGS,
+ ID3FID_ORIGFILENAME,
+ ID3FID_LANGUAGE,
+ ID3FID_PARTINSET,
+ ID3FID_DATE,
+ ID3FID_TIME,
+ ID3FID_RECORDINGDATES,
+ ID3FID_MEDIATYPE,
+ ID3FID_FILETYPE,
+ ID3FID_NETRADIOSTATION,
+ ID3FID_NETRADIOOWNER,
+ ID3FID_LYRICIST,
+ ID3FID_ORIGARTIST,
+ ID3FID_ORIGLYRICIST,
+ ID3FID_CONTENTGROUP,
+ ID3FID_TITLE,
+ ID3FID_SUBTITLE,
+ ID3FID_LEADARTIST,
+ ID3FID_BAND,
+ ID3FID_CONDUCTOR,
+ ID3FID_MIXARTIST,
+ ID3FID_ALBUM,
+ ID3FID_YEAR,
+ ID3FID_COMPOSER,
+ ID3FID_COPYRIGHT,
+ ID3FID_PRODUCEDNOTICE,
+ ID3FID_CONTENTTYPE,
+ ID3FID_TRACKNUM,
+ ID3FID_USERTEXT,
+ ID3FID_COMMENT,
+ ID3FID_TERMSOFUSE,
+ ID3FID_UNSYNCEDLYRICS,
+ ID3FID_SYNCEDLYRICS,
+ ID3FID_SYNCEDTEMPOCODE,
+ ID3FID_WWWAUDIOFILE,
+ ID3FID_WWWARTIST,
+ ID3FID_WWWAUDIOSOURCE,
+ ID3FID_WWWCOMMERCIALINFO,
+ ID3FID_WWWCOPYRIGHT,
+ ID3FID_WWWPUBLISHER,
+ ID3FID_WWWPAYMENT,
+ ID3FID_WWWRADIOPAGE,
+ ID3FID_WWWUSER,
+ ID3FID_INVOLVEDPEOPLE,
+ ID3FID_PICTURE,
+ ID3FID_GENERALOBJECT,
+ ID3FID_UNIQUEFILEID,
+ ID3FID_PRIVATE,
+ ID3FID_PLAYCOUNTER,
+ ID3FID_POPULARIMETER,
+ ID3FID_CRYPTOREG,
+ ID3FID_GROUPINGREG,
+ ID3FID_SIGNATURE,
+ ID3FID_MCDI,
+ ID3FID_BPM,
+ ID3FID_KEY,
+ ID3FID_MOOD,
+ ID3FID_ISRC,
+ ID3FID_RECORDINGTIME,
+ ID3FID_COMPILATION,
+ ID3FID_ALBUMSORT,
+ ID3FID_ALBUMARTISTSORT,
+ ID3FID_PERFORMERSORT,
+ ID3FID_COMPOSERSORT,
+ ID3FID_TITLESORT,
+ ID3FID_REPLAYGAIN,
+ ID3FID_VOLUMEADJ,
+ ID3FID_INVOLVEDPEOPLE2,
+ ID3FID_CREDITS,
+ ID3FID_ENCODINGTIME,
+ ID3FID_FILEOWNER,
+ ID3FID_LENGTH,
+ ID3FID_ORIGYEAR,
+ ID3FID_ORIGRELEASETIME,
+ ID3FID_RELEASETIME,
+ ID3FID_SETSUBTITLE,
+ ID3FID_TAGGINGTIME,
+ ID3FID_PLAYLISTDELAY,
+ ID3FID_PODCAST,
+ ID3FID_PODCASTCATEGORY,
+ ID3FID_PODCASTDESC,
+ ID3FID_PODCASTID,
+ ID3FID_PODCASTURL,
+};
+
+
+enum ID3_VerCtl
+{
+ ID3VC_HIGHER = 0,
+ ID3VC_LOWER
+};
+
+
+struct ID3_FieldDef
+{
+ ID3_FieldID id;
+ ID3_FieldType type;
+ lsint fixedLength;
+ uchar version;
+ uchar revision;
+ ID3_VerCtl control;
+ luint flags;
+ ID3_FieldID linkedField;
+};
+
+
+class ID3_Frame;
+
+// TODO: add minimum/maximum version & revision
+struct ID3_FrameDef
+{
+ ID3_FrameID id;
+ char *shortTextID;
+ char *longTextID;
+ bool tagDiscard;
+ bool fileDiscard;
+ bool (*parseHandler)(ID3_Frame *frame);
+ ID3_FieldDef *fieldDefs;
+};
+
+
+class ID3_Field
+{
+public:
+ ID3_Field(void);
+ ~ID3_Field(void);
+
+ void Clear(void);
+ luint Size(void);
+ luint GetNumTextItems(void);
+ // integer field functions
+ //ID3_Field& operator= (luint newData);
+ void Set(luint newData);
+ luint Get(void);
+ // Unicode string field functions
+ //ID3_Field& operator= (wchar_t *string);
+ void SetUnicode(const wchar_t *string);
+ luint GetUnicode(wchar_t *buffer, luint maxChars, luint itemNum = 1);
+ void AddUnicode(const wchar_t *string);
+ // ASCII string field functions
+ //ID3_Field& operator= (char *string);
+ void SetLatin(const char *string);
+ void SetLocal(const char *string);
+ void SetUTF8(const char *string);
+
+ luint GetLocal(char *buffer, luint maxChars, luint itemNum = 1);
+ luint GetLatin(char *buffer, luint maxChars, luint itemNum = 1);
+
+ void AddLocal(const char *string);
+ void AddLatin(const char *string);
+
+ // binary field functions
+ void Set(uchar *newData, luint newSize);
+ void Get(uchar *buffer, luint buffLength);
+
+ // *** PRIVATE INTERNAL DATA - DO NOT USE *** PRIVATE INTERNAL DATA - DO NOT USE ***
+
+ luint BinSize(bool withExtras = true);
+ bool HasChanged(void);
+ void SetVersion(uchar ver, uchar rev);
+ luint Render(uchar *buffer);
+ luint Parse(uchar *buffer, luint posn, luint buffSize);
+ ID3_FieldID name; // the ID of this field
+ ID3_FieldType type; // what type is this field or should be
+ lsint fixedLength; // if this is positive, the length of the field is fixed
+ uchar ioVersion; // specific version
+ uchar ioRevision; // specific revision
+ ID3_VerCtl control; // render if ver/rev is higher, or lower than frame::version, frame::revision?
+ luint flags; // special field flags
+ uchar version; // the version being rendered/parsed
+ uchar revision; // the revision being rendered/parsed
+ bool hasChanged; // has the field changed since the last parse/render?
+protected:
+ luint RenderInteger (uchar *buffer);
+ luint RenderLatinString(uchar *buffer);
+ luint RenderUnicodeString (uchar *buffer);
+ luint RenderUTF8String(uchar *buffer);
+ luint RenderBinary (uchar *buffer);
+
+ luint ParseInteger (uchar *buffer, luint posn, luint buffSize);
+ luint ParseASCIIString (uchar *buffer, luint posn, luint buffSize);
+ luint ParseUnicodeString (uchar *buffer, luint posn, luint buffSize);
+ luint ParseUTF8String(uchar *buffer, luint posn, luint buffSize);
+ luint ParseBinary (uchar *buffer, luint posn, luint buffSize);
+
+ uchar *data;
+ luint size;
+};
+
+
+ID3_FrameDef *ID3_FindFrameDef (ID3_FrameID id);
+ID3_FrameID ID3_FindFrameID(const char *id);
+
+
+#endif
+
+