On Wed, Oct 19, 2011 at 3:10 PM, Raivo Hool <[email protected]> wrote:
> ---
> libavformat/mov.c | 63
> +++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 63 insertions(+), 0 deletions(-)
>
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index 144fdb9..7603b67 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -126,6 +126,67 @@ 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 cappella", [124] = "Euro-House",
> + [125] = "Dance Hall",
> +};
> +
> + char genre;
> + char buf[20];
> +
> + avio_r8(pb); // unknown
> +
> + genre = avio_r8(pb);
> + if (genre < 1 || genre > 126) { genre = 1; }
> + snprintf(buf, strlen(mp4_genre_str[genre-1])+1, "%s",
> mp4_genre_str[genre-1]);
The purpose of snprintf() is to prevent buffer overruns. By using the
length of the source string as the size you might as well just use
sprintf(). Please use the target buffer size instead.
> + 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 +248,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