blob: 484c241cc44ecab4e0084f9a093b7d3677d738da [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
//
// The contents of this file are subject to the Mozilla Public License
// Version 1.1 (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at
// http://www.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS"
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
// License for the specific language governing rights and limitations
// under the License.
//
// The Original Code is MP4v2.
//
// The Initial Developer of the Original Code is Kona Blend.
// Portions created by Kona Blend are Copyright (C) 2008.
// All Rights Reserved.
//
// Contributors:
// Kona Blend, kona8lend@@gmail.com
// Rouven Wessling, mp4v2@rouvenwessling.de
//
///////////////////////////////////////////////////////////////////////////////
#ifndef MP4V2_IMPL_ITMF_TYPE_H
#define MP4V2_IMPL_ITMF_TYPE_H
namespace mp4v2 { namespace impl { namespace itmf {
///////////////////////////////////////////////////////////////////////////////
/// Basic set of types as detailed in spec.
enum BasicType {
BT_IMPLICIT = 0, ///< for use with tags for which no type needs to be indicated
BT_UTF8 = 1, ///< without any count or null terminator
BT_UTF16 = 2, ///< also known as UTF-16BE
BT_SJIS = 3, ///< deprecated unless it is needed for special Japanese characters
BT_HTML = 6, ///< the HTML file header specifies which HTML version
BT_XML = 7, ///< the XML header must identify the DTD or schemas
BT_UUID = 8, ///< also known as GUID; stored as 16 bytes in binary (valid as an ID)
BT_ISRC = 9, ///< stored as UTF-8 text (valid as an ID)
BT_MI3P = 10, ///< stored as UTF-8 text (valid as an ID)
BT_GIF = 12, ///< (deprecated) a GIF image
BT_JPEG = 13, ///< a JPEG image
BT_PNG = 14, ///< a PNG image
BT_URL = 15, ///< absolute, in UTF-8 characters
BT_DURATION = 16, ///< in milliseconds, 32-bit integer
BT_DATETIME = 17, ///< in UTC, counting seconds since midnight, January 1, 1904; 32 or 64-bits
BT_GENRES = 18, ///< a list of enumerated values, see #Genre
BT_INTEGER = 21, ///< a signed big-endian integer with length one of { 1,2,3,4,8 } bytes
BT_RIAA_PA = 24, ///< RIAA parental advisory; { -1=no, 1=yes, 0=unspecified }, 8-bit ingteger
BT_UPC = 25, ///< Universal Product Code, in text UTF-8 format (valid as an ID)
BT_BMP = 27, ///< Windows bitmap image
BT_UNDEFINED = 255
};
typedef Enum<BasicType,BT_UNDEFINED> EnumBasicType;
MP4V2_EXPORT extern const EnumBasicType enumBasicType;
///////////////////////////////////////////////////////////////////////////////
/// enumerated genre as defined in ID3v1 specification but +1 as per iTMF spec.
/// Note values 80 and higher are Winamp extensions.
enum GenreType {
GENRE_UNDEFINED = 0,
/* ID3v1 standard */
GENRE_BLUES = 1,
GENRE_CLASSIC_ROCK = 2,
GENRE_COUNTRY = 3,
GENRE_DANCE = 4,
GENRE_DISCO = 5,
GENRE_FUNK = 6,
GENRE_GRUNGE = 7,
GENRE_HIP_HOP = 8,
GENRE_JAZZ = 9,
GENRE_METAL = 10,
GENRE_NEW_AGE = 11,
GENRE_OLDIES = 12,
GENRE_OTHER = 13,
GENRE_POP = 14,
GENRE_R_AND_B = 15,
GENRE_RAP = 16,
GENRE_REGGAE = 17,
GENRE_ROCK = 18,
GENRE_TECHNO = 19,
GENRE_INDUSTRIAL = 20,
GENRE_ALTERNATIVE = 21,
GENRE_SKA = 22,
GENRE_DEATH_METAL = 23,
GENRE_PRANKS = 24,
GENRE_SOUNDTRACK = 25,
GENRE_EURO_TECHNO = 26,
GENRE_AMBIENT = 27,
GENRE_TRIP_HOP = 28,
GENRE_VOCAL = 29,
GENRE_JAZZ_FUNK = 30,
GENRE_FUSION = 31,
GENRE_TRANCE = 32,
GENRE_CLASSICAL = 33,
GENRE_INSTRUMENTAL = 34,
GENRE_ACID = 35,
GENRE_HOUSE = 36,
GENRE_GAME = 37,
GENRE_SOUND_CLIP = 38,
GENRE_GOSPEL = 39,
GENRE_NOISE = 40,
GENRE_ALTERNROCK = 41,
GENRE_BASS = 42,
GENRE_SOUL = 43,
GENRE_PUNK = 44,
GENRE_SPACE = 45,
GENRE_MEDITATIVE = 46,
GENRE_INSTRUMENTAL_POP = 47,
GENRE_INSTRUMENTAL_ROCK = 48,
GENRE_ETHNIC = 49,
GENRE_GOTHIC = 50,
GENRE_DARKWAVE = 51,
GENRE_TECHNO_INDUSTRIAL = 52,
GENRE_ELECTRONIC = 53,
GENRE_POP_FOLK = 54,
GENRE_EURODANCE = 55,
GENRE_DREAM = 56,
GENRE_SOUTHERN_ROCK = 57,
GENRE_COMEDY = 58,
GENRE_CULT = 59,
GENRE_GANGSTA = 60,
GENRE_TOP_40 = 61,
GENRE_CHRISTIAN_RAP = 62,
GENRE_POP_FUNK = 63,
GENRE_JUNGLE = 64,
GENRE_NATIVE_AMERICAN = 65,
GENRE_CABARET = 66,
GENRE_NEW_WAVE = 67,
GENRE_PSYCHEDELIC = 68,
GENRE_RAVE = 69,
GENRE_SHOWTUNES = 70,
GENRE_TRAILER = 71,
GENRE_LO_FI = 72,
GENRE_TRIBAL = 73,
GENRE_ACID_PUNK = 74,
GENRE_ACID_JAZZ = 75,
GENRE_POLKA = 76,
GENRE_RETRO = 77,
GENRE_MUSICAL = 78,
GENRE_ROCK_AND_ROLL = 79,
/* Winamp extension */
GENRE_HARD_ROCK = 80,
GENRE_FOLK = 81,
GENRE_FOLK_ROCK = 82,
GENRE_NATIONAL_FOLK = 83,
GENRE_SWING = 84,
GENRE_FAST_FUSION = 85,
GENRE_BEBOB = 86,
GENRE_LATIN = 87,
GENRE_REVIVAL = 88,
GENRE_CELTIC = 89,
GENRE_BLUEGRASS = 90,
GENRE_AVANTGARDE = 91,
GENRE_GOTHIC_ROCK = 92,
GENRE_PROGRESSIVE_ROCK = 93,
GENRE_PSYCHEDELIC_ROCK = 94,
GENRE_SYMPHONIC_ROCK = 95,
GENRE_SLOW_ROCK = 96,
GENRE_BIG_BAND = 97,
GENRE_CHORUS = 98,
GENRE_EASY_LISTENING = 99,
GENRE_ACOUSTIC = 100,
GENRE_HUMOUR = 101,
GENRE_SPEECH = 102,
GENRE_CHANSON = 103,
GENRE_OPERA = 104,
GENRE_CHAMBER_MUSIC = 105,
GENRE_SONATA = 106,
GENRE_SYMPHONY = 107,
GENRE_BOOTY_BASS = 108,
GENRE_PRIMUS = 109,
GENRE_PORN_GROOVE = 110,
GENRE_SATIRE = 111,
GENRE_SLOW_JAM = 112,
GENRE_CLUB = 113,
GENRE_TANGO = 114,
GENRE_SAMBA = 115,
GENRE_FOLKLORE = 116,
GENRE_BALLAD = 117,
GENRE_POWER_BALLAD = 118,
GENRE_RHYTHMIC_SOUL = 119,
GENRE_FREESTYLE = 120,
GENRE_DUET = 121,
GENRE_PUNK_ROCK = 122,
GENRE_DRUM_SOLO = 123,
GENRE_A_CAPELLA = 124,
GENRE_EURO_HOUSE = 125,
GENRE_DANCE_HALL = 126,
GENRE_NONE = 255
};
typedef Enum<GenreType,GENRE_UNDEFINED> EnumGenreType;
MP4V2_EXPORT extern const EnumGenreType enumGenreType;
///////////////////////////////////////////////////////////////////////////////
/// enumerated 8-bit Video Type used by iTunes.
/// Note values are not formally defined in any specification.
enum StikType {
STIK_OLD_MOVIE = 0,
STIK_NORMAL = 1,
STIK_AUDIOBOOK = 2,
STIK_MUSIC_VIDEO = 6,
STIK_MOVIE = 9,
STIK_TV_SHOW = 10,
STIK_BOOKLET = 11,
STIK_RINGTONE = 14,
STIK_UNDEFINED = 255
};
typedef Enum<StikType,STIK_UNDEFINED> EnumStikType;
MP4V2_EXPORT extern const EnumStikType enumStikType;
///////////////////////////////////////////////////////////////////////////////
/// enumerated 8-bit Account Type used by the iTunes Store.
/// Note values are not formally defined in any specification.
enum AccountType {
AT_ITUNES = 0,
AT_AOL = 1,
AT_UNDEFINED = 255
};
typedef Enum<AccountType,AT_UNDEFINED> EnumAccountType;
MP4V2_EXPORT extern const EnumAccountType enumAccountType;
///////////////////////////////////////////////////////////////////////////////
/// enumerated 32-bit Country Code used by the iTunes Store.
/// Note values are not formally defined in any specification.
enum CountryCode {
CC_USA = 143441,
CC_FRA = 143442,
CC_DEU = 143443,
CC_GBR = 143444,
CC_AUT = 143445,
CC_BEL = 143446,
CC_FIN = 143447,
CC_GRC = 143448,
CC_IRL = 143449,
CC_ITA = 143450,
CC_LUX = 143451,
CC_NLD = 143452,
CC_PRT = 143453,
CC_ESP = 143454,
CC_CAN = 143455,
CC_SWE = 143456,
CC_NOR = 143457,
CC_DNK = 143458,
CC_CHE = 143459,
CC_AUS = 143460,
CC_NZL = 143461,
CC_JPN = 143462,
CC_UNDEFINED = 0
};
typedef Enum<CountryCode,CC_UNDEFINED> EnumCountryCode;
MP4V2_EXPORT extern const EnumCountryCode enumCountryCode;
///////////////////////////////////////////////////////////////////////////////
/// enumerated 8-bit Content Rating used by iTunes.
/// Note values are not formally defined in any specification.
enum ContentRating {
CR_NONE = 0,
CR_CLEAN = 2,
CR_EXPLICIT = 4,
CR_UNDEFINED = 255
};
typedef Enum<ContentRating,CR_UNDEFINED> EnumContentRating;
MP4V2_EXPORT extern const EnumContentRating enumContentRating;
///////////////////////////////////////////////////////////////////////////////
/// compute BasicType by examining raw bytes header.
MP4V2_EXPORT BasicType
computeBasicType( const void* buffer, uint32_t size );
///////////////////////////////////////////////////////////////////////////////
}}} // namespace mp4v2::impl::itmf
#endif // MP4V2_IMPL_ITMF_TYPE_H