[FFmpeg-devel] [PATCH v2 2/3] avformat/isom: update mov_mdhd_language_map

Zhao Zhili quinkblack at foxmail.com
Sat Jul 4 13:04:44 EEST 2020



> On Jul 4, 2020, at 2:29 AM, Marton Balint <cus at passwd.hu> wrote:
> 
> 
> 
> On Sat, 27 Jun 2020, Zhao Zhili wrote:
> 
>> This is a map from 'Macintosh Language Codes' to 'ISO639-2/T'. Some items
>> in the map were ISO639-2/B, some were ISO639-1.
> 
> FFMpeg is using ISO639-2/B for language metadata according to docs. So if you change these tables, some functions relying on that these tables contain ISO639-2/B entires will break.

From "QuickTime File Format Specification":
> the QuickTime file format uses either language codes from the Macintosh
> Script Manager or ISO language codes (as specified in ISO 639-2/T ) 

ISO/IEC 14496-12 only specify ISO 639-2/T as language codes.

In my opinion, mov_mdhd_language_map only handle the difference between the
two specification. mov_mdhd_language_map shouldn't map to ISO 639-2/B,
otherwise ff_mov_iso639_to_lang

1. may return ISO 639-2/B if the format is quicktime
2. return ISO 639-2/T if the format is 14496-12

If we need transform between mov language codes and what FFmpeg uses, fix
the implementation of ff_mov_iso639_to_lang and ff_mov_lang_to_iso639, or
add wrapper on them. I think it's better to keep the duty of
mov_mdhd_language_map simple and clear.

