---
libavformat/mov.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 74 insertions(+), 0 deletions(-)
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 6baddeb..99f688a 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -126,6 +126,78 @@ static int mov_metadata_stik(MOVContext *c, AVIOContext
*pb,
return 0;
}
+static int mov_metadata_gnre(MOVContext *c, AVIOContext *pb,
+ unsigned len, const char *key)
+{
+const char * const mp4_genre_str[126] = {
+ [0] = "Blues", [1] = "Classic Rock", [2] = "Country",
+ [3] = "Dance", [4] = "Disco", [5] = "Funk", [6] = "Grunge",
+ [7] = "Hip-Hop", [8] = "Jazz", [9] = "Metal", [10] = "New Age",
+ [11] = "Oldies", [12] = "Other", [13] = "Pop", [14] = "R&B",
+ [15] = "Rap", [16] = "Reggae", [17] = "Rock", [18] = "Techno",
+ [19] = "Industrial", [20] = "Alternative", [21] = "Ska",
+ [22] = "Death Metal", [23] = "Pranks", [24] = "Soundtrack",
+ [25] = "Euro-Techno", [26] = "Ambient", [27] = "Trip-Hop",
+ [28] = "Vocal", [29] = "Jazz+Funk", [30] = "Fusion",
+ [31] = "Trance", [32] = "Classical", [33] = "Instrumental",
+ [34] = "Acid", [35] = "House", [36] = "Game", [37] = "Sound Clip",
+ [38] = "Gospel", [39] = "Noise", [40] = "AlternRock",
+ [41] = "Bass", [42] = "Soul", [43] = "Punk", [44] = "Space",
+ [45] = "Meditative", [46] = "Instrumental Pop",
+ [47] = "Instrumental Rock", [48] = "Ethnic", [49] = "Gothic",
+ [50] = "Darkwave", [51] = "Techno-Industrial",
+ [52] = "Electronic", [53] = "Pop-Folk", [54] = "Eurodance",
+ [55] = "Dream", [56] = "Southern Rock", [57] = "Comedy",
+ [58] = "Cult", [59] = "Gangsta", [60] = "Top 40",
+ [61] = "Christian Rap", [62] = "Pop/Funk", [63] = "Jungle",
+ [64] = "Native American", [65] = "Cabaret", [66] = "New Wave",
+ [67] = "Psychadelic", [68] = "Rave", [69] = "Showtunes",
+ [70] = "Trailer", [71] = "Lo-Fi", [72] = "Tribal",
+ [73] = "Acid Punk", [74] = "Acid Jazz", [75] = "Polka",
+ [76] = "Retro", [77] = "Musical", [78] = "Rock & Roll",
+ [79] = "Hard Rock", [80] = "Folk", [81] = "Folk-Rock",
+ [82] = "National Folk", [83] = "Swing", [84] = "Fast Fusion",
+ [85] = "Bebob", [86] = "Latin", [87] = "Revival",
+ [88] = "Celtic", [89] = "Bluegrass", [90] = "Avantgarde",
+ [91] = "Gothic Rock", [92] = "Progressive Rock",
+ [93] = "Psychedelic Rock", [94] = "Symphonic Rock",
+ [95] = "Slow Rock", [96] = "Big Band", [97] = "Chorus",
+ [98] = "Easy Listening", [99] = "Acoustic", [100] = "Humour",
+ [101] = "Speech", [102] = "Chanson", [103] = "Opera",
+ [104] = "Chamber Music", [105] = "Sonata", [106] = "Symphony",
+ [107] = "Booty Bass", [108] = "Primus", [109] = "Porn Groove",
+ [110] = "Satire", [111] = "Slow Jam", [112] = "Club",
+ [113] = "Tango", [114] = "Samba", [115] = "Folklore",
+ [116] = "Ballad", [117] = "Power Ballad", [118] = "Rhythmic Soul",
+ [119] = "Freestyle", [120] = "Duet", [121] = "Punk Rock",
+ [122] = "Drum Solo", [123] = "A capella", [124] = "Euro-House",
+ [125] = "Dance Hall",
+// Apparently iTunes does not use the gnre atom
+// for the remaining few id3v1 tags. Adding them
+// in a commented form just for reference.
+// [126] = "Goa", [127] = "Drum & Bass", [128] = "Club-House",
+// [129] = "Hardcore", [130] = "Terror", [131] = "Indie",
+// [132] = "BritPop", [133] = "Negerpunk", [134] = "Polsk Punk",
+// [135] = "Beat", [136] = "Christian Gangsta", [137] = "Heavy Metal",
+// [138] = "Black Metal", [139] = "Crossover",
+// [140] = "Contemporary Christian", [141] = "Christian Rock",
+// [142] = "Merengue", [143] = "Salsa", [144] = "Thrash Metal",
+// [145] = "Anime", [146] = "JPop", [147] = "SynthPop",
+};
+
+ char genre;
+ char buf[20];
+
+ avio_r8(pb); // unknown
+
+ genre = avio_r8(pb);
+ if (genre < 1 || genre > 126) { genre = 1; }
+ snprintf(buf, sizeof(buf), "%s", mp4_genre_str[genre-1]);
+ av_dict_set(&c->fc->metadata, key, buf, 0);
+
+ return 0;
+}
+
static const uint32_t mac_to_unicode[128] = {
0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1,
0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8,
@@ -187,6 +259,8 @@ static int mov_read_udta_string(MOVContext *c, AVIOContext
*pb, MOVAtom atom)
case MKTAG(0xa9,'a','l','b'): key = "album"; break;
case MKTAG(0xa9,'d','a','y'): key = "date"; break;
case MKTAG(0xa9,'g','e','n'): key = "genre"; break;
+ case MKTAG( 'g','n','r','e'): key = "genre";
+ parse = mov_metadata_gnre; break;
case MKTAG(0xa9,'t','o','o'):
case MKTAG(0xa9,'s','w','r'): key = "encoder"; break;
case MKTAG(0xa9,'e','n','c'): key = "encoder"; break;
--
1.7.5.4
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel