diff options
author | Paul B Mahol <onemda@gmail.com> | 2013-05-06 00:54:13 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2013-05-06 00:54:13 +0000 |
commit | f5846dc98cee1fd2530565a9a87c602714eb597b (patch) | |
tree | 438280ce0fdb44158701865bf4ba1914ecbd9493 | |
parent | 5a9e3760495e8678ae87314670e3d9d5a1792c8d (diff) | |
download | ffmpeg-f5846dc98cee1fd2530565a9a87c602714eb597b.tar.gz |
id3v2: stop ignoring text encoding for chapter titles
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r-- | libavformat/id3v2.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c index 3b02f95553..e585f0eeb3 100644 --- a/libavformat/id3v2.c +++ b/libavformat/id3v2.c @@ -521,10 +521,11 @@ fail: static void read_chapter(AVFormatContext *s, AVIOContext *pb, int taglen, char *tag, ID3v2ExtraMeta **extra_meta) { AVRational time_base = {1, 1000}; - char title[1024]; uint32_t start, end; + uint8_t *dst = NULL; + int encoding; - taglen -= avio_get_str(pb, taglen, title, sizeof(title)); + decode_str(s, pb, 0, &dst, &taglen); if (taglen < 16) return; @@ -538,14 +539,19 @@ static void read_chapter(AVFormatContext *s, AVIOContext *pb, int taglen, char * avio_read(pb, tag, 4); if (!memcmp(tag, "TIT2", 4)) { taglen = FFMIN(taglen, avio_rb32(pb)); - if (taglen < 0) + if (taglen < 0) { + av_free(dst); return; - avio_skip(pb, 3); - avio_get_str(pb, taglen, title, sizeof(title)); + } + avio_skip(pb, 2); + encoding = avio_r8(pb); + av_freep(&dst); + decode_str(s, pb, encoding, &dst, &taglen); } } - avpriv_new_chapter(s, s->nb_chapters + 1, time_base, start, end, title); + avpriv_new_chapter(s, s->nb_chapters + 1, time_base, start, end, dst); + av_free(dst); } typedef struct ID3v2EMFunc { |