1 /* GStreamer Quicktime/ISO demuxer language utility functions
2 * Copyright (C) 2010 Tim-Philipp Müller <tim centricular net>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20 #include "qtdemux_debug.h"
21 #include "qtdemux_lang.h"
22
23 #include <string.h>
24
25 #define GST_CAT_DEFAULT qtdemux_debug
26
27 /* http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap4/qtff4.html */
28
29 static const gchar qt_lang_map[][4] = {
30
31 /* 000 English
32 * 001 French
33 * 002 German
34 * 003 Italian
35 * 004 Dutch
36 * 005 Swedish
37 * 006 Spanish
38 * 007 Danish
39 * 008 Portuguese
40 * 009 Norwegian
41 */
42 "eng", "fre", "deu", "ita", "nld", "swe", "spa", "dan", "por", "nor",
43
44 /* 010 Hebrew
45 * 011 Japanese
46 * 012 Arabic
47 * 013 Finnish
48 * 014 Greek
49 * 015 Icelandic
50 * 016 Maltese
51 * 017 Turkish
52 * 018 Croatian
53 * 019 Traditional Chinese (ISO 639-2 can't express script differences, so zho)
54 */
55 "heb", "jpn", "ara", "fin", "ell", "isl", "mlt", "tur", "hrv", "zho",
56
57 /* 020 Urdu
58 * 021 Hindi
59 * 022 Thai
60 * 023 Korean
61 * 024 Lithuanian
62 * 025 Polish
63 * 026 Hungarian
64 * 027 Estonian
65 * 028 Latvian / Lettish
66 * 029 Lappish / Saamish (used code for Nothern Sami)
67 */
68 "urd", "hin", "tha", "kor", "lit", "pol", "hun", "est", "lav", "sme",
69
70 /* 030 Faeroese
71 * 031 Farsi
72 * 032 Russian
73 * 033 Simplified Chinese (ISO 639-2 can't express script differences, so zho)
74 * 034 Flemish (no ISO 639-2 code, used Dutch code)
75 * 035 Irish
76 * 036 Albanian
77 * 037 Romanian
78 * 038 Czech
79 * 039 Slovak
80 */
81 "fao", "fas", "rus", "zho", "nld", "gle", "sqi", "ron", "ces", "slk",
82
83 /* 040 Slovenian
84 * 041 Yiddish
85 * 042 Serbian
86 * 043 Macedonian
87 * 044 Bulgarian
88 * 045 Ukrainian
89 * 046 Byelorussian
90 * 047 Uzbek
91 * 048 Kazakh
92 * 049 Azerbaijani
93 */
94 "slv", "yid", "srp", "mkd", "bul", "ukr", "bel", "uzb", "kaz", "aze",
95
96 /* 050 AzerbaijanAr (presumably script difference? used aze here)
97 * 051 Armenian
98 * 052 Georgian
99 * 053 Moldavian
100 * 054 Kirghiz
101 * 055 Tajiki
102 * 056 Turkmen
103 * 057 Mongolian
104 * 058 MongolianCyr (presumably script difference? used mon here)
105 * 059 Pashto
106 */
107
108 "aze", "hye", "kat", "mol", "kir", "tgk", "tuk", "mon", "mon", "pus",
109
110
111 /* 060 Kurdish
112 * 061 Kashmiri
113 * 062 Sindhi
114 * 063 Tibetan
115 * 064 Nepali
116 * 065 Sanskrit
117 * 066 Marathi
118 * 067 Bengali
119 * 068 Assamese
120 * 069 Gujarati
121 */
122 "kur", "kas", "snd", "bod", "nep", "san", "mar", "ben", "asm", "guj",
123
124 /* 070 Punjabi
125 * 071 Oriya
126 * 072 Malayalam
127 * 073 Kannada
128 * 074 Tamil
129 * 075 Telugu
130 * 076 Sinhalese
131 * 077 Burmese
132 * 078 Khmer
133 * 079 Lao
134 */
135 "pan", "ori", "mal", "kan", "tam", "tel", "sin", "mya", "khm", "lao",
136
137 /* 080 Vietnamese
138 * 081 Indonesian
139 * 082 Tagalog
140 * 083 MalayRoman
141 * 084 MalayArabic
142 * 085 Amharic
143 * 087 Galla (same as Oromo?)
144 * 087 Oromo
145 * 088 Somali
146 * 089 Swahili
147 */
148 "vie", "ind", "tgl", "msa", "msa", "amh", "orm", "orm", "som", "swa",
149
150 /* 090 Ruanda
151 * 091 Rundi
152 * 092 Chewa
153 * 093 Malagasy
154 * 094 Esperanto
155 * 095 ---
156 * 096 ---
157 * 097 ---
158 * 098 ---
159 * 099 ---
160 */
161 "kin", "run", "nya", "mlg", "ep", "und", "und", "und", "und", "und",
162
163 /* 100-109 ---
164 * 110-119 ---
165 */
166 "und", "und", "und", "und", "und", "und", "und", "und", "und", "und",
167 "und", "und", "und", "und", "und", "und", "und", "und", "und", "und",
168
169 /* 120-127 ---
170 * 128 Welsh
171 * 129 Basque
172 */
173 "und", "und", "und", "und", "und", "und", "und", "und", "cym", "eus",
174
175 /* 130 Catalan
176 * 131 Latin
177 * 132 Quechua
178 * 133 Guarani
179 * 134 Aymara
180 * 135 Tatar
181 * 136 Uighur
182 * 137 Dzongkha
183 * 138 JavaneseRom
184 */
185 "cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav"
186 };
187
188 /* map quicktime language code to ISO-639-2T id, returns "und" if unknown */
189 void
qtdemux_lang_map_qt_code_to_iso(gchar id[4],guint16 qt_lang_code)190 qtdemux_lang_map_qt_code_to_iso (gchar id[4], guint16 qt_lang_code)
191 {
192 const gchar *iso_code;
193
194 g_assert (qt_lang_code < 0x400);
195
196 if (qt_lang_code < G_N_ELEMENTS (qt_lang_map))
197 iso_code = qt_lang_map[qt_lang_code];
198 else
199 iso_code = "und";
200
201 GST_DEBUG ("mapped quicktime language code %u to ISO 639-2T code '%s'",
202 qt_lang_code, iso_code);
203
204 memcpy (id, iso_code, 4);
205
206 g_assert (id[3] == '\0');
207 }
208