avlanguage.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765
  1. /*
  2. * Cyril Comparon, Larbi Joubala, Resonate-MP4 2009
  3. *
  4. * This file is part of FFmpeg.
  5. *
  6. * FFmpeg is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * FFmpeg is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with FFmpeg; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19. */
  20. #include "avlanguage.h"
  21. #include "libavutil/avstring.h"
  22. #include "libavutil/common.h"
  23. #include <stdlib.h>
  24. #include <stdint.h>
  25. #include <string.h>
  26. typedef struct LangEntry {
  27. const char str[4];
  28. uint16_t next_equivalent;
  29. } LangEntry;
  30. static const uint16_t lang_table_counts[] = { 484, 20, 184 };
  31. static const uint16_t lang_table_offsets[] = { 0, 484, 504 };
  32. static const LangEntry lang_table[] = {
  33. /*----- AV_LANG_ISO639_2_BIBL entries (484) -----*/
  34. /*0000*/ { "aar", 504 },
  35. /*0001*/ { "abk", 505 },
  36. /*0002*/ { "ace", 2 },
  37. /*0003*/ { "ach", 3 },
  38. /*0004*/ { "ada", 4 },
  39. /*0005*/ { "ady", 5 },
  40. /*0006*/ { "afa", 6 },
  41. /*0007*/ { "afh", 7 },
  42. /*0008*/ { "afr", 507 },
  43. /*0009*/ { "ain", 9 },
  44. /*0010*/ { "aka", 508 },
  45. /*0011*/ { "akk", 11 },
  46. /*0012*/ { "alb", 502 },
  47. /*0013*/ { "ale", 13 },
  48. /*0014*/ { "alg", 14 },
  49. /*0015*/ { "alt", 15 },
  50. /*0016*/ { "amh", 509 },
  51. /*0017*/ { "ang", 17 },
  52. /*0018*/ { "anp", 18 },
  53. /*0019*/ { "apa", 19 },
  54. /*0020*/ { "ara", 511 },
  55. /*0021*/ { "arc", 21 },
  56. /*0022*/ { "arg", 510 },
  57. /*0023*/ { "arm", 492 },
  58. /*0024*/ { "arn", 24 },
  59. /*0025*/ { "arp", 25 },
  60. /*0026*/ { "art", 26 },
  61. /*0027*/ { "arw", 27 },
  62. /*0028*/ { "asm", 512 },
  63. /*0029*/ { "ast", 29 },
  64. /*0030*/ { "ath", 30 },
  65. /*0031*/ { "aus", 31 },
  66. /*0032*/ { "ava", 513 },
  67. /*0033*/ { "ave", 506 },
  68. /*0034*/ { "awa", 34 },
  69. /*0035*/ { "aym", 514 },
  70. /*0036*/ { "aze", 515 },
  71. /*0037*/ { "bad", 37 },
  72. /*0038*/ { "bai", 38 },
  73. /*0039*/ { "bak", 516 },
  74. /*0040*/ { "bal", 40 },
  75. /*0041*/ { "bam", 521 },
  76. /*0042*/ { "ban", 42 },
  77. /*0043*/ { "baq", 489 },
  78. /*0044*/ { "bas", 44 },
  79. /*0045*/ { "bat", 45 },
  80. /*0046*/ { "bej", 46 },
  81. /*0047*/ { "bel", 517 },
  82. /*0048*/ { "bem", 48 },
  83. /*0049*/ { "ben", 522 },
  84. /*0050*/ { "ber", 50 },
  85. /*0051*/ { "bho", 51 },
  86. /*0052*/ { "bih", 519 },
  87. /*0053*/ { "bik", 53 },
  88. /*0054*/ { "bin", 54 },
  89. /*0055*/ { "bis", 520 },
  90. /*0056*/ { "bla", 56 },
  91. /*0057*/ { "bnt", 57 },
  92. /*0058*/ { "bos", 525 },
  93. /*0059*/ { "bra", 59 },
  94. /*0060*/ { "bre", 524 },
  95. /*0061*/ { "btk", 61 },
  96. /*0062*/ { "bua", 62 },
  97. /*0063*/ { "bug", 63 },
  98. /*0064*/ { "bul", 518 },
  99. /*0065*/ { "bur", 498 },
  100. /*0066*/ { "byn", 66 },
  101. /*0067*/ { "cad", 67 },
  102. /*0068*/ { "cai", 68 },
  103. /*0069*/ { "car", 69 },
  104. /*0070*/ { "cat", 526 },
  105. /*0071*/ { "cau", 71 },
  106. /*0072*/ { "ceb", 72 },
  107. /*0073*/ { "cel", 73 },
  108. /*0074*/ { "cha", 528 },
  109. /*0075*/ { "chb", 75 },
  110. /*0076*/ { "che", 527 },
  111. /*0077*/ { "chg", 77 },
  112. /*0078*/ { "chi", 503 },
  113. /*0079*/ { "chk", 79 },
  114. /*0080*/ { "chm", 80 },
  115. /*0081*/ { "chn", 81 },
  116. /*0082*/ { "cho", 82 },
  117. /*0083*/ { "chp", 83 },
  118. /*0084*/ { "chr", 84 },
  119. /*0085*/ { "chu", 532 },
  120. /*0086*/ { "chv", 533 },
  121. /*0087*/ { "chy", 87 },
  122. /*0088*/ { "cmc", 88 },
  123. /*0089*/ { "cop", 89 },
  124. /*0090*/ { "cor", 593 },
  125. /*0091*/ { "cos", 529 },
  126. /*0092*/ { "cpe", 92 },
  127. /*0093*/ { "cpf", 93 },
  128. /*0094*/ { "cpp", 94 },
  129. /*0095*/ { "cre", 530 },
  130. /*0096*/ { "crh", 96 },
  131. /*0097*/ { "crp", 97 },
  132. /*0098*/ { "csb", 98 },
  133. /*0099*/ { "cus", 99 },
  134. /*0100*/ { "cze", 485 },
  135. /*0101*/ { "dak", 101 },
  136. /*0102*/ { "dan", 535 },
  137. /*0103*/ { "dar", 103 },
  138. /*0104*/ { "day", 104 },
  139. /*0105*/ { "del", 105 },
  140. /*0106*/ { "den", 106 },
  141. /*0107*/ { "dgr", 107 },
  142. /*0108*/ { "din", 108 },
  143. /*0109*/ { "div", 537 },
  144. /*0110*/ { "doi", 110 },
  145. /*0111*/ { "dra", 111 },
  146. /*0112*/ { "dsb", 112 },
  147. /*0113*/ { "dua", 113 },
  148. /*0114*/ { "dum", 114 },
  149. /*0115*/ { "dut", 499 },
  150. /*0116*/ { "dyu", 116 },
  151. /*0117*/ { "dzo", 538 },
  152. /*0118*/ { "efi", 118 },
  153. /*0119*/ { "egy", 119 },
  154. /*0120*/ { "eka", 120 },
  155. /*0121*/ { "elx", 121 },
  156. /*0122*/ { "eng", 541 },
  157. /*0123*/ { "enm", 123 },
  158. /*0124*/ { "epo", 542 },
  159. /*0125*/ { "est", 544 },
  160. /*0126*/ { "ewe", 539 },
  161. /*0127*/ { "ewo", 127 },
  162. /*0128*/ { "fan", 128 },
  163. /*0129*/ { "fao", 550 },
  164. /*0130*/ { "fat", 130 },
  165. /*0131*/ { "fij", 549 },
  166. /*0132*/ { "fil", 132 },
  167. /*0133*/ { "fin", 548 },
  168. /*0134*/ { "fiu", 134 },
  169. /*0135*/ { "fon", 135 },
  170. /*0136*/ { "fre", 491 },
  171. /*0137*/ { "frm", 137 },
  172. /*0138*/ { "fro", 138 },
  173. /*0139*/ { "frr", 139 },
  174. /*0140*/ { "frs", 140 },
  175. /*0141*/ { "fry", 552 },
  176. /*0142*/ { "ful", 547 },
  177. /*0143*/ { "fur", 143 },
  178. /*0144*/ { "gaa", 144 },
  179. /*0145*/ { "gay", 145 },
  180. /*0146*/ { "gba", 146 },
  181. /*0147*/ { "gem", 147 },
  182. /*0148*/ { "geo", 494 },
  183. /*0149*/ { "ger", 487 },
  184. /*0150*/ { "gez", 150 },
  185. /*0151*/ { "gil", 151 },
  186. /*0152*/ { "gla", 554 },
  187. /*0153*/ { "gle", 553 },
  188. /*0154*/ { "glg", 555 },
  189. /*0155*/ { "glv", 558 },
  190. /*0156*/ { "gmh", 156 },
  191. /*0157*/ { "goh", 157 },
  192. /*0158*/ { "gon", 158 },
  193. /*0159*/ { "gor", 159 },
  194. /*0160*/ { "got", 160 },
  195. /*0161*/ { "grb", 161 },
  196. /*0162*/ { "grc", 162 },
  197. /*0163*/ { "gre", 488 },
  198. /*0164*/ { "grn", 556 },
  199. /*0165*/ { "gsw", 165 },
  200. /*0166*/ { "guj", 557 },
  201. /*0167*/ { "gwi", 167 },
  202. /*0168*/ { "hai", 168 },
  203. /*0169*/ { "hat", 564 },
  204. /*0170*/ { "hau", 559 },
  205. /*0171*/ { "haw", 171 },
  206. /*0172*/ { "heb", 560 },
  207. /*0173*/ { "her", 567 },
  208. /*0174*/ { "hil", 174 },
  209. /*0175*/ { "him", 175 },
  210. /*0176*/ { "hin", 561 },
  211. /*0177*/ { "hit", 177 },
  212. /*0178*/ { "hmn", 178 },
  213. /*0179*/ { "hmo", 562 },
  214. /*0180*/ { "hrv", 563 },
  215. /*0181*/ { "hsb", 181 },
  216. /*0182*/ { "hun", 565 },
  217. /*0183*/ { "hup", 183 },
  218. /*0184*/ { "iba", 184 },
  219. /*0185*/ { "ibo", 571 },
  220. /*0186*/ { "ice", 493 },
  221. /*0187*/ { "ido", 574 },
  222. /*0188*/ { "iii", 572 },
  223. /*0189*/ { "ijo", 189 },
  224. /*0190*/ { "iku", 577 },
  225. /*0191*/ { "ile", 570 },
  226. /*0192*/ { "ilo", 192 },
  227. /*0193*/ { "ina", 568 },
  228. /*0194*/ { "inc", 194 },
  229. /*0195*/ { "ind", 569 },
  230. /*0196*/ { "ine", 196 },
  231. /*0197*/ { "inh", 197 },
  232. /*0198*/ { "ipk", 573 },
  233. /*0199*/ { "ira", 199 },
  234. /*0200*/ { "iro", 200 },
  235. /*0201*/ { "ita", 576 },
  236. /*0202*/ { "jav", 579 },
  237. /*0203*/ { "jbo", 203 },
  238. /*0204*/ { "jpn", 578 },
  239. /*0205*/ { "jpr", 205 },
  240. /*0206*/ { "jrb", 206 },
  241. /*0207*/ { "kaa", 207 },
  242. /*0208*/ { "kab", 208 },
  243. /*0209*/ { "kac", 209 },
  244. /*0210*/ { "kal", 585 },
  245. /*0211*/ { "kam", 211 },
  246. /*0212*/ { "kan", 587 },
  247. /*0213*/ { "kar", 213 },
  248. /*0214*/ { "kas", 590 },
  249. /*0215*/ { "kau", 589 },
  250. /*0216*/ { "kaw", 216 },
  251. /*0217*/ { "kaz", 584 },
  252. /*0218*/ { "kbd", 218 },
  253. /*0219*/ { "kha", 219 },
  254. /*0220*/ { "khi", 220 },
  255. /*0221*/ { "khm", 586 },
  256. /*0222*/ { "kho", 222 },
  257. /*0223*/ { "kik", 582 },
  258. /*0224*/ { "kin", 640 },
  259. /*0225*/ { "kir", 594 },
  260. /*0226*/ { "kmb", 226 },
  261. /*0227*/ { "kok", 227 },
  262. /*0228*/ { "kom", 592 },
  263. /*0229*/ { "kon", 581 },
  264. /*0230*/ { "kor", 588 },
  265. /*0231*/ { "kos", 231 },
  266. /*0232*/ { "kpe", 232 },
  267. /*0233*/ { "krc", 233 },
  268. /*0234*/ { "krl", 234 },
  269. /*0235*/ { "kro", 235 },
  270. /*0236*/ { "kru", 236 },
  271. /*0237*/ { "kua", 583 },
  272. /*0238*/ { "kum", 238 },
  273. /*0239*/ { "kur", 591 },
  274. /*0240*/ { "kut", 240 },
  275. /*0241*/ { "lad", 241 },
  276. /*0242*/ { "lah", 242 },
  277. /*0243*/ { "lam", 243 },
  278. /*0244*/ { "lao", 600 },
  279. /*0245*/ { "lat", 595 },
  280. /*0246*/ { "lav", 603 },
  281. /*0247*/ { "lez", 247 },
  282. /*0248*/ { "lim", 598 },
  283. /*0249*/ { "lin", 599 },
  284. /*0250*/ { "lit", 601 },
  285. /*0251*/ { "lol", 251 },
  286. /*0252*/ { "loz", 252 },
  287. /*0253*/ { "ltz", 596 },
  288. /*0254*/ { "lua", 254 },
  289. /*0255*/ { "lub", 602 },
  290. /*0256*/ { "lug", 597 },
  291. /*0257*/ { "lui", 257 },
  292. /*0258*/ { "lun", 258 },
  293. /*0259*/ { "luo", 259 },
  294. /*0260*/ { "lus", 260 },
  295. /*0261*/ { "mac", 495 },
  296. /*0262*/ { "mad", 262 },
  297. /*0263*/ { "mag", 263 },
  298. /*0264*/ { "mah", 605 },
  299. /*0265*/ { "mai", 265 },
  300. /*0266*/ { "mak", 266 },
  301. /*0267*/ { "mal", 608 },
  302. /*0268*/ { "man", 268 },
  303. /*0269*/ { "mao", 496 },
  304. /*0270*/ { "map", 270 },
  305. /*0271*/ { "mar", 610 },
  306. /*0272*/ { "mas", 272 },
  307. /*0273*/ { "may", 497 },
  308. /*0274*/ { "mdf", 274 },
  309. /*0275*/ { "mdr", 275 },
  310. /*0276*/ { "men", 276 },
  311. /*0277*/ { "mga", 277 },
  312. /*0278*/ { "mic", 278 },
  313. /*0279*/ { "min", 279 },
  314. /*0280*/ { "mis", 280 },
  315. /*0281*/ { "mkh", 281 },
  316. /*0282*/ { "mlg", 604 },
  317. /*0283*/ { "mlt", 612 },
  318. /*0284*/ { "mnc", 284 },
  319. /*0285*/ { "mni", 285 },
  320. /*0286*/ { "mno", 286 },
  321. /*0287*/ { "moh", 287 },
  322. /*0288*/ { "mon", 609 },
  323. /*0289*/ { "mos", 289 },
  324. /*0290*/ { "mul", 290 },
  325. /*0291*/ { "mun", 291 },
  326. /*0292*/ { "mus", 292 },
  327. /*0293*/ { "mwl", 293 },
  328. /*0294*/ { "mwr", 294 },
  329. /*0295*/ { "myn", 295 },
  330. /*0296*/ { "myv", 296 },
  331. /*0297*/ { "nah", 297 },
  332. /*0298*/ { "nai", 298 },
  333. /*0299*/ { "nap", 299 },
  334. /*0300*/ { "nau", 614 },
  335. /*0301*/ { "nav", 623 },
  336. /*0302*/ { "nbl", 622 },
  337. /*0303*/ { "nde", 616 },
  338. /*0304*/ { "ndo", 618 },
  339. /*0305*/ { "nds", 305 },
  340. /*0306*/ { "nep", 617 },
  341. /*0307*/ { "new", 307 },
  342. /*0308*/ { "nia", 308 },
  343. /*0309*/ { "nic", 309 },
  344. /*0310*/ { "niu", 310 },
  345. /*0311*/ { "nno", 620 },
  346. /*0312*/ { "nob", 615 },
  347. /*0313*/ { "nog", 313 },
  348. /*0314*/ { "non", 314 },
  349. /*0315*/ { "nor", 621 },
  350. /*0316*/ { "nqo", 316 },
  351. /*0317*/ { "nso", 317 },
  352. /*0318*/ { "nub", 318 },
  353. /*0319*/ { "nwc", 319 },
  354. /*0320*/ { "nya", 624 },
  355. /*0321*/ { "nym", 321 },
  356. /*0322*/ { "nyn", 322 },
  357. /*0323*/ { "nyo", 323 },
  358. /*0324*/ { "nzi", 324 },
  359. /*0325*/ { "oci", 625 },
  360. /*0326*/ { "oji", 626 },
  361. /*0327*/ { "ori", 628 },
  362. /*0328*/ { "orm", 627 },
  363. /*0329*/ { "osa", 329 },
  364. /*0330*/ { "oss", 629 },
  365. /*0331*/ { "ota", 331 },
  366. /*0332*/ { "oto", 332 },
  367. /*0333*/ { "paa", 333 },
  368. /*0334*/ { "pag", 334 },
  369. /*0335*/ { "pal", 335 },
  370. /*0336*/ { "pam", 336 },
  371. /*0337*/ { "pan", 630 },
  372. /*0338*/ { "pap", 338 },
  373. /*0339*/ { "pau", 339 },
  374. /*0340*/ { "peo", 340 },
  375. /*0341*/ { "per", 490 },
  376. /*0342*/ { "phi", 342 },
  377. /*0343*/ { "phn", 343 },
  378. /*0344*/ { "pli", 631 },
  379. /*0345*/ { "pol", 632 },
  380. /*0346*/ { "pon", 346 },
  381. /*0347*/ { "por", 634 },
  382. /*0348*/ { "pra", 348 },
  383. /*0349*/ { "pro", 349 },
  384. /*0350*/ { "pus", 633 },
  385. /*0351*/ { "que", 635 },
  386. /*0352*/ { "raj", 352 },
  387. /*0353*/ { "rap", 353 },
  388. /*0354*/ { "rar", 354 },
  389. /*0355*/ { "roa", 355 },
  390. /*0356*/ { "roh", 636 },
  391. /*0357*/ { "rom", 357 },
  392. /*0358*/ { "rum", 500 },
  393. /*0359*/ { "run", 637 },
  394. /*0360*/ { "rup", 360 },
  395. /*0361*/ { "rus", 639 },
  396. /*0362*/ { "sad", 362 },
  397. /*0363*/ { "sag", 645 },
  398. /*0364*/ { "sah", 364 },
  399. /*0365*/ { "sai", 365 },
  400. /*0366*/ { "sal", 366 },
  401. /*0367*/ { "sam", 367 },
  402. /*0368*/ { "san", 641 },
  403. /*0369*/ { "sas", 369 },
  404. /*0370*/ { "sat", 370 },
  405. /*0371*/ { "scn", 371 },
  406. /*0372*/ { "sco", 372 },
  407. /*0373*/ { "sel", 373 },
  408. /*0374*/ { "sem", 374 },
  409. /*0375*/ { "sga", 375 },
  410. /*0376*/ { "sgn", 376 },
  411. /*0377*/ { "shn", 377 },
  412. /*0378*/ { "sid", 378 },
  413. /*0379*/ { "sin", 646 },
  414. /*0380*/ { "sio", 380 },
  415. /*0381*/ { "sit", 381 },
  416. /*0382*/ { "sla", 382 },
  417. /*0383*/ { "slo", 501 },
  418. /*0384*/ { "slv", 648 },
  419. /*0385*/ { "sma", 385 },
  420. /*0386*/ { "sme", 644 },
  421. /*0387*/ { "smi", 387 },
  422. /*0388*/ { "smj", 388 },
  423. /*0389*/ { "smn", 389 },
  424. /*0390*/ { "smo", 649 },
  425. /*0391*/ { "sms", 391 },
  426. /*0392*/ { "sna", 650 },
  427. /*0393*/ { "snd", 643 },
  428. /*0394*/ { "snk", 394 },
  429. /*0395*/ { "sog", 395 },
  430. /*0396*/ { "som", 651 },
  431. /*0397*/ { "son", 397 },
  432. /*0398*/ { "sot", 655 },
  433. /*0399*/ { "spa", 543 },
  434. /*0400*/ { "srd", 642 },
  435. /*0401*/ { "srn", 401 },
  436. /*0402*/ { "srp", 653 },
  437. /*0403*/ { "srr", 403 },
  438. /*0404*/ { "ssa", 404 },
  439. /*0405*/ { "ssw", 654 },
  440. /*0406*/ { "suk", 406 },
  441. /*0407*/ { "sun", 656 },
  442. /*0408*/ { "sus", 408 },
  443. /*0409*/ { "sux", 409 },
  444. /*0410*/ { "swa", 658 },
  445. /*0411*/ { "swe", 657 },
  446. /*0412*/ { "syc", 412 },
  447. /*0413*/ { "syr", 413 },
  448. /*0414*/ { "tah", 672 },
  449. /*0415*/ { "tai", 415 },
  450. /*0416*/ { "tam", 659 },
  451. /*0417*/ { "tat", 670 },
  452. /*0418*/ { "tel", 660 },
  453. /*0419*/ { "tem", 419 },
  454. /*0420*/ { "ter", 420 },
  455. /*0421*/ { "tet", 421 },
  456. /*0422*/ { "tgk", 661 },
  457. /*0423*/ { "tgl", 665 },
  458. /*0424*/ { "tha", 662 },
  459. /*0425*/ { "tib", 484 },
  460. /*0426*/ { "tig", 426 },
  461. /*0427*/ { "tir", 663 },
  462. /*0428*/ { "tiv", 428 },
  463. /*0429*/ { "tkl", 429 },
  464. /*0430*/ { "tlh", 430 },
  465. /*0431*/ { "tli", 431 },
  466. /*0432*/ { "tmh", 432 },
  467. /*0433*/ { "tog", 433 },
  468. /*0434*/ { "ton", 667 },
  469. /*0435*/ { "tpi", 435 },
  470. /*0436*/ { "tsi", 436 },
  471. /*0437*/ { "tsn", 666 },
  472. /*0438*/ { "tso", 669 },
  473. /*0439*/ { "tuk", 664 },
  474. /*0440*/ { "tum", 440 },
  475. /*0441*/ { "tup", 441 },
  476. /*0442*/ { "tur", 668 },
  477. /*0443*/ { "tut", 443 },
  478. /*0444*/ { "tvl", 444 },
  479. /*0445*/ { "twi", 671 },
  480. /*0446*/ { "tyv", 446 },
  481. /*0447*/ { "udm", 447 },
  482. /*0448*/ { "uga", 448 },
  483. /*0449*/ { "uig", 673 },
  484. /*0450*/ { "ukr", 674 },
  485. /*0451*/ { "umb", 451 },
  486. /*0452*/ { "und", 452 },
  487. /*0453*/ { "urd", 675 },
  488. /*0454*/ { "uzb", 676 },
  489. /*0455*/ { "vai", 455 },
  490. /*0456*/ { "ven", 677 },
  491. /*0457*/ { "vie", 678 },
  492. /*0458*/ { "vol", 679 },
  493. /*0459*/ { "vot", 459 },
  494. /*0460*/ { "wak", 460 },
  495. /*0461*/ { "wal", 461 },
  496. /*0462*/ { "war", 462 },
  497. /*0463*/ { "was", 463 },
  498. /*0464*/ { "wel", 486 },
  499. /*0465*/ { "wen", 465 },
  500. /*0466*/ { "wln", 680 },
  501. /*0467*/ { "wol", 681 },
  502. /*0468*/ { "xal", 468 },
  503. /*0469*/ { "xho", 682 },
  504. /*0470*/ { "yao", 470 },
  505. /*0471*/ { "yap", 471 },
  506. /*0472*/ { "yid", 683 },
  507. /*0473*/ { "yor", 684 },
  508. /*0474*/ { "ypk", 474 },
  509. /*0475*/ { "zap", 475 },
  510. /*0476*/ { "zbl", 476 },
  511. /*0477*/ { "zen", 477 },
  512. /*0478*/ { "zha", 685 },
  513. /*0479*/ { "znd", 479 },
  514. /*0480*/ { "zul", 687 },
  515. /*0481*/ { "zun", 481 },
  516. /*0482*/ { "zxx", 482 },
  517. /*0483*/ { "zza", 483 },
  518. /*----- AV_LANG_ISO639_2_TERM entries (20) -----*/
  519. /*0484*/ { "bod", 523 },
  520. /*0485*/ { "ces", 531 },
  521. /*0486*/ { "cym", 534 },
  522. /*0487*/ { "deu", 536 },
  523. /*0488*/ { "ell", 540 },
  524. /*0489*/ { "eus", 545 },
  525. /*0490*/ { "fas", 546 },
  526. /*0491*/ { "fra", 551 },
  527. /*0492*/ { "hye", 566 },
  528. /*0493*/ { "isl", 575 },
  529. /*0494*/ { "kat", 580 },
  530. /*0495*/ { "mkd", 607 },
  531. /*0496*/ { "mri", 606 },
  532. /*0497*/ { "msa", 611 },
  533. /*0498*/ { "mya", 613 },
  534. /*0499*/ { "nld", 619 },
  535. /*0500*/ { "ron", 638 },
  536. /*0501*/ { "slk", 647 },
  537. /*0502*/ { "sqi", 652 },
  538. /*0503*/ { "zho", 686 },
  539. /*----- AV_LANG_ISO639_1 entries (184) -----*/
  540. /*0504*/ { "aa" , 0 },
  541. /*0505*/ { "ab" , 1 },
  542. /*0506*/ { "ae" , 33 },
  543. /*0507*/ { "af" , 8 },
  544. /*0508*/ { "ak" , 10 },
  545. /*0509*/ { "am" , 16 },
  546. /*0510*/ { "an" , 22 },
  547. /*0511*/ { "ar" , 20 },
  548. /*0512*/ { "as" , 28 },
  549. /*0513*/ { "av" , 32 },
  550. /*0514*/ { "ay" , 35 },
  551. /*0515*/ { "az" , 36 },
  552. /*0516*/ { "ba" , 39 },
  553. /*0517*/ { "be" , 47 },
  554. /*0518*/ { "bg" , 64 },
  555. /*0519*/ { "bh" , 52 },
  556. /*0520*/ { "bi" , 55 },
  557. /*0521*/ { "bm" , 41 },
  558. /*0522*/ { "bn" , 49 },
  559. /*0523*/ { "bo" , 425 },
  560. /*0524*/ { "br" , 60 },
  561. /*0525*/ { "bs" , 58 },
  562. /*0526*/ { "ca" , 70 },
  563. /*0527*/ { "ce" , 76 },
  564. /*0528*/ { "ch" , 74 },
  565. /*0529*/ { "co" , 91 },
  566. /*0530*/ { "cr" , 95 },
  567. /*0531*/ { "cs" , 100 },
  568. /*0532*/ { "cu" , 85 },
  569. /*0533*/ { "cv" , 86 },
  570. /*0534*/ { "cy" , 464 },
  571. /*0535*/ { "da" , 102 },
  572. /*0536*/ { "de" , 149 },
  573. /*0537*/ { "dv" , 109 },
  574. /*0538*/ { "dz" , 117 },
  575. /*0539*/ { "ee" , 126 },
  576. /*0540*/ { "el" , 163 },
  577. /*0541*/ { "en" , 122 },
  578. /*0542*/ { "eo" , 124 },
  579. /*0543*/ { "es" , 399 },
  580. /*0544*/ { "et" , 125 },
  581. /*0545*/ { "eu" , 43 },
  582. /*0546*/ { "fa" , 341 },
  583. /*0547*/ { "ff" , 142 },
  584. /*0548*/ { "fi" , 133 },
  585. /*0549*/ { "fj" , 131 },
  586. /*0550*/ { "fo" , 129 },
  587. /*0551*/ { "fr" , 136 },
  588. /*0552*/ { "fy" , 141 },
  589. /*0553*/ { "ga" , 153 },
  590. /*0554*/ { "gd" , 152 },
  591. /*0555*/ { "gl" , 154 },
  592. /*0556*/ { "gn" , 164 },
  593. /*0557*/ { "gu" , 166 },
  594. /*0558*/ { "gv" , 155 },
  595. /*0559*/ { "ha" , 170 },
  596. /*0560*/ { "he" , 172 },
  597. /*0561*/ { "hi" , 176 },
  598. /*0562*/ { "ho" , 179 },
  599. /*0563*/ { "hr" , 180 },
  600. /*0564*/ { "ht" , 169 },
  601. /*0565*/ { "hu" , 182 },
  602. /*0566*/ { "hy" , 23 },
  603. /*0567*/ { "hz" , 173 },
  604. /*0568*/ { "ia" , 193 },
  605. /*0569*/ { "id" , 195 },
  606. /*0570*/ { "ie" , 191 },
  607. /*0571*/ { "ig" , 185 },
  608. /*0572*/ { "ii" , 188 },
  609. /*0573*/ { "ik" , 198 },
  610. /*0574*/ { "io" , 187 },
  611. /*0575*/ { "is" , 186 },
  612. /*0576*/ { "it" , 201 },
  613. /*0577*/ { "iu" , 190 },
  614. /*0578*/ { "ja" , 204 },
  615. /*0579*/ { "jv" , 202 },
  616. /*0580*/ { "ka" , 148 },
  617. /*0581*/ { "kg" , 229 },
  618. /*0582*/ { "ki" , 223 },
  619. /*0583*/ { "kj" , 237 },
  620. /*0584*/ { "kk" , 217 },
  621. /*0585*/ { "kl" , 210 },
  622. /*0586*/ { "km" , 221 },
  623. /*0587*/ { "kn" , 212 },
  624. /*0588*/ { "ko" , 230 },
  625. /*0589*/ { "kr" , 215 },
  626. /*0590*/ { "ks" , 214 },
  627. /*0591*/ { "ku" , 239 },
  628. /*0592*/ { "kv" , 228 },
  629. /*0593*/ { "kw" , 90 },
  630. /*0594*/ { "ky" , 225 },
  631. /*0595*/ { "la" , 245 },
  632. /*0596*/ { "lb" , 253 },
  633. /*0597*/ { "lg" , 256 },
  634. /*0598*/ { "li" , 248 },
  635. /*0599*/ { "ln" , 249 },
  636. /*0600*/ { "lo" , 244 },
  637. /*0601*/ { "lt" , 250 },
  638. /*0602*/ { "lu" , 255 },
  639. /*0603*/ { "lv" , 246 },
  640. /*0604*/ { "mg" , 282 },
  641. /*0605*/ { "mh" , 264 },
  642. /*0606*/ { "mi" , 269 },
  643. /*0607*/ { "mk" , 261 },
  644. /*0608*/ { "ml" , 267 },
  645. /*0609*/ { "mn" , 288 },
  646. /*0610*/ { "mr" , 271 },
  647. /*0611*/ { "ms" , 273 },
  648. /*0612*/ { "mt" , 283 },
  649. /*0613*/ { "my" , 65 },
  650. /*0614*/ { "na" , 300 },
  651. /*0615*/ { "nb" , 312 },
  652. /*0616*/ { "nd" , 303 },
  653. /*0617*/ { "ne" , 306 },
  654. /*0618*/ { "ng" , 304 },
  655. /*0619*/ { "nl" , 115 },
  656. /*0620*/ { "nn" , 311 },
  657. /*0621*/ { "no" , 315 },
  658. /*0622*/ { "nr" , 302 },
  659. /*0623*/ { "nv" , 301 },
  660. /*0624*/ { "ny" , 320 },
  661. /*0625*/ { "oc" , 325 },
  662. /*0626*/ { "oj" , 326 },
  663. /*0627*/ { "om" , 328 },
  664. /*0628*/ { "or" , 327 },
  665. /*0629*/ { "os" , 330 },
  666. /*0630*/ { "pa" , 337 },
  667. /*0631*/ { "pi" , 344 },
  668. /*0632*/ { "pl" , 345 },
  669. /*0633*/ { "ps" , 350 },
  670. /*0634*/ { "pt" , 347 },
  671. /*0635*/ { "qu" , 351 },
  672. /*0636*/ { "rm" , 356 },
  673. /*0637*/ { "rn" , 359 },
  674. /*0638*/ { "ro" , 358 },
  675. /*0639*/ { "ru" , 361 },
  676. /*0640*/ { "rw" , 224 },
  677. /*0641*/ { "sa" , 368 },
  678. /*0642*/ { "sc" , 400 },
  679. /*0643*/ { "sd" , 393 },
  680. /*0644*/ { "se" , 386 },
  681. /*0645*/ { "sg" , 363 },
  682. /*0646*/ { "si" , 379 },
  683. /*0647*/ { "sk" , 383 },
  684. /*0648*/ { "sl" , 384 },
  685. /*0649*/ { "sm" , 390 },
  686. /*0650*/ { "sn" , 392 },
  687. /*0651*/ { "so" , 396 },
  688. /*0652*/ { "sq" , 12 },
  689. /*0653*/ { "sr" , 402 },
  690. /*0654*/ { "ss" , 405 },
  691. /*0655*/ { "st" , 398 },
  692. /*0656*/ { "su" , 407 },
  693. /*0657*/ { "sv" , 411 },
  694. /*0658*/ { "sw" , 410 },
  695. /*0659*/ { "ta" , 416 },
  696. /*0660*/ { "te" , 418 },
  697. /*0661*/ { "tg" , 422 },
  698. /*0662*/ { "th" , 424 },
  699. /*0663*/ { "ti" , 427 },
  700. /*0664*/ { "tk" , 439 },
  701. /*0665*/ { "tl" , 423 },
  702. /*0666*/ { "tn" , 437 },
  703. /*0667*/ { "to" , 434 },
  704. /*0668*/ { "tr" , 442 },
  705. /*0669*/ { "ts" , 438 },
  706. /*0670*/ { "tt" , 417 },
  707. /*0671*/ { "tw" , 445 },
  708. /*0672*/ { "ty" , 414 },
  709. /*0673*/ { "ug" , 449 },
  710. /*0674*/ { "uk" , 450 },
  711. /*0675*/ { "ur" , 453 },
  712. /*0676*/ { "uz" , 454 },
  713. /*0677*/ { "ve" , 456 },
  714. /*0678*/ { "vi" , 457 },
  715. /*0679*/ { "vo" , 458 },
  716. /*0680*/ { "wa" , 466 },
  717. /*0681*/ { "wo" , 467 },
  718. /*0682*/ { "xh" , 469 },
  719. /*0683*/ { "yi" , 472 },
  720. /*0684*/ { "yo" , 473 },
  721. /*0685*/ { "za" , 478 },
  722. /*0686*/ { "zh" , 78 },
  723. /*0687*/ { "zu" , 480 },
  724. { "", 0 }
  725. };
  726. static int lang_table_compare(const void *lhs, const void *rhs)
  727. {
  728. return strcmp(lhs, ((const LangEntry *)rhs)->str);
  729. }
  730. const char *av_convert_lang_to(const char *lang, enum AVLangCodespace target_codespace)
  731. {
  732. int i;
  733. const LangEntry *entry = NULL;
  734. const int NB_CODESPACES = FF_ARRAY_ELEMS(lang_table_counts);
  735. if (target_codespace >= NB_CODESPACES)
  736. return NULL;
  737. for (i=0; !entry && i<NB_CODESPACES; i++)
  738. entry = bsearch(lang,
  739. lang_table + lang_table_offsets[i],
  740. lang_table_counts[i],
  741. sizeof(LangEntry),
  742. lang_table_compare);
  743. if (!entry)
  744. return NULL;
  745. for (i=0; i<NB_CODESPACES; i++)
  746. if (entry >= lang_table + lang_table_offsets[target_codespace] &&
  747. entry < lang_table + lang_table_offsets[target_codespace] + lang_table_counts[target_codespace])
  748. return entry->str;
  749. else
  750. entry = lang_table + entry->next_equivalent;
  751. if (target_codespace == AV_LANG_ISO639_2_TERM)
  752. return av_convert_lang_to(lang, AV_LANG_ISO639_2_BIBL);
  753. return NULL;
  754. }