From: Baptiste Coudurier Date: Wed, 21 Mar 2012 21:18:16 +0000 (-0700) Subject: movdec: handle 0x7fff langcode as macintosh per the specs X-Git-Tag: n2.3~35^2~820 X-Git-Url: https://git.videolan.org/?p=ffmpeg.git;a=commitdiff_plain;h=9e71cc81f3655cacf0f91860fba3043f13b64059;ds=sidebyside movdec: handle 0x7fff langcode as macintosh per the specs The correct point that seperates ISO and MAC language codes is 0x400 according to the current QT spec. Old QT specs did not list where this seperation is but apparently only defined the meaning of the first 137. --- diff --git a/libavformat/isom.c b/libavformat/isom.c index b0923c40cf..1748d7cb60 100644 --- a/libavformat/isom.c +++ b/libavformat/isom.c @@ -355,7 +355,7 @@ int ff_mov_lang_to_iso639(unsigned code, char to[4]) memset(to, 0, 4); /* is it the mangled iso code? */ /* see http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt */ - if (code > 138) { + if (code >= 0x400 && code != 0x7fff) { for (i = 2; i >= 0; i--) { to[i] = 0x60 + (code & 0x1f); code >>= 5; diff --git a/libavformat/mov.c b/libavformat/mov.c index dc5b42b2d3..6f72ce8144 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -298,7 +298,7 @@ static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom) if (parse) parse(c, pb, str_size, key); else { - if (data_type == 3 || (data_type == 0 && langcode < 0x800)) { // MAC Encoded + if (data_type == 3 || (data_type == 0 && (langcode < 0x400 || langcode == 0x7fff))) { // MAC Encoded mov_read_mac_string(c, pb, str_size, str, sizeof(str)); } else { avio_read(pb, str, str_size);