> 
> You should check which functions are using these tables, and update them accordingly. Or maybe you need to update the code which is calling those functions. There is also some infrastructure in place for converting between languages, see libavformat/avlanguage.h.
> 
> Regards,
> Marton
> 
>> ---
>> libavformat/isom.c | 50 +++++++++++++++++++++++-----------------------
>> 1 file changed, 25 insertions(+), 25 deletions(-)
>> 
>> diff --git a/libavformat/isom.c b/libavformat/isom.c
>> index 209bbac5d1..e6b9506f67 100644
>> --- a/libavformat/isom.c
>> +++ b/libavformat/isom.c
>> @@ -397,10 +397,10 @@ const AVCodecTag ff_codec_movdata_tags[] = {
>> static const char mov_mdhd_language_map[][4] = {
>>    "eng",    /*   0 English */
>>    "fra",    /*   1 French */
>> -    "ger",    /*   2 German */
>> +    "deu",    /*   2 German */
>>    "ita",    /*   3 Italian */
>> -    "dut",    /*   4 Dutch */
>> -    "sve",    /*   5 Swedish */
>> +    "nld",    /*   4 Dutch */
>> +    "swe",    /*   5 Swedish */
>>    "spa",    /*   6 Spanish */
>>    "dan",    /*   7 Danish */
>>    "por",    /*   8 Portuguese */
>> @@ -410,11 +410,11 @@ static const char mov_mdhd_language_map[][4] = {
>>    "ara",    /*  12 Arabic */
>>    "fin",    /*  13 Finnish */
>>    "gre",    /*  14 Greek */
>> -    "ice",    /*  15 Icelandic */
>> +    "isl",    /*  15 Icelandic */
>>    "mlt",    /*  16 Maltese */
>>    "tur",    /*  17 Turkish */
>> -    "hr ",    /*  18 Croatian */
>> -    "chi",    /*  19 Traditional Chinese */
>> +    "hrv",    /*  18 Croatian */
>> +    "zho",    /*  19 Traditional Chinese */
>>    "urd",    /*  20 Urdu */
>>    "hin",    /*  21 Hindi */
>>    "tha",    /*  22 Thai */
>> @@ -425,20 +425,20 @@ static const char mov_mdhd_language_map[][4] = {
>>    "est",    /*  27 Estonian */
>>    "lav",    /*  28 Latvian */
>>       "",    /*  29 Sami */
>> -    "fo ",    /*  30 Faroese */
>> -       "",    /*  31 Farsi */
>> +    "fao",    /*  30 Faroese */
>> +    "fas",    /*  31 Farsi */
>>    "rus",    /*  32 Russian */
>> -    "chi",    /*  33 Simplified Chinese */
>> -       "",    /*  34 Flemish */
>> -    "iri",    /*  35 Irish */
>> -    "alb",    /*  36 Albanian */
>> +    "zho",    /*  33 Simplified Chinese */
>> +    "nld",    /*  34 Flemish */
>> +    "gle",    /*  35 Irish */
>> +    "sqi",    /*  36 Albanian */
>>    "ron",    /*  37 Romanian */
>>    "ces",    /*  38 Czech */
>>    "slk",    /*  39 Slovak */
>>    "slv",    /*  40 Slovenian */
>>    "yid",    /*  41 Yiddish */
>> -    "sr ",    /*  42 Serbian */
>> -    "mac",    /*  43 Macedonian */
>> +    "srp",    /*  42 Serbian */
>> +    "mkd",    /*  43 Macedonian */
>>    "bul",    /*  44 Bulgarian */
>>    "ukr",    /*  45 Ukrainian */
>>    "bel",    /*  46 Belarusian */
>> @@ -446,33 +446,33 @@ static const char mov_mdhd_language_map[][4] = {
>>    "kaz",    /*  48 Kazakh */
>>    "aze",    /*  49 Azerbaijani */
>>    "aze",    /*  50 AzerbaijanAr */
>> -    "arm",    /*  51 Armenian */
>> -    "geo",    /*  52 Georgian */
>> +    "hye",    /*  51 Armenian */
>> +    "kat",    /*  52 Georgian */
>>    "mol",    /*  53 Moldavian */
>>    "kir",    /*  54 Kirghiz */
>>    "tgk",    /*  55 Tajiki */
>>    "tuk",    /*  56 Turkmen */
>>    "mon",    /*  57 Mongolian */
>> -       "",    /*  58 MongolianCyr */
>> +    "mon",    /*  58 MongolianCyr */
>>    "pus",    /*  59 Pashto */
>>    "kur",    /*  60 Kurdish */
>>    "kas",    /*  61 Kashmiri */
>>    "snd",    /*  62 Sindhi */
>> -    "tib",    /*  63 Tibetan */
>> +    "bod",    /*  63 Tibetan */
>>    "nep",    /*  64 Nepali */
>>    "san",    /*  65 Sanskrit */
>>    "mar",    /*  66 Marathi */
>>    "ben",    /*  67 Bengali */
>>    "asm",    /*  68 Assamese */
>>    "guj",    /*  69 Gujarati */
>> -    "pa ",    /*  70 Punjabi */
>> +    "pan",    /*  70 Punjabi */
>>    "ori",    /*  71 Oriya */
>>    "mal",    /*  72 Malayalam */
>>    "kan",    /*  73 Kannada */
>>    "tam",    /*  74 Tamil */
>>    "tel",    /*  75 Telugu */
>> -       "",    /*  76 Sinhala */
>> -    "bur",    /*  77 Burmese */
>> +    "sin",    /*  76 Sinhala */
>> +    "mya",    /*  77 Burmese */
>>    "khm",    /*  78 Khmer */
>>    "lao",    /*  79 Lao */
>>    "vie",    /*  80 Vietnamese */
>> @@ -485,9 +485,9 @@ static const char mov_mdhd_language_map[][4] = {
>>    "orm",    /*  87 Oromo */
>>    "som",    /*  88 Somali */
>>    "swa",    /*  89 Swahili */
>> -       "",    /*  90 Kinyarwanda */
>> +    "kin",    /*  90 Kinyarwanda */
>>    "run",    /*  91 Rundi */
>> -       "",    /*  92 Nyanja */
>> +    "nya",    /*  92 Nyanja */
>>    "mlg",    /*  93 Malagasy */
>>    "epo",    /*  94 Esperanto */
>>       "",    /*  95  */
>> @@ -523,8 +523,8 @@ static const char mov_mdhd_language_map[][4] = {
>>       "",    /* 125  */
>>       "",    /* 126  */
>>       "",    /* 127  */
>> -    "wel",    /* 128 Welsh */
>> -    "baq",    /* 129 Basque */
>> +    "cym",    /* 128 Welsh */
>> +    "eus",    /* 129 Basque */
>>    "cat",    /* 130 Catalan */
>>    "lat",    /* 131 Latin */
>>    "que",    /* 132 Quechua */
>> -- 
>> 2.25.1
>> 
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> 
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".



More information about the ffmpeg-devel mailing list