summaryrefslogtreecommitdiff
path: root/libavformat/id3v2.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2013-05-06 00:54:13 +0000
committerPaul B Mahol <onemda@gmail.com>2013-05-06 00:54:13 +0000
commitf5846dc98cee1fd2530565a9a87c602714eb597b (patch)
tree438280ce0fdb44158701865bf4ba1914ecbd9493 /libavformat/id3v2.c
parent5a9e3760495e8678ae87314670e3d9d5a1792c8d (diff)
id3v2: stop ignoring text encoding for chapter titles
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavformat/id3v2.c')
-rw-r--r--libavformat/id3v2.c18
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 {