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