From 307d14f9015489c098f376558697a0059df51190 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Fri, 17 Nov 2017 11:26:03 +0100 Subject: [PATCH] Added more ISO639 support (2-letter codes and conversions), improved audio/video/subtitle selection through HTTP connectors --- lib/langcodes.cpp | 1728 +++++++++++++++++++++++++----------- lib/langcodes.h | 2 + src/output/output.cpp | 107 ++- src/output/output.h | 1 + src/output/output_http.cpp | 40 +- src/output/output_rtmp.cpp | 60 +- src/output/output_rtmp.h | 1 - 7 files changed, 1332 insertions(+), 607 deletions(-) diff --git a/lib/langcodes.cpp b/lib/langcodes.cpp index 25a4e99c..5225014e 100644 --- a/lib/langcodes.cpp +++ b/lib/langcodes.cpp @@ -1,520 +1,1224 @@ #include "langcodes.h" -namespace Encodings { +namespace Encodings{ - std::string ISO639::decode(const std::string & lang){ - if (lang=="aar"){return "Afar";} - if (lang=="abk"){return "Abkhazian";} - if (lang=="ace"){return "Achinese";} - if (lang=="ach"){return "Acoli";} - if (lang=="ada"){return "Adangme";} - if (lang=="ady"){return "Adyghe; Adygei";} - if (lang=="afa"){return "Afro-Asiatic languages";} - if (lang=="afh"){return "Afrihili";} - if (lang=="afr"){return "Afrikaans";} - if (lang=="ain"){return "Ainu";} - if (lang=="aka"){return "Akan";} - if (lang=="akk"){return "Akkadian";} - if (lang=="alb"){return "Albanian";} - if (lang=="ale"){return "Aleut";} - if (lang=="alg"){return "Algonquian languages";} - if (lang=="alt"){return "Southern Altai";} - if (lang=="amh"){return "Amharic";} - if (lang=="ang"){return "English, Old (ca.450-1100)";} - if (lang=="anp"){return "Angika";} - if (lang=="apa"){return "Apache languages";} - if (lang=="ara"){return "Arabic";} - if (lang=="arc"){return "Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)";} - if (lang=="arg"){return "Aragonese";} - if (lang=="arm"){return "Armenian";} - if (lang=="arn"){return "Mapudungun; Mapuche";} - if (lang=="arp"){return "Arapaho";} - if (lang=="art"){return "Artificial languages";} - if (lang=="arw"){return "Arawak";} - if (lang=="asm"){return "Assamese";} - if (lang=="ast"){return "Asturian; Bable; Leonese; Asturleonese";} - if (lang=="ath"){return "Athapascan languages";} - if (lang=="aus"){return "Australian languages";} - if (lang=="ava"){return "Avaric";} - if (lang=="ave"){return "Avestan";} - if (lang=="awa"){return "Awadhi";} - if (lang=="aym"){return "Aymara";} - if (lang=="aze"){return "Azerbaijani";} - if (lang=="bad"){return "Banda languages";} - if (lang=="bai"){return "Bamileke languages";} - if (lang=="bak"){return "Bashkir";} - if (lang=="bal"){return "Baluchi";} - if (lang=="bam"){return "Bambara";} - if (lang=="ban"){return "Balinese";} - if (lang=="baq"){return "Basque";} - if (lang=="bas"){return "Basa";} - if (lang=="bat"){return "Baltic languages";} - if (lang=="bej"){return "Beja; Bedawiyet";} - if (lang=="bel"){return "Belarusian";} - if (lang=="bem"){return "Bemba";} - if (lang=="ben"){return "Bengali";} - if (lang=="ber"){return "Berber languages";} - if (lang=="bho"){return "Bhojpuri";} - if (lang=="bih"){return "Bihari languages";} - if (lang=="bik"){return "Bikol";} - if (lang=="bin"){return "Bini; Edo";} - if (lang=="bis"){return "Bislama";} - if (lang=="bla"){return "Siksika";} - if (lang=="bnt"){return "Bantu languages";} - if (lang=="bod"){return "Tibetan";} - if (lang=="bos"){return "Bosnian";} - if (lang=="bra"){return "Braj";} - if (lang=="bre"){return "Breton";} - if (lang=="btk"){return "Batak languages";} - if (lang=="bua"){return "Buriat";} - if (lang=="bug"){return "Buginese";} - if (lang=="bul"){return "Bulgarian";} - if (lang=="bur"){return "Burmese";} - if (lang=="byn"){return "Blin; Bilin";} - if (lang=="cad"){return "Caddo";} - if (lang=="cai"){return "Central American Indian languages";} - if (lang=="car"){return "Galibi Carib";} - if (lang=="cat"){return "Catalan; Valencian";} - if (lang=="cau"){return "Caucasian languages";} - if (lang=="ceb"){return "Cebuano";} - if (lang=="cel"){return "Celtic languages";} - if (lang=="ces"){return "Czech";} - if (lang=="cha"){return "Chamorro";} - if (lang=="chb"){return "Chibcha";} - if (lang=="che"){return "Chechen";} - if (lang=="chg"){return "Chagatai";} - if (lang=="chi"){return "Chinese";} - if (lang=="chk"){return "Chuukese";} - if (lang=="chm"){return "Mari";} - if (lang=="chn"){return "Chinook jargon";} - if (lang=="cho"){return "Choctaw";} - if (lang=="chp"){return "Chipewyan; Dene Suline";} - if (lang=="chr"){return "Cherokee";} - if (lang=="chu"){return "Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic";} - if (lang=="chv"){return "Chuvash";} - if (lang=="chy"){return "Cheyenne";} - if (lang=="cmc"){return "Chamic languages";} - if (lang=="cop"){return "Coptic";} - if (lang=="cor"){return "Cornish";} - if (lang=="cos"){return "Corsican";} - if (lang=="cpe"){return "Creoles and pidgins, English based";} - if (lang=="cpf"){return "Creoles and pidgins, French-based";} - if (lang=="cpp"){return "Creoles and pidgins, Portuguese-based";} - if (lang=="cre"){return "Cree";} - if (lang=="crh"){return "Crimean Tatar; Crimean Turkish";} - if (lang=="crp"){return "Creoles and pidgins";} - if (lang=="csb"){return "Kashubian";} - if (lang=="cus"){return "Cushitic languages";} - if (lang=="cym"){return "Welsh";} - if (lang=="cze"){return "Czech";} - if (lang=="cze"){return "Czech";} - if (lang=="dak"){return "Dakota";} - if (lang=="dan"){return "Danish";} - if (lang=="dar"){return "Dargwa";} - if (lang=="day"){return "Land Dayak languages";} - if (lang=="del"){return "Delaware";} - if (lang=="den"){return "Slave (Athapascan)";} - if (lang=="deu"){return "German";} - if (lang=="dgr"){return "Dogrib";} - if (lang=="din"){return "Dinka";} - if (lang=="div"){return "Divehi; Dhivehi; Maldivian";} - if (lang=="doi"){return "Dogri";} - if (lang=="dra"){return "Dravidian languages";} - if (lang=="dsb"){return "Lower Sorbian";} - if (lang=="dua"){return "Duala";} - if (lang=="dum"){return "Dutch, Middle (ca.1050-1350)";} - if (lang=="dut"){return "Dutch; Flemish";} - if (lang=="dyu"){return "Dyula";} - if (lang=="dzo"){return "Dzongkha";} - if (lang=="efi"){return "Efik";} - if (lang=="egy"){return "Egyptian (Ancient)";} - if (lang=="eka"){return "Ekajuk";} - if (lang=="ell"){return "Greek, Modern (1453-)";} - if (lang=="elx"){return "Elamite";} - if (lang=="eng"){return "English";} - if (lang=="enm"){return "English, Middle (1100-1500)";} - if (lang=="epo"){return "Esperanto";} - if (lang=="est"){return "Estonian";} - if (lang=="eus"){return "Basque";} - if (lang=="eus"){return "Basque";} - if (lang=="ewe"){return "Ewe";} - if (lang=="ewo"){return "Ewondo";} - if (lang=="fan"){return "Fang";} - if (lang=="fao"){return "Faroese";} - if (lang=="fas"){return "Persian";} - if (lang=="fas"){return "Persian";} - if (lang=="fat"){return "Fanti";} - if (lang=="fij"){return "Fijian";} - if (lang=="fil"){return "Filipino; Pilipino";} - if (lang=="fin"){return "Finnish";} - if (lang=="fiu"){return "Finno-Ugrian languages";} - if (lang=="fon"){return "Fon";} - if (lang=="fra"){return "French";} - if (lang=="fre"){return "French";} - if (lang=="frm"){return "French, Middle (ca.1400-1600)";} - if (lang=="fro"){return "French, Old (842-ca.1400)";} - if (lang=="frr"){return "Northern Frisian";} - if (lang=="frs"){return "Eastern Frisian";} - if (lang=="fry"){return "Western Frisian";} - if (lang=="ful"){return "Fulah";} - if (lang=="fur"){return "Friulian";} - if (lang=="gaa"){return "Ga";} - if (lang=="gay"){return "Gayo";} - if (lang=="gba"){return "Gbaya";} - if (lang=="gem"){return "Germanic languages";} - if (lang=="geo"){return "Georgian";} - if (lang=="ger"){return "German";} - if (lang=="gez"){return "Geez";} - if (lang=="gil"){return "Gilbertese";} - if (lang=="gla"){return "Gaelic; Scottish Gaelic";} - if (lang=="gle"){return "Irish";} - if (lang=="glg"){return "Galician";} - if (lang=="glv"){return "Manx";} - if (lang=="gmh"){return "German, Middle High (ca.1050-1500)";} - if (lang=="goh"){return "German, Old High (ca.750-1050)";} - if (lang=="gon"){return "Gondi";} - if (lang=="gor"){return "Gorontalo";} - if (lang=="got"){return "Gothic";} - if (lang=="grb"){return "Grebo";} - if (lang=="grc"){return "Greek, Ancient (to 1453)";} - if (lang=="gre"){return "Greek, Modern (1453-)";} - if (lang=="grn"){return "Guarani";} - if (lang=="gsw"){return "Swiss German; Alemannic; Alsatian";} - if (lang=="guj"){return "Gujarati";} - if (lang=="gwi"){return "Gwich'in";} - if (lang=="hai"){return "Haida";} - if (lang=="hat"){return "Haitian; Haitian Creole";} - if (lang=="hau"){return "Hausa";} - if (lang=="haw"){return "Hawaiian";} - if (lang=="heb"){return "Hebrew";} - if (lang=="her"){return "Herero";} - if (lang=="hil"){return "Hiligaynon";} - if (lang=="him"){return "Himachali languages; Western Pahari languages";} - if (lang=="hin"){return "Hindi";} - if (lang=="hit"){return "Hittite";} - if (lang=="hmn"){return "Hmong; Mong";} - if (lang=="hmo"){return "Hiri Motu";} - if (lang=="hrv"){return "Croatian";} - if (lang=="hsb"){return "Upper Sorbian";} - if (lang=="hun"){return "Hungarian";} - if (lang=="hup"){return "Hupa";} - if (lang=="hye"){return "Armenian";} - if (lang=="iba"){return "Iban";} - if (lang=="ibo"){return "Igbo";} - if (lang=="ice"){return "Icelandic";} - if (lang=="ido"){return "Ido";} - if (lang=="iii"){return "Sichuan Yi; Nuosu";} - if (lang=="ijo"){return "Ijo languages";} - if (lang=="iku"){return "Inuktitut";} - if (lang=="ile"){return "Interlingue; Occidental";} - if (lang=="ilo"){return "Iloko";} - if (lang=="ina"){return "Interlingua (International Auxiliary Language Association)";} - if (lang=="inc"){return "Indic languages";} - if (lang=="ind"){return "Indonesian";} - if (lang=="ine"){return "Indo-European languages";} - if (lang=="inh"){return "Ingush";} - if (lang=="ipk"){return "Inupiaq";} - if (lang=="ira"){return "Iranian languages";} - if (lang=="iro"){return "Iroquoian languages";} - if (lang=="isl"){return "Icelandic";} - if (lang=="ita"){return "Italian";} - if (lang=="jav"){return "Javanese";} - if (lang=="jbo"){return "Lojban";} - if (lang=="jpn"){return "Japanese";} - if (lang=="jpr"){return "Judeo-Persian";} - if (lang=="jrb"){return "Judeo-Arabic";} - if (lang=="kaa"){return "Kara-Kalpak";} - if (lang=="kab"){return "Kabyle";} - if (lang=="kac"){return "Kachin; Jingpho";} - if (lang=="kal"){return "Kalaallisut; Greenlandic";} - if (lang=="kam"){return "Kamba";} - if (lang=="kan"){return "Kannada";} - if (lang=="kar"){return "Karen languages";} - if (lang=="kas"){return "Kashmiri";} - if (lang=="kat"){return "Georgian";} - if (lang=="kau"){return "Kanuri";} - if (lang=="kaw"){return "Kawi";} - if (lang=="kaz"){return "Kazakh";} - if (lang=="kbd"){return "Kabardian";} - if (lang=="kha"){return "Khasi";} - if (lang=="khi"){return "Khoisan languages";} - if (lang=="khm"){return "Central Khmer";} - if (lang=="kho"){return "Khotanese; Sakan";} - if (lang=="kik"){return "Kikuyu; Gikuyu";} - if (lang=="kin"){return "Kinyarwanda";} - if (lang=="kir"){return "Kirghiz; Kyrgyz";} - if (lang=="kmb"){return "Kimbundu";} - if (lang=="kok"){return "Konkani";} - if (lang=="kom"){return "Komi";} - if (lang=="kon"){return "Kongo";} - if (lang=="kor"){return "Korean";} - if (lang=="kos"){return "Kosraean";} - if (lang=="kpe"){return "Kpelle";} - if (lang=="krc"){return "Karachay-Balkar";} - if (lang=="krl"){return "Karelian";} - if (lang=="kro"){return "Kru languages";} - if (lang=="kru"){return "Kurukh";} - if (lang=="kua"){return "Kuanyama; Kwanyama";} - if (lang=="kum"){return "Kumyk";} - if (lang=="kur"){return "Kurdish";} - if (lang=="kut"){return "Kutenai";} - if (lang=="lad"){return "Ladino";} - if (lang=="lah"){return "Lahnda";} - if (lang=="lam"){return "Lamba";} - if (lang=="lao"){return "Lao";} - if (lang=="lat"){return "Latin";} - if (lang=="lav"){return "Latvian";} - if (lang=="lez"){return "Lezghian";} - if (lang=="lim"){return "Limburgan; Limburger; Limburgish";} - if (lang=="lin"){return "Lingala";} - if (lang=="lit"){return "Lithuanian";} - if (lang=="lol"){return "Mongo";} - if (lang=="loz"){return "Lozi";} - if (lang=="ltz"){return "Luxembourgish; Letzeburgesch";} - if (lang=="lua"){return "Luba-Lulua";} - if (lang=="lub"){return "Luba-Katanga";} - if (lang=="lug"){return "Ganda";} - if (lang=="lui"){return "Luiseno";} - if (lang=="lun"){return "Lunda";} - if (lang=="luo"){return "Luo (Kenya and Tanzania)";} - if (lang=="lus"){return "Lushai";} - if (lang=="mac"){return "Macedonian";} - if (lang=="mad"){return "Madurese";} - if (lang=="mag"){return "Magahi";} - if (lang=="mah"){return "Marshallese";} - if (lang=="mai"){return "Maithili";} - if (lang=="mak"){return "Makasar";} - if (lang=="mal"){return "Malayalam";} - if (lang=="man"){return "Mandingo";} - if (lang=="mao"){return "Maori";} - if (lang=="map"){return "Austronesian languages";} - if (lang=="mar"){return "Marathi";} - if (lang=="mas"){return "Masai";} - if (lang=="may"){return "Malay";} - if (lang=="mdf"){return "Moksha";} - if (lang=="mdr"){return "Mandar";} - if (lang=="men"){return "Mende";} - if (lang=="mga"){return "Irish, Middle (900-1200)";} - if (lang=="mic"){return "Mi'kmaq; Micmac";} - if (lang=="min"){return "Minangkabau";} - if (lang=="mis"){return "Uncoded languages";} - if (lang=="mkd"){return "Macedonian";} - if (lang=="mkh"){return "Mon-Khmer languages";} - if (lang=="mlg"){return "Malagasy";} - if (lang=="mlt"){return "Maltese";} - if (lang=="mnc"){return "Manchu";} - if (lang=="mni"){return "Manipuri";} - if (lang=="mno"){return "Manobo languages";} - if (lang=="moh"){return "Mohawk";} - if (lang=="mon"){return "Mongolian";} - if (lang=="mos"){return "Mossi";} - if (lang=="mri"){return "Maori";} - if (lang=="msa"){return "Malay";} - if (lang=="msa"){return "Malay";} - if (lang=="mul"){return "Multiple languages";} - if (lang=="mun"){return "Munda languages";} - if (lang=="mus"){return "Creek";} - if (lang=="mwl"){return "Mirandese";} - if (lang=="mwr"){return "Marwari";} - if (lang=="mya"){return "Burmese";} - if (lang=="myn"){return "Mayan languages";} - if (lang=="myv"){return "Erzya";} - if (lang=="nah"){return "Nahuatl languages";} - if (lang=="nai"){return "North American Indian languages";} - if (lang=="nap"){return "Neapolitan";} - if (lang=="nau"){return "Nauru";} - if (lang=="nav"){return "Navajo; Navaho";} - if (lang=="nbl"){return "Ndebele, South; South Ndebele";} - if (lang=="nde"){return "Ndebele, North; North Ndebele";} - if (lang=="ndo"){return "Ndonga";} - if (lang=="nds"){return "Low German; Low Saxon; German, Low; Saxon, Low";} - if (lang=="nep"){return "Nepali";} - if (lang=="new"){return "Nepal Bhasa; Newari";} - if (lang=="nia"){return "Nias";} - if (lang=="nic"){return "Niger-Kordofanian languages";} - if (lang=="niu"){return "Niuean";} - if (lang=="nld"){return "Dutch; Flemish";} - if (lang=="nno"){return "Norwegian Nynorsk; Nynorsk, Norwegian";} - if (lang=="nob"){return "Bokmål, Norwegian; Norwegian Bokmål";} - if (lang=="nog"){return "Nogai";} - if (lang=="non"){return "Norse, Old";} - if (lang=="nor"){return "Norwegian";} - if (lang=="nqo"){return "N'Ko";} - if (lang=="nso"){return "Pedi; Sepedi; Northern Sotho";} - if (lang=="nub"){return "Nubian languages";} - if (lang=="nwc"){return "Classical Newari; Old Newari; Classical Nepal Bhasa";} - if (lang=="nya"){return "Chichewa; Chewa; Nyanja";} - if (lang=="nym"){return "Nyamwezi";} - if (lang=="nyn"){return "Nyankole";} - if (lang=="nyo"){return "Nyoro";} - if (lang=="nzi"){return "Nzima";} - if (lang=="oci"){return "Occitan (post 1500)";} - if (lang=="oji"){return "Ojibwa";} - if (lang=="ori"){return "Oriya";} - if (lang=="orm"){return "Oromo";} - if (lang=="osa"){return "Osage";} - if (lang=="oss"){return "Ossetian; Ossetic";} - if (lang=="ota"){return "Turkish, Ottoman (1500-1928)";} - if (lang=="oto"){return "Otomian languages";} - if (lang=="paa"){return "Papuan languages";} - if (lang=="pag"){return "Pangasinan";} - if (lang=="pal"){return "Pahlavi";} - if (lang=="pam"){return "Pampanga; Kapampangan";} - if (lang=="pan"){return "Panjabi; Punjabi";} - if (lang=="pap"){return "Papiamento";} - if (lang=="pau"){return "Palauan";} - if (lang=="peo"){return "Persian, Old (ca.600-400 B.C.)";} - if (lang=="per"){return "Persian";} - if (lang=="phi"){return "Philippine languages";} - if (lang=="phn"){return "Phoenician";} - if (lang=="pli"){return "Pali";} - if (lang=="pol"){return "Polish";} - if (lang=="pon"){return "Pohnpeian";} - if (lang=="por"){return "Portuguese";} - if (lang=="pra"){return "Prakrit languages";} - if (lang=="pro"){return "Provençal, Old (to 1500);Occitan, Old (to 1500)";} - if (lang=="pus"){return "Pushto; Pashto";} - if (lang=="que"){return "Quechua";} - if (lang=="raj"){return "Rajasthani";} - if (lang=="rap"){return "Rapanui";} - if (lang=="rar"){return "Rarotongan; Cook Islands Maori";} - if (lang=="roa"){return "Romance languages";} - if (lang=="roh"){return "Romansh";} - if (lang=="rom"){return "Romany";} - if (lang=="ron"){return "Romanian; Moldavian; Moldovan";} - if (lang=="rum"){return "Romanian; Moldavian; Moldovan";} - if (lang=="run"){return "Rundi";} - if (lang=="rup"){return "Aromanian; Arumanian; Macedo-Romanian";} - if (lang=="rus"){return "Russian";} - if (lang=="sad"){return "Sandawe";} - if (lang=="sag"){return "Sango";} - if (lang=="sah"){return "Yakut";} - if (lang=="sai"){return "South American Indian languages";} - if (lang=="sal"){return "Salishan languages";} - if (lang=="sam"){return "Samaritan Aramaic";} - if (lang=="san"){return "Sanskrit";} - if (lang=="sas"){return "Sasak";} - if (lang=="sat"){return "Santali";} - if (lang=="scn"){return "Sicilian";} - if (lang=="sco"){return "Scots";} - if (lang=="sel"){return "Selkup";} - if (lang=="sem"){return "Semitic languages";} - if (lang=="sga"){return "Irish, Old (to 900)";} - if (lang=="sgn"){return "Sign Languages";} - if (lang=="shn"){return "Shan";} - if (lang=="sid"){return "Sidamo";} - if (lang=="sin"){return "Sinhala; Sinhalese";} - if (lang=="sio"){return "Siouan languages";} - if (lang=="sit"){return "Sino-Tibetan languages";} - if (lang=="sla"){return "Slavic languages";} - if (lang=="slk"){return "Slovak";} - if (lang=="slo"){return "Slovak";} - if (lang=="slv"){return "Slovenian";} - if (lang=="sma"){return "Southern Sami";} - if (lang=="sme"){return "Northern Sami";} - if (lang=="smi"){return "Sami languages";} - if (lang=="smj"){return "Lule Sami";} - if (lang=="smn"){return "Inari Sami";} - if (lang=="smo"){return "Samoan";} - if (lang=="sms"){return "Skolt Sami";} - if (lang=="sna"){return "Shona";} - if (lang=="snd"){return "Sindhi";} - if (lang=="snk"){return "Soninke";} - if (lang=="sog"){return "Sogdian";} - if (lang=="som"){return "Somali";} - if (lang=="son"){return "Songhai languages";} - if (lang=="sot"){return "Sotho, Southern";} - if (lang=="spa"){return "Spanish; Castilian";} - if (lang=="sqi"){return "Albanian";} - if (lang=="srd"){return "Sardinian";} - if (lang=="srn"){return "Sranan Tongo";} - if (lang=="srp"){return "Serbian";} - if (lang=="srr"){return "Serer";} - if (lang=="ssa"){return "Nilo-Saharan languages";} - if (lang=="ssw"){return "Swati";} - if (lang=="suk"){return "Sukuma";} - if (lang=="sun"){return "Sundanese";} - if (lang=="sus"){return "Susu";} - if (lang=="sux"){return "Sumerian";} - if (lang=="swa"){return "Swahili";} - if (lang=="swe"){return "Swedish";} - if (lang=="syc"){return "Classical Syriac";} - if (lang=="syr"){return "Syriac";} - if (lang=="tah"){return "Tahitian";} - if (lang=="tai"){return "Tai languages";} - if (lang=="tam"){return "Tamil";} - if (lang=="tat"){return "Tatar";} - if (lang=="tel"){return "Telugu";} - if (lang=="tem"){return "Timne";} - if (lang=="ter"){return "Tereno";} - if (lang=="tet"){return "Tetum";} - if (lang=="tgk"){return "Tajik";} - if (lang=="tgl"){return "Tagalog";} - if (lang=="tha"){return "Thai";} - if (lang=="tib"){return "Tibetan";} - if (lang=="tig"){return "Tigre";} - if (lang=="tir"){return "Tigrinya";} - if (lang=="tiv"){return "Tiv";} - if (lang=="tkl"){return "Tokelau";} - if (lang=="tlh"){return "Klingon; tlhIngan-Hol";} - if (lang=="tli"){return "Tlingit";} - if (lang=="tmh"){return "Tamashek";} - if (lang=="tog"){return "Tonga (Nyasa)";} - if (lang=="ton"){return "Tonga (Tonga Islands)";} - if (lang=="tpi"){return "Tok Pisin";} - if (lang=="tsi"){return "Tsimshian";} - if (lang=="tsn"){return "Tswana";} - if (lang=="tso"){return "Tsonga";} - if (lang=="tuk"){return "Turkmen";} - if (lang=="tum"){return "Tumbuka";} - if (lang=="tup"){return "Tupi languages";} - if (lang=="tur"){return "Turkish";} - if (lang=="tut"){return "Altaic languages";} - if (lang=="tvl"){return "Tuvalu";} - if (lang=="twi"){return "Twi";} - if (lang=="tyv"){return "Tuvinian";} - if (lang=="udm"){return "Udmurt";} - if (lang=="uga"){return "Ugaritic";} - if (lang=="uig"){return "Uighur; Uyghur";} - if (lang=="ukr"){return "Ukrainian";} - if (lang=="umb"){return "Umbundu";} - if (lang=="urd"){return "Urdu";} - if (lang=="uzb"){return "Uzbek";} - if (lang=="vai"){return "Vai";} - if (lang=="ven"){return "Venda";} - if (lang=="vie"){return "Vietnamese";} - if (lang=="vol"){return "Volapük";} - if (lang=="vot"){return "Votic";} - if (lang=="wak"){return "Wakashan languages";} - if (lang=="wal"){return "Wolaitta; Wolaytta";} - if (lang=="war"){return "Waray";} - if (lang=="was"){return "Washo";} - if (lang=="wel"){return "Welsh";} - if (lang=="wen"){return "Sorbian languages";} - if (lang=="wln"){return "Walloon";} - if (lang=="wol"){return "Wolof";} - if (lang=="xal"){return "Kalmyk; Oirat";} - if (lang=="xho"){return "Xhosa";} - if (lang=="yao"){return "Yao";} - if (lang=="yap"){return "Yapese";} - if (lang=="yid"){return "Yiddish";} - if (lang=="yor"){return "Yoruba";} - if (lang=="ypk"){return "Yupik languages";} - if (lang=="zap"){return "Zapotec";} - if (lang=="zbl"){return "Blissymbols; Blissymbolics; Bliss";} - if (lang=="zen"){return "Zenaga";} - if (lang=="zgh"){return "Standard Moroccan Tamazight";} - if (lang=="zha"){return "Zhuang; Chuang";} - if (lang=="zho"){return "Chinese";} - if (lang=="znd"){return "Zande languages";} - if (lang=="zul"){return "Zulu";} - if (lang=="zun"){return "Zuni";} - if (lang=="zxx"){return "No linguistic content; Not applicable";} - if (lang=="zza"){return "Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki";} - return "Undetermined";// actually "und", assumed by default + std::string ISO639::decode(const std::string &lang){ + if (lang == "aar"){return "Afar";} + if (lang == "abk"){return "Abkhazian";} + if (lang == "ace"){return "Achinese";} + if (lang == "ach"){return "Acoli";} + if (lang == "ada"){return "Adangme";} + if (lang == "ady"){return "Adyghe; Adygei";} + if (lang == "afa"){return "Afro-Asiatic languages";} + if (lang == "afh"){return "Afrihili";} + if (lang == "afr"){return "Afrikaans";} + if (lang == "ain"){return "Ainu";} + if (lang == "aka"){return "Akan";} + if (lang == "akk"){return "Akkadian";} + if (lang == "alb"){return "Albanian";} + if (lang == "ale"){return "Aleut";} + if (lang == "alg"){return "Algonquian languages";} + if (lang == "alt"){return "Southern Altai";} + if (lang == "amh"){return "Amharic";} + if (lang == "ang"){return "English, Old (ca.450-1100)";} + if (lang == "anp"){return "Angika";} + if (lang == "apa"){return "Apache languages";} + if (lang == "ara"){return "Arabic";} + if (lang == "arc"){return "Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)";} + if (lang == "arg"){return "Aragonese";} + if (lang == "arm"){return "Armenian";} + if (lang == "arn"){return "Mapudungun; Mapuche";} + if (lang == "arp"){return "Arapaho";} + if (lang == "art"){return "Artificial languages";} + if (lang == "arw"){return "Arawak";} + if (lang == "asm"){return "Assamese";} + if (lang == "ast"){return "Asturian; Bable; Leonese; Asturleonese";} + if (lang == "ath"){return "Athapascan languages";} + if (lang == "aus"){return "Australian languages";} + if (lang == "ava"){return "Avaric";} + if (lang == "ave"){return "Avestan";} + if (lang == "awa"){return "Awadhi";} + if (lang == "aym"){return "Aymara";} + if (lang == "aze"){return "Azerbaijani";} + if (lang == "bad"){return "Banda languages";} + if (lang == "bai"){return "Bamileke languages";} + if (lang == "bak"){return "Bashkir";} + if (lang == "bal"){return "Baluchi";} + if (lang == "bam"){return "Bambara";} + if (lang == "ban"){return "Balinese";} + if (lang == "baq"){return "Basque";} + if (lang == "bas"){return "Basa";} + if (lang == "bat"){return "Baltic languages";} + if (lang == "bej"){return "Beja; Bedawiyet";} + if (lang == "bel"){return "Belarusian";} + if (lang == "bem"){return "Bemba";} + if (lang == "ben"){return "Bengali";} + if (lang == "ber"){return "Berber languages";} + if (lang == "bho"){return "Bhojpuri";} + if (lang == "bih"){return "Bihari languages";} + if (lang == "bik"){return "Bikol";} + if (lang == "bin"){return "Bini; Edo";} + if (lang == "bis"){return "Bislama";} + if (lang == "bla"){return "Siksika";} + if (lang == "bnt"){return "Bantu languages";} + if (lang == "bod"){return "Tibetan";} + if (lang == "bos"){return "Bosnian";} + if (lang == "bra"){return "Braj";} + if (lang == "bre"){return "Breton";} + if (lang == "btk"){return "Batak languages";} + if (lang == "bua"){return "Buriat";} + if (lang == "bug"){return "Buginese";} + if (lang == "bul"){return "Bulgarian";} + if (lang == "bur"){return "Burmese";} + if (lang == "byn"){return "Blin; Bilin";} + if (lang == "cad"){return "Caddo";} + if (lang == "cai"){return "Central American Indian languages";} + if (lang == "car"){return "Galibi Carib";} + if (lang == "cat"){return "Catalan; Valencian";} + if (lang == "cau"){return "Caucasian languages";} + if (lang == "ceb"){return "Cebuano";} + if (lang == "cel"){return "Celtic languages";} + if (lang == "ces"){return "Czech";} + if (lang == "cha"){return "Chamorro";} + if (lang == "chb"){return "Chibcha";} + if (lang == "che"){return "Chechen";} + if (lang == "chg"){return "Chagatai";} + if (lang == "chi"){return "Chinese";} + if (lang == "chk"){return "Chuukese";} + if (lang == "chm"){return "Mari";} + if (lang == "chn"){return "Chinook jargon";} + if (lang == "cho"){return "Choctaw";} + if (lang == "chp"){return "Chipewyan; Dene Suline";} + if (lang == "chr"){return "Cherokee";} + if (lang == "chu"){ + return "Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic"; + } + if (lang == "chv"){return "Chuvash";} + if (lang == "chy"){return "Cheyenne";} + if (lang == "cmc"){return "Chamic languages";} + if (lang == "cop"){return "Coptic";} + if (lang == "cor"){return "Cornish";} + if (lang == "cos"){return "Corsican";} + if (lang == "cpe"){return "Creoles and pidgins, English based";} + if (lang == "cpf"){return "Creoles and pidgins, French-based";} + if (lang == "cpp"){return "Creoles and pidgins, Portuguese-based";} + if (lang == "cre"){return "Cree";} + if (lang == "crh"){return "Crimean Tatar; Crimean Turkish";} + if (lang == "crp"){return "Creoles and pidgins";} + if (lang == "csb"){return "Kashubian";} + if (lang == "cus"){return "Cushitic languages";} + if (lang == "cym"){return "Welsh";} + if (lang == "cze"){return "Czech";} + if (lang == "cze"){return "Czech";} + if (lang == "dak"){return "Dakota";} + if (lang == "dan"){return "Danish";} + if (lang == "dar"){return "Dargwa";} + if (lang == "day"){return "Land Dayak languages";} + if (lang == "del"){return "Delaware";} + if (lang == "den"){return "Slave (Athapascan)";} + if (lang == "deu"){return "German";} + if (lang == "dgr"){return "Dogrib";} + if (lang == "din"){return "Dinka";} + if (lang == "div"){return "Divehi; Dhivehi; Maldivian";} + if (lang == "doi"){return "Dogri";} + if (lang == "dra"){return "Dravidian languages";} + if (lang == "dsb"){return "Lower Sorbian";} + if (lang == "dua"){return "Duala";} + if (lang == "dum"){return "Dutch, Middle (ca.1050-1350)";} + if (lang == "dut"){return "Dutch; Flemish";} + if (lang == "dyu"){return "Dyula";} + if (lang == "dzo"){return "Dzongkha";} + if (lang == "efi"){return "Efik";} + if (lang == "egy"){return "Egyptian (Ancient)";} + if (lang == "eka"){return "Ekajuk";} + if (lang == "ell"){return "Greek, Modern (1453-)";} + if (lang == "elx"){return "Elamite";} + if (lang == "eng"){return "English";} + if (lang == "enm"){return "English, Middle (1100-1500)";} + if (lang == "epo"){return "Esperanto";} + if (lang == "est"){return "Estonian";} + if (lang == "eus"){return "Basque";} + if (lang == "eus"){return "Basque";} + if (lang == "ewe"){return "Ewe";} + if (lang == "ewo"){return "Ewondo";} + if (lang == "fan"){return "Fang";} + if (lang == "fao"){return "Faroese";} + if (lang == "fas"){return "Persian";} + if (lang == "fas"){return "Persian";} + if (lang == "fat"){return "Fanti";} + if (lang == "fij"){return "Fijian";} + if (lang == "fil"){return "Filipino; Pilipino";} + if (lang == "fin"){return "Finnish";} + if (lang == "fiu"){return "Finno-Ugrian languages";} + if (lang == "fon"){return "Fon";} + if (lang == "fra"){return "French";} + if (lang == "fre"){return "French";} + if (lang == "frm"){return "French, Middle (ca.1400-1600)";} + if (lang == "fro"){return "French, Old (842-ca.1400)";} + if (lang == "frr"){return "Northern Frisian";} + if (lang == "frs"){return "Eastern Frisian";} + if (lang == "fry"){return "Western Frisian";} + if (lang == "ful"){return "Fulah";} + if (lang == "fur"){return "Friulian";} + if (lang == "gaa"){return "Ga";} + if (lang == "gay"){return "Gayo";} + if (lang == "gba"){return "Gbaya";} + if (lang == "gem"){return "Germanic languages";} + if (lang == "geo"){return "Georgian";} + if (lang == "ger"){return "German";} + if (lang == "gez"){return "Geez";} + if (lang == "gil"){return "Gilbertese";} + if (lang == "gla"){return "Gaelic; Scottish Gaelic";} + if (lang == "gle"){return "Irish";} + if (lang == "glg"){return "Galician";} + if (lang == "glv"){return "Manx";} + if (lang == "gmh"){return "German, Middle High (ca.1050-1500)";} + if (lang == "goh"){return "German, Old High (ca.750-1050)";} + if (lang == "gon"){return "Gondi";} + if (lang == "gor"){return "Gorontalo";} + if (lang == "got"){return "Gothic";} + if (lang == "grb"){return "Grebo";} + if (lang == "grc"){return "Greek, Ancient (to 1453)";} + if (lang == "gre"){return "Greek, Modern (1453-)";} + if (lang == "grn"){return "Guarani";} + if (lang == "gsw"){return "Swiss German; Alemannic; Alsatian";} + if (lang == "guj"){return "Gujarati";} + if (lang == "gwi"){return "Gwich'in";} + if (lang == "hai"){return "Haida";} + if (lang == "hat"){return "Haitian; Haitian Creole";} + if (lang == "hau"){return "Hausa";} + if (lang == "haw"){return "Hawaiian";} + if (lang == "heb"){return "Hebrew";} + if (lang == "her"){return "Herero";} + if (lang == "hil"){return "Hiligaynon";} + if (lang == "him"){return "Himachali languages; Western Pahari languages";} + if (lang == "hin"){return "Hindi";} + if (lang == "hit"){return "Hittite";} + if (lang == "hmn"){return "Hmong; Mong";} + if (lang == "hmo"){return "Hiri Motu";} + if (lang == "hrv"){return "Croatian";} + if (lang == "hsb"){return "Upper Sorbian";} + if (lang == "hun"){return "Hungarian";} + if (lang == "hup"){return "Hupa";} + if (lang == "hye"){return "Armenian";} + if (lang == "iba"){return "Iban";} + if (lang == "ibo"){return "Igbo";} + if (lang == "ice"){return "Icelandic";} + if (lang == "ido"){return "Ido";} + if (lang == "iii"){return "Sichuan Yi; Nuosu";} + if (lang == "ijo"){return "Ijo languages";} + if (lang == "iku"){return "Inuktitut";} + if (lang == "ile"){return "Interlingue; Occidental";} + if (lang == "ilo"){return "Iloko";} + if (lang == "ina"){return "Interlingua (International Auxiliary Language Association)";} + if (lang == "inc"){return "Indic languages";} + if (lang == "ind"){return "Indonesian";} + if (lang == "ine"){return "Indo-European languages";} + if (lang == "inh"){return "Ingush";} + if (lang == "ipk"){return "Inupiaq";} + if (lang == "ira"){return "Iranian languages";} + if (lang == "iro"){return "Iroquoian languages";} + if (lang == "isl"){return "Icelandic";} + if (lang == "ita"){return "Italian";} + if (lang == "jav"){return "Javanese";} + if (lang == "jbo"){return "Lojban";} + if (lang == "jpn"){return "Japanese";} + if (lang == "jpr"){return "Judeo-Persian";} + if (lang == "jrb"){return "Judeo-Arabic";} + if (lang == "kaa"){return "Kara-Kalpak";} + if (lang == "kab"){return "Kabyle";} + if (lang == "kac"){return "Kachin; Jingpho";} + if (lang == "kal"){return "Kalaallisut; Greenlandic";} + if (lang == "kam"){return "Kamba";} + if (lang == "kan"){return "Kannada";} + if (lang == "kar"){return "Karen languages";} + if (lang == "kas"){return "Kashmiri";} + if (lang == "kat"){return "Georgian";} + if (lang == "kau"){return "Kanuri";} + if (lang == "kaw"){return "Kawi";} + if (lang == "kaz"){return "Kazakh";} + if (lang == "kbd"){return "Kabardian";} + if (lang == "kha"){return "Khasi";} + if (lang == "khi"){return "Khoisan languages";} + if (lang == "khm"){return "Central Khmer";} + if (lang == "kho"){return "Khotanese; Sakan";} + if (lang == "kik"){return "Kikuyu; Gikuyu";} + if (lang == "kin"){return "Kinyarwanda";} + if (lang == "kir"){return "Kirghiz; Kyrgyz";} + if (lang == "kmb"){return "Kimbundu";} + if (lang == "kok"){return "Konkani";} + if (lang == "kom"){return "Komi";} + if (lang == "kon"){return "Kongo";} + if (lang == "kor"){return "Korean";} + if (lang == "kos"){return "Kosraean";} + if (lang == "kpe"){return "Kpelle";} + if (lang == "krc"){return "Karachay-Balkar";} + if (lang == "krl"){return "Karelian";} + if (lang == "kro"){return "Kru languages";} + if (lang == "kru"){return "Kurukh";} + if (lang == "kua"){return "Kuanyama; Kwanyama";} + if (lang == "kum"){return "Kumyk";} + if (lang == "kur"){return "Kurdish";} + if (lang == "kut"){return "Kutenai";} + if (lang == "lad"){return "Ladino";} + if (lang == "lah"){return "Lahnda";} + if (lang == "lam"){return "Lamba";} + if (lang == "lao"){return "Lao";} + if (lang == "lat"){return "Latin";} + if (lang == "lav"){return "Latvian";} + if (lang == "lez"){return "Lezghian";} + if (lang == "lim"){return "Limburgan; Limburger; Limburgish";} + if (lang == "lin"){return "Lingala";} + if (lang == "lit"){return "Lithuanian";} + if (lang == "lol"){return "Mongo";} + if (lang == "loz"){return "Lozi";} + if (lang == "ltz"){return "Luxembourgish; Letzeburgesch";} + if (lang == "lua"){return "Luba-Lulua";} + if (lang == "lub"){return "Luba-Katanga";} + if (lang == "lug"){return "Ganda";} + if (lang == "lui"){return "Luiseno";} + if (lang == "lun"){return "Lunda";} + if (lang == "luo"){return "Luo (Kenya and Tanzania)";} + if (lang == "lus"){return "Lushai";} + if (lang == "mac"){return "Macedonian";} + if (lang == "mad"){return "Madurese";} + if (lang == "mag"){return "Magahi";} + if (lang == "mah"){return "Marshallese";} + if (lang == "mai"){return "Maithili";} + if (lang == "mak"){return "Makasar";} + if (lang == "mal"){return "Malayalam";} + if (lang == "man"){return "Mandingo";} + if (lang == "mao"){return "Maori";} + if (lang == "map"){return "Austronesian languages";} + if (lang == "mar"){return "Marathi";} + if (lang == "mas"){return "Masai";} + if (lang == "may"){return "Malay";} + if (lang == "mdf"){return "Moksha";} + if (lang == "mdr"){return "Mandar";} + if (lang == "men"){return "Mende";} + if (lang == "mga"){return "Irish, Middle (900-1200)";} + if (lang == "mic"){return "Mi'kmaq; Micmac";} + if (lang == "min"){return "Minangkabau";} + if (lang == "mis"){return "Uncoded languages";} + if (lang == "mkd"){return "Macedonian";} + if (lang == "mkh"){return "Mon-Khmer languages";} + if (lang == "mlg"){return "Malagasy";} + if (lang == "mlt"){return "Maltese";} + if (lang == "mnc"){return "Manchu";} + if (lang == "mni"){return "Manipuri";} + if (lang == "mno"){return "Manobo languages";} + if (lang == "moh"){return "Mohawk";} + if (lang == "mon"){return "Mongolian";} + if (lang == "mos"){return "Mossi";} + if (lang == "mri"){return "Maori";} + if (lang == "msa"){return "Malay";} + if (lang == "msa"){return "Malay";} + if (lang == "mul"){return "Multiple languages";} + if (lang == "mun"){return "Munda languages";} + if (lang == "mus"){return "Creek";} + if (lang == "mwl"){return "Mirandese";} + if (lang == "mwr"){return "Marwari";} + if (lang == "mya"){return "Burmese";} + if (lang == "myn"){return "Mayan languages";} + if (lang == "myv"){return "Erzya";} + if (lang == "nah"){return "Nahuatl languages";} + if (lang == "nai"){return "North American Indian languages";} + if (lang == "nap"){return "Neapolitan";} + if (lang == "nau"){return "Nauru";} + if (lang == "nav"){return "Navajo; Navaho";} + if (lang == "nbl"){return "Ndebele, South; South Ndebele";} + if (lang == "nde"){return "Ndebele, North; North Ndebele";} + if (lang == "ndo"){return "Ndonga";} + if (lang == "nds"){return "Low German; Low Saxon; German, Low; Saxon, Low";} + if (lang == "nep"){return "Nepali";} + if (lang == "new"){return "Nepal Bhasa; Newari";} + if (lang == "nia"){return "Nias";} + if (lang == "nic"){return "Niger-Kordofanian languages";} + if (lang == "niu"){return "Niuean";} + if (lang == "nld"){return "Dutch; Flemish";} + if (lang == "nno"){return "Norwegian Nynorsk; Nynorsk, Norwegian";} + if (lang == "nob"){return "Bokmål, Norwegian; Norwegian Bokmål";} + if (lang == "nog"){return "Nogai";} + if (lang == "non"){return "Norse, Old";} + if (lang == "nor"){return "Norwegian";} + if (lang == "nqo"){return "N'Ko";} + if (lang == "nso"){return "Pedi; Sepedi; Northern Sotho";} + if (lang == "nub"){return "Nubian languages";} + if (lang == "nwc"){return "Classical Newari; Old Newari; Classical Nepal Bhasa";} + if (lang == "nya"){return "Chichewa; Chewa; Nyanja";} + if (lang == "nym"){return "Nyamwezi";} + if (lang == "nyn"){return "Nyankole";} + if (lang == "nyo"){return "Nyoro";} + if (lang == "nzi"){return "Nzima";} + if (lang == "oci"){return "Occitan (post 1500)";} + if (lang == "oji"){return "Ojibwa";} + if (lang == "ori"){return "Oriya";} + if (lang == "orm"){return "Oromo";} + if (lang == "osa"){return "Osage";} + if (lang == "oss"){return "Ossetian; Ossetic";} + if (lang == "ota"){return "Turkish, Ottoman (1500-1928)";} + if (lang == "oto"){return "Otomian languages";} + if (lang == "paa"){return "Papuan languages";} + if (lang == "pag"){return "Pangasinan";} + if (lang == "pal"){return "Pahlavi";} + if (lang == "pam"){return "Pampanga; Kapampangan";} + if (lang == "pan"){return "Panjabi; Punjabi";} + if (lang == "pap"){return "Papiamento";} + if (lang == "pau"){return "Palauan";} + if (lang == "peo"){return "Persian, Old (ca.600-400 B.C.)";} + if (lang == "per"){return "Persian";} + if (lang == "phi"){return "Philippine languages";} + if (lang == "phn"){return "Phoenician";} + if (lang == "pli"){return "Pali";} + if (lang == "pol"){return "Polish";} + if (lang == "pon"){return "Pohnpeian";} + if (lang == "por"){return "Portuguese";} + if (lang == "pra"){return "Prakrit languages";} + if (lang == "pro"){return "Provençal, Old (to 1500);Occitan, Old (to 1500)";} + if (lang == "pus"){return "Pushto; Pashto";} + if (lang == "que"){return "Quechua";} + if (lang == "raj"){return "Rajasthani";} + if (lang == "rap"){return "Rapanui";} + if (lang == "rar"){return "Rarotongan; Cook Islands Maori";} + if (lang == "roa"){return "Romance languages";} + if (lang == "roh"){return "Romansh";} + if (lang == "rom"){return "Romany";} + if (lang == "ron"){return "Romanian; Moldavian; Moldovan";} + if (lang == "rum"){return "Romanian; Moldavian; Moldovan";} + if (lang == "run"){return "Rundi";} + if (lang == "rup"){return "Aromanian; Arumanian; Macedo-Romanian";} + if (lang == "rus"){return "Russian";} + if (lang == "sad"){return "Sandawe";} + if (lang == "sag"){return "Sango";} + if (lang == "sah"){return "Yakut";} + if (lang == "sai"){return "South American Indian languages";} + if (lang == "sal"){return "Salishan languages";} + if (lang == "sam"){return "Samaritan Aramaic";} + if (lang == "san"){return "Sanskrit";} + if (lang == "sas"){return "Sasak";} + if (lang == "sat"){return "Santali";} + if (lang == "scn"){return "Sicilian";} + if (lang == "sco"){return "Scots";} + if (lang == "sel"){return "Selkup";} + if (lang == "sem"){return "Semitic languages";} + if (lang == "sga"){return "Irish, Old (to 900)";} + if (lang == "sgn"){return "Sign Languages";} + if (lang == "shn"){return "Shan";} + if (lang == "sid"){return "Sidamo";} + if (lang == "sin"){return "Sinhala; Sinhalese";} + if (lang == "sio"){return "Siouan languages";} + if (lang == "sit"){return "Sino-Tibetan languages";} + if (lang == "sla"){return "Slavic languages";} + if (lang == "slk"){return "Slovak";} + if (lang == "slo"){return "Slovak";} + if (lang == "slv"){return "Slovenian";} + if (lang == "sma"){return "Southern Sami";} + if (lang == "sme"){return "Northern Sami";} + if (lang == "smi"){return "Sami languages";} + if (lang == "smj"){return "Lule Sami";} + if (lang == "smn"){return "Inari Sami";} + if (lang == "smo"){return "Samoan";} + if (lang == "sms"){return "Skolt Sami";} + if (lang == "sna"){return "Shona";} + if (lang == "snd"){return "Sindhi";} + if (lang == "snk"){return "Soninke";} + if (lang == "sog"){return "Sogdian";} + if (lang == "som"){return "Somali";} + if (lang == "son"){return "Songhai languages";} + if (lang == "sot"){return "Sotho, Southern";} + if (lang == "spa"){return "Spanish; Castilian";} + if (lang == "sqi"){return "Albanian";} + if (lang == "srd"){return "Sardinian";} + if (lang == "srn"){return "Sranan Tongo";} + if (lang == "srp"){return "Serbian";} + if (lang == "srr"){return "Serer";} + if (lang == "ssa"){return "Nilo-Saharan languages";} + if (lang == "ssw"){return "Swati";} + if (lang == "suk"){return "Sukuma";} + if (lang == "sun"){return "Sundanese";} + if (lang == "sus"){return "Susu";} + if (lang == "sux"){return "Sumerian";} + if (lang == "swa"){return "Swahili";} + if (lang == "swe"){return "Swedish";} + if (lang == "syc"){return "Classical Syriac";} + if (lang == "syr"){return "Syriac";} + if (lang == "tah"){return "Tahitian";} + if (lang == "tai"){return "Tai languages";} + if (lang == "tam"){return "Tamil";} + if (lang == "tat"){return "Tatar";} + if (lang == "tel"){return "Telugu";} + if (lang == "tem"){return "Timne";} + if (lang == "ter"){return "Tereno";} + if (lang == "tet"){return "Tetum";} + if (lang == "tgk"){return "Tajik";} + if (lang == "tgl"){return "Tagalog";} + if (lang == "tha"){return "Thai";} + if (lang == "tib"){return "Tibetan";} + if (lang == "tig"){return "Tigre";} + if (lang == "tir"){return "Tigrinya";} + if (lang == "tiv"){return "Tiv";} + if (lang == "tkl"){return "Tokelau";} + if (lang == "tlh"){return "Klingon; tlhIngan-Hol";} + if (lang == "tli"){return "Tlingit";} + if (lang == "tmh"){return "Tamashek";} + if (lang == "tog"){return "Tonga (Nyasa)";} + if (lang == "ton"){return "Tonga (Tonga Islands)";} + if (lang == "tpi"){return "Tok Pisin";} + if (lang == "tsi"){return "Tsimshian";} + if (lang == "tsn"){return "Tswana";} + if (lang == "tso"){return "Tsonga";} + if (lang == "tuk"){return "Turkmen";} + if (lang == "tum"){return "Tumbuka";} + if (lang == "tup"){return "Tupi languages";} + if (lang == "tur"){return "Turkish";} + if (lang == "tut"){return "Altaic languages";} + if (lang == "tvl"){return "Tuvalu";} + if (lang == "twi"){return "Twi";} + if (lang == "tyv"){return "Tuvinian";} + if (lang == "udm"){return "Udmurt";} + if (lang == "uga"){return "Ugaritic";} + if (lang == "uig"){return "Uighur; Uyghur";} + if (lang == "ukr"){return "Ukrainian";} + if (lang == "umb"){return "Umbundu";} + if (lang == "urd"){return "Urdu";} + if (lang == "uzb"){return "Uzbek";} + if (lang == "vai"){return "Vai";} + if (lang == "ven"){return "Venda";} + if (lang == "vie"){return "Vietnamese";} + if (lang == "vol"){return "Volapük";} + if (lang == "vot"){return "Votic";} + if (lang == "wak"){return "Wakashan languages";} + if (lang == "wal"){return "Wolaitta; Wolaytta";} + if (lang == "war"){return "Waray";} + if (lang == "was"){return "Washo";} + if (lang == "wel"){return "Welsh";} + if (lang == "wen"){return "Sorbian languages";} + if (lang == "wln"){return "Walloon";} + if (lang == "wol"){return "Wolof";} + if (lang == "xal"){return "Kalmyk; Oirat";} + if (lang == "xho"){return "Xhosa";} + if (lang == "yao"){return "Yao";} + if (lang == "yap"){return "Yapese";} + if (lang == "yid"){return "Yiddish";} + if (lang == "yor"){return "Yoruba";} + if (lang == "ypk"){return "Yupik languages";} + if (lang == "zap"){return "Zapotec";} + if (lang == "zbl"){return "Blissymbols; Blissymbolics; Bliss";} + if (lang == "zen"){return "Zenaga";} + if (lang == "zgh"){return "Standard Moroccan Tamazight";} + if (lang == "zha"){return "Zhuang; Chuang";} + if (lang == "zho"){return "Chinese";} + if (lang == "znd"){return "Zande languages";} + if (lang == "zul"){return "Zulu";} + if (lang == "zun"){return "Zuni";} + if (lang == "zxx"){return "No linguistic content; Not applicable";} + if (lang == "zza"){return "Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki";} + return "Undetermined"; // actually "und", assumed by default } + std::string ISO639::twoToThree(const std::string &lang){ + if (lang == "aa"){return "aar";} + if (lang == "ab"){return "abk";} + if (lang == "ae"){return "ave";} + if (lang == "af"){return "afr";} + if (lang == "ak"){return "aka";} + if (lang == "am"){return "amh";} + if (lang == "an"){return "arg";} + if (lang == "ar"){return "ara";} + if (lang == "as"){return "asm";} + if (lang == "av"){return "ava";} + if (lang == "ay"){return "aym";} + if (lang == "az"){return "aze";} + if (lang == "ba"){return "bak";} + if (lang == "be"){return "bel";} + if (lang == "bg"){return "bul";} + if (lang == "bh"){return "bih";} + if (lang == "bi"){return "bis";} + if (lang == "bm"){return "bam";} + if (lang == "bn"){return "ben";} + if (lang == "bo"){return "bod";} + if (lang == "br"){return "bre";} + if (lang == "bs"){return "bos";} + if (lang == "ca"){return "cat";} + if (lang == "ce"){return "che";} + if (lang == "ch"){return "cha";} + if (lang == "co"){return "cos";} + if (lang == "cr"){return "cre";} + if (lang == "cs"){return "ces";} + if (lang == "cu"){return "chu";} + if (lang == "cv"){return "chv";} + if (lang == "cy"){return "cym";} + if (lang == "da"){return "dan";} + if (lang == "de"){return "deu";} + if (lang == "dv"){return "div";} + if (lang == "dz"){return "dzo";} + if (lang == "ee"){return "ewe";} + if (lang == "el"){return "ell";} + if (lang == "en"){return "eng";} + if (lang == "eo"){return "epo";} + if (lang == "es"){return "spa";} + if (lang == "et"){return "est";} + if (lang == "eu"){return "eus";} + if (lang == "fa"){return "fas";} + if (lang == "ff"){return "ful";} + if (lang == "fi"){return "fin";} + if (lang == "fj"){return "fij";} + if (lang == "fo"){return "fao";} + if (lang == "fr"){return "fra";} + if (lang == "fy"){return "fry";} + if (lang == "ga"){return "gle";} + if (lang == "gd"){return "gla";} + if (lang == "gl"){return "glg";} + if (lang == "gn"){return "grn";} + if (lang == "gu"){return "guj";} + if (lang == "gv"){return "glv";} + if (lang == "ha"){return "hau";} + if (lang == "he"){return "heb";} + if (lang == "hi"){return "hin";} + if (lang == "ho"){return "hmo";} + if (lang == "hr"){return "hrv";} + if (lang == "ht"){return "hat";} + if (lang == "hu"){return "hun";} + if (lang == "hy"){return "hye";} + if (lang == "hz"){return "her";} + if (lang == "ia"){return "ina";} + if (lang == "id"){return "ind";} + if (lang == "ie"){return "ile";} + if (lang == "ig"){return "ibo";} + if (lang == "ii"){return "iii";} + if (lang == "ik"){return "ipk";} + if (lang == "io"){return "ido";} + if (lang == "is"){return "isl";} + if (lang == "it"){return "ita";} + if (lang == "iu"){return "iku";} + if (lang == "ja"){return "jpn";} + if (lang == "jv"){return "jav";} + if (lang == "ka"){return "kat";} + if (lang == "kg"){return "kon";} + if (lang == "ki"){return "kik";} + if (lang == "kj"){return "kua";} + if (lang == "kk"){return "kaz";} + if (lang == "kl"){return "kal";} + if (lang == "km"){return "khm";} + if (lang == "kn"){return "kan";} + if (lang == "ko"){return "kor";} + if (lang == "kr"){return "kau";} + if (lang == "ks"){return "kas";} + if (lang == "ku"){return "kur";} + if (lang == "kv"){return "kom";} + if (lang == "kw"){return "cor";} + if (lang == "ky"){return "kir";} + if (lang == "la"){return "lat";} + if (lang == "lb"){return "ltz";} + if (lang == "lg"){return "lug";} + if (lang == "li"){return "lim";} + if (lang == "ln"){return "lin";} + if (lang == "lo"){return "lao";} + if (lang == "lt"){return "lit";} + if (lang == "lu"){return "lub";} + if (lang == "lv"){return "lav";} + if (lang == "mg"){return "mlg";} + if (lang == "mh"){return "mah";} + if (lang == "mi"){return "mri";} + if (lang == "mk"){return "mkd";} + if (lang == "ml"){return "mal";} + if (lang == "mn"){return "mon";} + if (lang == "mr"){return "mar";} + if (lang == "ms"){return "msa";} + if (lang == "mt"){return "mlt";} + if (lang == "my"){return "mya";} + if (lang == "na"){return "nau";} + if (lang == "nb"){return "nob";} + if (lang == "nd"){return "nde";} + if (lang == "ne"){return "nep";} + if (lang == "ng"){return "ndo";} + if (lang == "nl"){return "nld";} + if (lang == "nn"){return "nno";} + if (lang == "no"){return "nor";} + if (lang == "nr"){return "nbl";} + if (lang == "nv"){return "nav";} + if (lang == "ny"){return "nya";} + if (lang == "oc"){return "oci";} + if (lang == "oj"){return "oji";} + if (lang == "om"){return "orm";} + if (lang == "or"){return "ori";} + if (lang == "os"){return "oss";} + if (lang == "pa"){return "pan";} + if (lang == "pi"){return "pli";} + if (lang == "pl"){return "pol";} + if (lang == "ps"){return "pus";} + if (lang == "pt"){return "por";} + if (lang == "qu"){return "que";} + if (lang == "rm"){return "roh";} + if (lang == "rn"){return "run";} + if (lang == "ro"){return "ron";} + if (lang == "ru"){return "rus";} + if (lang == "rw"){return "kin";} + if (lang == "sa"){return "san";} + if (lang == "sc"){return "srd";} + if (lang == "sd"){return "snd";} + if (lang == "se"){return "sme";} + if (lang == "sg"){return "sag";} + if (lang == "sh"){return "hbs";} + if (lang == "si"){return "sin";} + if (lang == "sk"){return "slk";} + if (lang == "sl"){return "slv";} + if (lang == "sm"){return "smo";} + if (lang == "sn"){return "sna";} + if (lang == "so"){return "som";} + if (lang == "sq"){return "sqi";} + if (lang == "sr"){return "srp";} + if (lang == "ss"){return "ssw";} + if (lang == "st"){return "sot";} + if (lang == "su"){return "sun";} + if (lang == "sv"){return "swe";} + if (lang == "sw"){return "swa";} + if (lang == "ta"){return "tam";} + if (lang == "te"){return "tel";} + if (lang == "tg"){return "tgk";} + if (lang == "th"){return "tha";} + if (lang == "ti"){return "tir";} + if (lang == "tk"){return "tuk";} + if (lang == "tl"){return "tgl";} + if (lang == "tn"){return "tsn";} + if (lang == "to"){return "ton";} + if (lang == "tr"){return "tur";} + if (lang == "ts"){return "tso";} + if (lang == "tt"){return "tat";} + if (lang == "tw"){return "twi";} + if (lang == "ty"){return "tah";} + if (lang == "ug"){return "uig";} + if (lang == "uk"){return "ukr";} + if (lang == "ur"){return "urd";} + if (lang == "uz"){return "uzb";} + if (lang == "ve"){return "ven";} + if (lang == "vi"){return "vie";} + if (lang == "vo"){return "vol";} + if (lang == "wa"){return "wln";} + if (lang == "wo"){return "wol";} + if (lang == "xh"){return "xho";} + if (lang == "yi"){return "yid";} + if (lang == "yo"){return "yor";} + if (lang == "za"){return "zha";} + if (lang == "zh"){return "zho";} + if (lang == "zu"){return "zul";} + return "und"; + } + std::string ISO639::encode(const std::string &lang){ + if (lang == "Afar"){return "aar";} + if (lang == "Abkhazian"){return "abk";} + if (lang == "Achinese"){return "ace";} + if (lang == "Acoli"){return "ach";} + if (lang == "Adangme"){return "ada";} + if (lang == "Adyghe; Adygei"){return "ady";} + if (lang == "Afro-Asiatic languages"){return "afa";} + if (lang == "Afrihili"){return "afh";} + if (lang == "Afrikaans"){return "afr";} + if (lang == "Ainu"){return "ain";} + if (lang == "Akan"){return "aka";} + if (lang == "Akkadian"){return "akk";} + if (lang == "Albanian"){return "alb";} + if (lang == "Aleut"){return "ale";} + if (lang == "Algonquian languages"){return "alg";} + if (lang == "Southern Altai"){return "alt";} + if (lang == "Amharic"){return "amh";} + if (lang == "English, Old (ca.450-1100)"){return "ang";} + if (lang == "Angika"){return "anp";} + if (lang == "Apache languages"){return "apa";} + if (lang == "Arabic"){return "ara";} + if (lang == "Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)"){return "arc";} + if (lang == "Aragonese"){return "arg";} + if (lang == "Armenian"){return "arm";} + if (lang == "Mapudungun; Mapuche"){return "arn";} + if (lang == "Arapaho"){return "arp";} + if (lang == "Artificial languages"){return "art";} + if (lang == "Arawak"){return "arw";} + if (lang == "Assamese"){return "asm";} + if (lang == "Asturian; Bable; Leonese; Asturleonese"){return "ast";} + if (lang == "Athapascan languages"){return "ath";} + if (lang == "Australian languages"){return "aus";} + if (lang == "Avaric"){return "ava";} + if (lang == "Avestan"){return "ave";} + if (lang == "Awadhi"){return "awa";} + if (lang == "Aymara"){return "aym";} + if (lang == "Azerbaijani"){return "aze";} + if (lang == "Banda languages"){return "bad";} + if (lang == "Bamileke languages"){return "bai";} + if (lang == "Bashkir"){return "bak";} + if (lang == "Baluchi"){return "bal";} + if (lang == "Bambara"){return "bam";} + if (lang == "Balinese"){return "ban";} + if (lang == "Basque"){return "baq";} + if (lang == "Basa"){return "bas";} + if (lang == "Baltic languages"){return "bat";} + if (lang == "Beja; Bedawiyet"){return "bej";} + if (lang == "Belarusian"){return "bel";} + if (lang == "Bemba"){return "bem";} + if (lang == "Bengali"){return "ben";} + if (lang == "Berber languages"){return "ber";} + if (lang == "Bhojpuri"){return "bho";} + if (lang == "Bihari languages"){return "bih";} + if (lang == "Bikol"){return "bik";} + if (lang == "Bini; Edo"){return "bin";} + if (lang == "Bislama"){return "bis";} + if (lang == "Siksika"){return "bla";} + if (lang == "Bantu languages"){return "bnt";} + if (lang == "Tibetan"){return "bod";} + if (lang == "Bosnian"){return "bos";} + if (lang == "Braj"){return "bra";} + if (lang == "Breton"){return "bre";} + if (lang == "Batak languages"){return "btk";} + if (lang == "Buriat"){return "bua";} + if (lang == "Buginese"){return "bug";} + if (lang == "Bulgarian"){return "bul";} + if (lang == "Burmese"){return "bur";} + if (lang == "Blin; Bilin"){return "byn";} + if (lang == "Caddo"){return "cad";} + if (lang == "Central American Indian languages"){return "cai";} + if (lang == "Galibi Carib"){return "car";} + if (lang == "Catalan; Valencian"){return "cat";} + if (lang == "Caucasian languages"){return "cau";} + if (lang == "Cebuano"){return "ceb";} + if (lang == "Celtic languages"){return "cel";} + if (lang == "Czech"){return "ces";} + if (lang == "Chamorro"){return "cha";} + if (lang == "Chibcha"){return "chb";} + if (lang == "Chechen"){return "che";} + if (lang == "Chagatai"){return "chg";} + if (lang == "Chinese"){return "chi";} + if (lang == "Chuukese"){return "chk";} + if (lang == "Mari"){return "chm";} + if (lang == "Chinook jargon"){return "chn";} + if (lang == "Choctaw"){return "cho";} + if (lang == "Chipewyan; Dene Suline"){return "chp";} + if (lang == "Cherokee"){return "chr";} + if (lang == + "Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic"){ + return "chu"; + } + if (lang == "Chuvash"){return "chv";} + if (lang == "Cheyenne"){return "chy";} + if (lang == "Chamic languages"){return "cmc";} + if (lang == "Coptic"){return "cop";} + if (lang == "Cornish"){return "cor";} + if (lang == "Corsican"){return "cos";} + if (lang == "Creoles and pidgins, English based"){return "cpe";} + if (lang == "Creoles and pidgins, French-based"){return "cpf";} + if (lang == "Creoles and pidgins, Portuguese-based"){return "cpp";} + if (lang == "Cree"){return "cre";} + if (lang == "Crimean Tatar; Crimean Turkish"){return "crh";} + if (lang == "Creoles and pidgins"){return "crp";} + if (lang == "Kashubian"){return "csb";} + if (lang == "Cushitic languages"){return "cus";} + if (lang == "Welsh"){return "cym";} + if (lang == "Czech"){return "cze";} + if (lang == "Czech"){return "cze";} + if (lang == "Dakota"){return "dak";} + if (lang == "Danish"){return "dan";} + if (lang == "Dargwa"){return "dar";} + if (lang == "Land Dayak languages"){return "day";} + if (lang == "Delaware"){return "del";} + if (lang == "Slave (Athapascan)"){return "den";} + if (lang == "German"){return "deu";} + if (lang == "Dogrib"){return "dgr";} + if (lang == "Dinka"){return "din";} + if (lang == "Divehi; Dhivehi; Maldivian"){return "div";} + if (lang == "Dogri"){return "doi";} + if (lang == "Dravidian languages"){return "dra";} + if (lang == "Lower Sorbian"){return "dsb";} + if (lang == "Duala"){return "dua";} + if (lang == "Dutch, Middle (ca.1050-1350)"){return "dum";} + if (lang == "Dutch; Flemish"){return "dut";} + if (lang == "Dyula"){return "dyu";} + if (lang == "Dzongkha"){return "dzo";} + if (lang == "Efik"){return "efi";} + if (lang == "Egyptian (Ancient)"){return "egy";} + if (lang == "Ekajuk"){return "eka";} + if (lang == "Greek, Modern (1453-)"){return "ell";} + if (lang == "Elamite"){return "elx";} + if (lang == "English"){return "eng";} + if (lang == "English, Middle (1100-1500)"){return "enm";} + if (lang == "Esperanto"){return "epo";} + if (lang == "Estonian"){return "est";} + if (lang == "Basque"){return "eus";} + if (lang == "Basque"){return "eus";} + if (lang == "Ewe"){return "ewe";} + if (lang == "Ewondo"){return "ewo";} + if (lang == "Fang"){return "fan";} + if (lang == "Faroese"){return "fao";} + if (lang == "Persian"){return "fas";} + if (lang == "Persian"){return "fas";} + if (lang == "Fanti"){return "fat";} + if (lang == "Fijian"){return "fij";} + if (lang == "Filipino; Pilipino"){return "fil";} + if (lang == "Finnish"){return "fin";} + if (lang == "Finno-Ugrian languages"){return "fiu";} + if (lang == "Fon"){return "fon";} + if (lang == "French"){return "fra";} + if (lang == "French"){return "fre";} + if (lang == "French, Middle (ca.1400-1600)"){return "frm";} + if (lang == "French, Old (842-ca.1400)"){return "fro";} + if (lang == "Northern Frisian"){return "frr";} + if (lang == "Eastern Frisian"){return "frs";} + if (lang == "Western Frisian"){return "fry";} + if (lang == "Fulah"){return "ful";} + if (lang == "Friulian"){return "fur";} + if (lang == "Ga"){return "gaa";} + if (lang == "Gayo"){return "gay";} + if (lang == "Gbaya"){return "gba";} + if (lang == "Germanic languages"){return "gem";} + if (lang == "Georgian"){return "geo";} + if (lang == "German"){return "ger";} + if (lang == "Geez"){return "gez";} + if (lang == "Gilbertese"){return "gil";} + if (lang == "Gaelic; Scottish Gaelic"){return "gla";} + if (lang == "Irish"){return "gle";} + if (lang == "Galician"){return "glg";} + if (lang == "Manx"){return "glv";} + if (lang == "German, Middle High (ca.1050-1500)"){return "gmh";} + if (lang == "German, Old High (ca.750-1050)"){return "goh";} + if (lang == "Gondi"){return "gon";} + if (lang == "Gorontalo"){return "gor";} + if (lang == "Gothic"){return "got";} + if (lang == "Grebo"){return "grb";} + if (lang == "Greek, Ancient (to 1453)"){return "grc";} + if (lang == "Greek, Modern (1453-)"){return "gre";} + if (lang == "Guarani"){return "grn";} + if (lang == "Swiss German; Alemannic; Alsatian"){return "gsw";} + if (lang == "Gujarati"){return "guj";} + if (lang == "Gwich'in"){return "gwi";} + if (lang == "Haida"){return "hai";} + if (lang == "Haitian; Haitian Creole"){return "hat";} + if (lang == "Hausa"){return "hau";} + if (lang == "Hawaiian"){return "haw";} + if (lang == "Hebrew"){return "heb";} + if (lang == "Herero"){return "her";} + if (lang == "Hiligaynon"){return "hil";} + if (lang == "Himachali languages; Western Pahari languages"){return "him";} + if (lang == "Hindi"){return "hin";} + if (lang == "Hittite"){return "hit";} + if (lang == "Hmong; Mong"){return "hmn";} + if (lang == "Hiri Motu"){return "hmo";} + if (lang == "Croatian"){return "hrv";} + if (lang == "Upper Sorbian"){return "hsb";} + if (lang == "Hungarian"){return "hun";} + if (lang == "Hupa"){return "hup";} + if (lang == "Armenian"){return "hye";} + if (lang == "Iban"){return "iba";} + if (lang == "Igbo"){return "ibo";} + if (lang == "Icelandic"){return "ice";} + if (lang == "Ido"){return "ido";} + if (lang == "Sichuan Yi; Nuosu"){return "iii";} + if (lang == "Ijo languages"){return "ijo";} + if (lang == "Inuktitut"){return "iku";} + if (lang == "Interlingue; Occidental"){return "ile";} + if (lang == "Iloko"){return "ilo";} + if (lang == "Interlingua (International Auxiliary Language Association)"){return "ina";} + if (lang == "Indic languages"){return "inc";} + if (lang == "Indonesian"){return "ind";} + if (lang == "Indo-European languages"){return "ine";} + if (lang == "Ingush"){return "inh";} + if (lang == "Inupiaq"){return "ipk";} + if (lang == "Iranian languages"){return "ira";} + if (lang == "Iroquoian languages"){return "iro";} + if (lang == "Icelandic"){return "isl";} + if (lang == "Italian"){return "ita";} + if (lang == "Javanese"){return "jav";} + if (lang == "Lojban"){return "jbo";} + if (lang == "Japanese"){return "jpn";} + if (lang == "Judeo-Persian"){return "jpr";} + if (lang == "Judeo-Arabic"){return "jrb";} + if (lang == "Kara-Kalpak"){return "kaa";} + if (lang == "Kabyle"){return "kab";} + if (lang == "Kachin; Jingpho"){return "kac";} + if (lang == "Kalaallisut; Greenlandic"){return "kal";} + if (lang == "Kamba"){return "kam";} + if (lang == "Kannada"){return "kan";} + if (lang == "Karen languages"){return "kar";} + if (lang == "Kashmiri"){return "kas";} + if (lang == "Georgian"){return "kat";} + if (lang == "Kanuri"){return "kau";} + if (lang == "Kawi"){return "kaw";} + if (lang == "Kazakh"){return "kaz";} + if (lang == "Kabardian"){return "kbd";} + if (lang == "Khasi"){return "kha";} + if (lang == "Khoisan languages"){return "khi";} + if (lang == "Central Khmer"){return "khm";} + if (lang == "Khotanese; Sakan"){return "kho";} + if (lang == "Kikuyu; Gikuyu"){return "kik";} + if (lang == "Kinyarwanda"){return "kin";} + if (lang == "Kirghiz; Kyrgyz"){return "kir";} + if (lang == "Kimbundu"){return "kmb";} + if (lang == "Konkani"){return "kok";} + if (lang == "Komi"){return "kom";} + if (lang == "Kongo"){return "kon";} + if (lang == "Korean"){return "kor";} + if (lang == "Kosraean"){return "kos";} + if (lang == "Kpelle"){return "kpe";} + if (lang == "Karachay-Balkar"){return "krc";} + if (lang == "Karelian"){return "krl";} + if (lang == "Kru languages"){return "kro";} + if (lang == "Kurukh"){return "kru";} + if (lang == "Kuanyama; Kwanyama"){return "kua";} + if (lang == "Kumyk"){return "kum";} + if (lang == "Kurdish"){return "kur";} + if (lang == "Kutenai"){return "kut";} + if (lang == "Ladino"){return "lad";} + if (lang == "Lahnda"){return "lah";} + if (lang == "Lamba"){return "lam";} + if (lang == "Lao"){return "lao";} + if (lang == "Latin"){return "lat";} + if (lang == "Latvian"){return "lav";} + if (lang == "Lezghian"){return "lez";} + if (lang == "Limburgan; Limburger; Limburgish"){return "lim";} + if (lang == "Lingala"){return "lin";} + if (lang == "Lithuanian"){return "lit";} + if (lang == "Mongo"){return "lol";} + if (lang == "Lozi"){return "loz";} + if (lang == "Luxembourgish; Letzeburgesch"){return "ltz";} + if (lang == "Luba-Lulua"){return "lua";} + if (lang == "Luba-Katanga"){return "lub";} + if (lang == "Ganda"){return "lug";} + if (lang == "Luiseno"){return "lui";} + if (lang == "Lunda"){return "lun";} + if (lang == "Luo (Kenya and Tanzania)"){return "luo";} + if (lang == "Lushai"){return "lus";} + if (lang == "Macedonian"){return "mac";} + if (lang == "Madurese"){return "mad";} + if (lang == "Magahi"){return "mag";} + if (lang == "Marshallese"){return "mah";} + if (lang == "Maithili"){return "mai";} + if (lang == "Makasar"){return "mak";} + if (lang == "Malayalam"){return "mal";} + if (lang == "Mandingo"){return "man";} + if (lang == "Maori"){return "mao";} + if (lang == "Austronesian languages"){return "map";} + if (lang == "Marathi"){return "mar";} + if (lang == "Masai"){return "mas";} + if (lang == "Malay"){return "may";} + if (lang == "Moksha"){return "mdf";} + if (lang == "Mandar"){return "mdr";} + if (lang == "Mende"){return "men";} + if (lang == "Irish, Middle (900-1200)"){return "mga";} + if (lang == "Mi'kmaq; Micmac"){return "mic";} + if (lang == "Minangkabau"){return "min";} + if (lang == "Uncoded languages"){return "mis";} + if (lang == "Macedonian"){return "mkd";} + if (lang == "Mon-Khmer languages"){return "mkh";} + if (lang == "Malagasy"){return "mlg";} + if (lang == "Maltese"){return "mlt";} + if (lang == "Manchu"){return "mnc";} + if (lang == "Manipuri"){return "mni";} + if (lang == "Manobo languages"){return "mno";} + if (lang == "Mohawk"){return "moh";} + if (lang == "Mongolian"){return "mon";} + if (lang == "Mossi"){return "mos";} + if (lang == "Maori"){return "mri";} + if (lang == "Malay"){return "msa";} + if (lang == "Malay"){return "msa";} + if (lang == "Multiple languages"){return "mul";} + if (lang == "Munda languages"){return "mun";} + if (lang == "Creek"){return "mus";} + if (lang == "Mirandese"){return "mwl";} + if (lang == "Marwari"){return "mwr";} + if (lang == "Burmese"){return "mya";} + if (lang == "Mayan languages"){return "myn";} + if (lang == "Erzya"){return "myv";} + if (lang == "Nahuatl languages"){return "nah";} + if (lang == "North American Indian languages"){return "nai";} + if (lang == "Neapolitan"){return "nap";} + if (lang == "Nauru"){return "nau";} + if (lang == "Navajo; Navaho"){return "nav";} + if (lang == "Ndebele, South; South Ndebele"){return "nbl";} + if (lang == "Ndebele, North; North Ndebele"){return "nde";} + if (lang == "Ndonga"){return "ndo";} + if (lang == "Low German; Low Saxon; German, Low; Saxon, Low"){return "nds";} + if (lang == "Nepali"){return "nep";} + if (lang == "Nepal Bhasa; Newari"){return "new";} + if (lang == "Nias"){return "nia";} + if (lang == "Niger-Kordofanian languages"){return "nic";} + if (lang == "Niuean"){return "niu";} + if (lang == "Dutch; Flemish"){return "nld";} + if (lang == "Norwegian Nynorsk; Nynorsk, Norwegian"){return "nno";} + if (lang == "Bokmål, Norwegian; Norwegian Bokmål"){return "nob";} + if (lang == "Nogai"){return "nog";} + if (lang == "Norse, Old"){return "non";} + if (lang == "Norwegian"){return "nor";} + if (lang == "N'Ko"){return "nqo";} + if (lang == "Pedi; Sepedi; Northern Sotho"){return "nso";} + if (lang == "Nubian languages"){return "nub";} + if (lang == "Classical Newari; Old Newari; Classical Nepal Bhasa"){return "nwc";} + if (lang == "Chichewa; Chewa; Nyanja"){return "nya";} + if (lang == "Nyamwezi"){return "nym";} + if (lang == "Nyankole"){return "nyn";} + if (lang == "Nyoro"){return "nyo";} + if (lang == "Nzima"){return "nzi";} + if (lang == "Occitan (post 1500)"){return "oci";} + if (lang == "Ojibwa"){return "oji";} + if (lang == "Oriya"){return "ori";} + if (lang == "Oromo"){return "orm";} + if (lang == "Osage"){return "osa";} + if (lang == "Ossetian; Ossetic"){return "oss";} + if (lang == "Turkish, Ottoman (1500-1928)"){return "ota";} + if (lang == "Otomian languages"){return "oto";} + if (lang == "Papuan languages"){return "paa";} + if (lang == "Pangasinan"){return "pag";} + if (lang == "Pahlavi"){return "pal";} + if (lang == "Pampanga; Kapampangan"){return "pam";} + if (lang == "Panjabi; Punjabi"){return "pan";} + if (lang == "Papiamento"){return "pap";} + if (lang == "Palauan"){return "pau";} + if (lang == "Persian, Old (ca.600-400 B.C.)"){return "peo";} + if (lang == "Persian"){return "per";} + if (lang == "Philippine languages"){return "phi";} + if (lang == "Phoenician"){return "phn";} + if (lang == "Pali"){return "pli";} + if (lang == "Polish"){return "pol";} + if (lang == "Pohnpeian"){return "pon";} + if (lang == "Portuguese"){return "por";} + if (lang == "Prakrit languages"){return "pra";} + if (lang == "Provençal, Old (to 1500);Occitan, Old (to 1500)"){return "pro";} + if (lang == "Pushto; Pashto"){return "pus";} + if (lang == "Quechua"){return "que";} + if (lang == "Rajasthani"){return "raj";} + if (lang == "Rapanui"){return "rap";} + if (lang == "Rarotongan; Cook Islands Maori"){return "rar";} + if (lang == "Romance languages"){return "roa";} + if (lang == "Romansh"){return "roh";} + if (lang == "Romany"){return "rom";} + if (lang == "Romanian; Moldavian; Moldovan"){return "ron";} + if (lang == "Romanian; Moldavian; Moldovan"){return "rum";} + if (lang == "Rundi"){return "run";} + if (lang == "Aromanian; Arumanian; Macedo-Romanian"){return "rup";} + if (lang == "Russian"){return "rus";} + if (lang == "Sandawe"){return "sad";} + if (lang == "Sango"){return "sag";} + if (lang == "Yakut"){return "sah";} + if (lang == "South American Indian languages"){return "sai";} + if (lang == "Salishan languages"){return "sal";} + if (lang == "Samaritan Aramaic"){return "sam";} + if (lang == "Sanskrit"){return "san";} + if (lang == "Sasak"){return "sas";} + if (lang == "Santali"){return "sat";} + if (lang == "Sicilian"){return "scn";} + if (lang == "Scots"){return "sco";} + if (lang == "Selkup"){return "sel";} + if (lang == "Semitic languages"){return "sem";} + if (lang == "Irish, Old (to 900)"){return "sga";} + if (lang == "Sign Languages"){return "sgn";} + if (lang == "Shan"){return "shn";} + if (lang == "Sidamo"){return "sid";} + if (lang == "Sinhala; Sinhalese"){return "sin";} + if (lang == "Siouan languages"){return "sio";} + if (lang == "Sino-Tibetan languages"){return "sit";} + if (lang == "Slavic languages"){return "sla";} + if (lang == "Slovak"){return "slk";} + if (lang == "Slovak"){return "slo";} + if (lang == "Slovenian"){return "slv";} + if (lang == "Southern Sami"){return "sma";} + if (lang == "Northern Sami"){return "sme";} + if (lang == "Sami languages"){return "smi";} + if (lang == "Lule Sami"){return "smj";} + if (lang == "Inari Sami"){return "smn";} + if (lang == "Samoan"){return "smo";} + if (lang == "Skolt Sami"){return "sms";} + if (lang == "Shona"){return "sna";} + if (lang == "Sindhi"){return "snd";} + if (lang == "Soninke"){return "snk";} + if (lang == "Sogdian"){return "sog";} + if (lang == "Somali"){return "som";} + if (lang == "Songhai languages"){return "son";} + if (lang == "Sotho, Southern"){return "sot";} + if (lang == "Spanish; Castilian"){return "spa";} + if (lang == "Albanian"){return "sqi";} + if (lang == "Sardinian"){return "srd";} + if (lang == "Sranan Tongo"){return "srn";} + if (lang == "Serbian"){return "srp";} + if (lang == "Serer"){return "srr";} + if (lang == "Nilo-Saharan languages"){return "ssa";} + if (lang == "Swati"){return "ssw";} + if (lang == "Sukuma"){return "suk";} + if (lang == "Sundanese"){return "sun";} + if (lang == "Susu"){return "sus";} + if (lang == "Sumerian"){return "sux";} + if (lang == "Swahili"){return "swa";} + if (lang == "Swedish"){return "swe";} + if (lang == "Classical Syriac"){return "syc";} + if (lang == "Syriac"){return "syr";} + if (lang == "Tahitian"){return "tah";} + if (lang == "Tai languages"){return "tai";} + if (lang == "Tamil"){return "tam";} + if (lang == "Tatar"){return "tat";} + if (lang == "Telugu"){return "tel";} + if (lang == "Timne"){return "tem";} + if (lang == "Tereno"){return "ter";} + if (lang == "Tetum"){return "tet";} + if (lang == "Tajik"){return "tgk";} + if (lang == "Tagalog"){return "tgl";} + if (lang == "Thai"){return "tha";} + if (lang == "Tibetan"){return "tib";} + if (lang == "Tigre"){return "tig";} + if (lang == "Tigrinya"){return "tir";} + if (lang == "Tiv"){return "tiv";} + if (lang == "Tokelau"){return "tkl";} + if (lang == "Klingon; tlhIngan-Hol"){return "tlh";} + if (lang == "Tlingit"){return "tli";} + if (lang == "Tamashek"){return "tmh";} + if (lang == "Tonga (Nyasa)"){return "tog";} + if (lang == "Tonga (Tonga Islands)"){return "ton";} + if (lang == "Tok Pisin"){return "tpi";} + if (lang == "Tsimshian"){return "tsi";} + if (lang == "Tswana"){return "tsn";} + if (lang == "Tsonga"){return "tso";} + if (lang == "Turkmen"){return "tuk";} + if (lang == "Tumbuka"){return "tum";} + if (lang == "Tupi languages"){return "tup";} + if (lang == "Turkish"){return "tur";} + if (lang == "Altaic languages"){return "tut";} + if (lang == "Tuvalu"){return "tvl";} + if (lang == "Twi"){return "twi";} + if (lang == "Tuvinian"){return "tyv";} + if (lang == "Udmurt"){return "udm";} + if (lang == "Ugaritic"){return "uga";} + if (lang == "Uighur; Uyghur"){return "uig";} + if (lang == "Ukrainian"){return "ukr";} + if (lang == "Umbundu"){return "umb";} + if (lang == "Urdu"){return "urd";} + if (lang == "Uzbek"){return "uzb";} + if (lang == "Vai"){return "vai";} + if (lang == "Venda"){return "ven";} + if (lang == "Vietnamese"){return "vie";} + if (lang == "Volapük"){return "vol";} + if (lang == "Votic"){return "vot";} + if (lang == "Wakashan languages"){return "wak";} + if (lang == "Wolaitta; Wolaytta"){return "wal";} + if (lang == "Waray"){return "war";} + if (lang == "Washo"){return "was";} + if (lang == "Welsh"){return "wel";} + if (lang == "Sorbian languages"){return "wen";} + if (lang == "Walloon"){return "wln";} + if (lang == "Wolof"){return "wol";} + if (lang == "Kalmyk; Oirat"){return "xal";} + if (lang == "Xhosa"){return "xho";} + if (lang == "Yao"){return "yao";} + if (lang == "Yapese"){return "yap";} + if (lang == "Yiddish"){return "yid";} + if (lang == "Yoruba"){return "yor";} + if (lang == "Yupik languages"){return "ypk";} + if (lang == "Zapotec"){return "zap";} + if (lang == "Blissymbols; Blissymbolics; Bliss"){return "zbl";} + if (lang == "Zenaga"){return "zen";} + if (lang == "Standard Moroccan Tamazight"){return "zgh";} + if (lang == "Zhuang; Chuang"){return "zha";} + if (lang == "Chinese"){return "zho";} + if (lang == "Zande languages"){return "znd";} + if (lang == "Zulu"){return "zul";} + if (lang == "Zuni"){return "zun";} + if (lang == "No linguistic content; Not applicable"){return "zxx";} + if (lang == "Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki"){return "zza";} + return "und"; + } -} +}// namespace Encodings diff --git a/lib/langcodes.h b/lib/langcodes.h index c2c5f7d3..b767b14b 100644 --- a/lib/langcodes.h +++ b/lib/langcodes.h @@ -5,6 +5,8 @@ namespace Encodings { class ISO639{ public: static std::string decode(const std::string & lang); + static std::string twoToThree(const std::string & lang); + static std::string encode(const std::string & lang); }; diff --git a/src/output/output.cpp b/src/output/output.cpp index 705c030a..0fb4676e 100644 --- a/src/output/output.cpp +++ b/src/output/output.cpp @@ -20,6 +20,7 @@ #include #include #include +#include /*LTS-END*/ namespace Mist{ @@ -392,11 +393,81 @@ namespace Mist{ } } + /*LTS-START*/ + /// Selects a specific track or set of tracks of the given trackType, using trackVal to decide. + /// trackVal may be a comma-separated list of numbers, codecs or the word "all" or an asterisk. + /// Does not do any checks if the protocol supports these tracks, just selects blindly. + /// It is necessary to follow up with a selectDefaultTracks() call to strip unsupported codecs/combinations. + void Output::selectTrack(const std::string &trackType, const std::string &trackVal){ + if (!trackVal.size() || trackVal == "0"){return;}//don't select anything in particular + if (trackVal.find(',') != std::string::npos){ + //Comma-separated list, recurse. + std::stringstream ss(trackVal); + std::string item; + while (std::getline(ss, item, ',')){selectTrack(trackType, item);} + return; + } + long long trackNo = JSON::Value(trackVal).asInt(); + if (trackVal == JSON::Value(trackNo).asString()){ + //It's an integer number + if (!myMeta.tracks.count(trackNo)){ + WARN_MSG("Track %lld does not exist in stream, cannot select", trackNo); + return; + } + const DTSC::Track & Trk = myMeta.tracks[trackNo]; + if (Trk.type != trackType && Trk.codec != trackType){ + WARN_MSG("Track %lld is not %s (%s/%s), cannot select", trackNo, trackType.c_str(), Trk.type.c_str(), Trk.codec.c_str()); + return; + } + INFO_MSG("Selecting %s track %lld (%s/%s)", trackType.c_str(), trackNo, Trk.type.c_str(), Trk.codec.c_str()); + selectedTracks.insert(trackNo); + return; + } + std::string trackLow = trackVal; + Util::stringToLower(trackLow); + if (trackLow == "all" || trackLow == "*"){ + //select all tracks of this type + for (std::map::iterator it = myMeta.tracks.begin(); it != myMeta.tracks.end(); it++){ + const DTSC::Track & Trk = it->second; + if (Trk.type == trackType || Trk.codec == trackType){ + selectedTracks.insert(it->first); + INFO_MSG("Selecting %s track %lu (%s/%s)", trackType.c_str(), it->first, Trk.type.c_str(), Trk.codec.c_str()); + } + } + return; + } + //attempt to do language/codec matching + //convert 2-character language codes into 3-character language codes + if (trackLow.size() == 2){trackLow = Encodings::ISO639::twoToThree(trackLow);} + for (std::map::iterator it = myMeta.tracks.begin(); it != myMeta.tracks.end(); it++){ + const DTSC::Track & Trk = it->second; + if (Trk.type == trackType || Trk.codec == trackType){ + std::string codecLow = Trk.codec; + Util::stringToLower(codecLow); + if (Trk.lang == trackLow || trackLow == codecLow){ + selectedTracks.insert(it->first); + INFO_MSG("Selecting %s track %lu (%s/%s)", trackType.c_str(), it->first, Trk.type.c_str(), Trk.codec.c_str()); + } + } + } + } + /*LTS-END*/ + void Output::selectDefaultTracks(){ if (!isInitialized){ initialize(); - return; + if (!isInitialized){return;} } + //First, wipe the existing selections, if any. + selectedTracks.clear(); + + /*LTS-START*/ + //Then, select the tracks we've been asked to select. + if (targetParams.count("audio")){selectTrack("audio", targetParams["audio"]);} + if (targetParams.count("video")){selectTrack("video", targetParams["video"]);} + if (targetParams.count("subtitle")){selectTrack("subtitle", targetParams["subtitle"]);} + /*LTS-END*/ + //check which tracks don't actually exist std::set toRemove; for (std::set::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ @@ -494,7 +565,39 @@ namespace Mist{ } } } - + + + /*LTS-START*/ + //Finally, we strip anything unwanted that the above may have auto-selected. + toRemove.clear(); + if (targetParams.count("subtitle") && targetParams["subtitle"] == "0"){ + for (std::set::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ + if (myMeta.tracks.at(*it).codec=="subtitle"){ + toRemove.insert(*it); + } + } + } + if (targetParams.count("video") && targetParams["video"] == "0"){ + for (std::set::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ + if (myMeta.tracks.at(*it).type=="video"){ + toRemove.insert(*it); + } + } + } + if (targetParams.count("audio") && targetParams["audio"] == "0"){ + for (std::set::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ + if (myMeta.tracks.at(*it).type=="audio"){ + toRemove.insert(*it); + } + } + } + //remove those from selectedtracks + for (std::set::iterator it = toRemove.begin(); it != toRemove.end(); it++){ + selectedTracks.erase(*it); + } + /*LTS-END*/ + + if (Util::Config::printDebugLevel >= DLVL_MEDIUM){ //print the selected tracks std::stringstream selected; diff --git a/src/output/output.h b/src/output/output.h index 7e605808..aed5318b 100644 --- a/src/output/output.h +++ b/src/output/output.h @@ -56,6 +56,7 @@ namespace Mist { void setBlocking(bool blocking); long unsigned int getMainSelectedTrack(); void updateMeta(); + void selectTrack(const std::string &trackType, const std::string &trackVal); /*LTS*/ void selectDefaultTracks(); bool connectToFile(std::string file); static bool listenMode(){return true;} diff --git a/src/output/output_http.cpp b/src/output/output_http.cpp index bbc99c12..e95ec274 100644 --- a/src/output/output_http.cpp +++ b/src/output/output_http.cpp @@ -2,6 +2,8 @@ #include "output_http.h" #include #include +#include +#include #include namespace Mist { @@ -207,7 +209,7 @@ namespace Mist { } } } - + void HTTPOutput::onRequest(){ while (H.Read(myConn)){ if (H.hasHeader("User-Agent")){ @@ -227,39 +229,11 @@ namespace Mist { } INFO_MSG("Received request %s", H.getUrl().c_str()); + if (H.GetVar("audio") != ""){targetParams["audio"] = H.GetVar("audio");} + if (H.GetVar("video") != ""){targetParams["video"] = H.GetVar("video");} + if (H.GetVar("subtitle") != ""){targetParams["subtitle"] = H.GetVar("subtitle");} initialize(); - if (H.GetVar("audio") != "" || H.GetVar("video") != ""){ - selectedTracks.clear(); - if (H.GetVar("audio") != ""){ - selectedTracks.insert(JSON::Value(H.GetVar("audio")).asInt()); - } - if (H.GetVar("video") != ""){ - selectedTracks.insert(JSON::Value(H.GetVar("video")).asInt()); - } - selectDefaultTracks(); - std::set toRemove; - if (H.GetVar("video") == "0"){ - for (std::set::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ - if (myMeta.tracks.at(*it).type=="video"){ - toRemove.insert(*it); - } - } - } - if (H.GetVar("audio") == "0"){ - for (std::set::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ - if (myMeta.tracks.at(*it).type=="audio"){ - toRemove.insert(*it); - } - } - } - //remove those from selectedtracks - for (std::set::iterator it = toRemove.begin(); it != toRemove.end(); it++){ - selectedTracks.erase(*it); - } - }else{ - selectDefaultTracks(); - } - + selectDefaultTracks(); onHTTP(); if (!H.bufferChunks){ H.Clean(); diff --git a/src/output/output_rtmp.cpp b/src/output/output_rtmp.cpp index 326e8e59..a5447079 100644 --- a/src/output/output_rtmp.cpp +++ b/src/output/output_rtmp.cpp @@ -44,10 +44,6 @@ namespace Mist{ streamOut = streamName; } } - std::string origTarget = config->getOption("target", true)[0u].asStringRef(); - if (origTarget.rfind('?') != std::string::npos){ - parseVars(origTarget.substr(origTarget.rfind('?') + 1)); - } initialize(); INFO_MSG("About to push stream %s out. Host: %s, port: %d, app: %s, stream: %s", streamName.c_str(), host.c_str(), port, app.c_str(), streamOut.c_str()); myConn = Socket::Connection(host, port, false); @@ -172,60 +168,6 @@ namespace Mist{ return false; } - void OutRTMP::parseVars(std::string data){ - std::string varname; - std::string varval; - bool trackSwitch = false; - // position where a part start (e.g. after &) - size_t pos = 0; - while (pos < data.length()){ - size_t nextpos = data.find('&', pos); - if (nextpos == std::string::npos){ - nextpos = data.length(); - } - size_t eq_pos = data.find('=', pos); - if (eq_pos < nextpos){ - // there is a key and value - varname = data.substr(pos, eq_pos - pos); - varval = data.substr(eq_pos + 1, nextpos - eq_pos - 1); - }else{ - // no value, only a key - varname = data.substr(pos, nextpos - pos); - varval.clear(); - } - - if (varname == "track" || varname == "audio" || varname == "video"){ - long long int selTrack = JSON::Value(varval).asInt(); - if (myMeta){ - if (myMeta.tracks.count(selTrack)){ - std::string & delThis = myMeta.tracks[selTrack].type; - for (std::set::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ - if (myMeta.tracks[*it].type == delThis){ - selectedTracks.erase(it); - trackSwitch = true; - break; - } - } - selectedTracks.insert(selTrack); - } - }else{ - selectedTracks.insert(selTrack); - } - } - - if (nextpos == std::string::npos){ - // in case the string is gigantic - break; - } - // erase & - pos = nextpos + 1; - } - if (trackSwitch && thisPacket){ - seek(thisPacket.getTime()); - } - } - - void OutRTMP::init(Util::Config * cfg){ Output::init(cfg); capa["name"] = "RTMP"; @@ -812,7 +754,7 @@ namespace Mist{ if (streamName.find('?') != std::string::npos){ std::string tmpVars = streamName.substr(streamName.find('?') + 1); streamName = streamName.substr(0, streamName.find('?')); - parseVars(tmpVars); + HTTP::parseVars(tmpVars, targetParams); } size_t colonPos = streamName.find(':'); diff --git a/src/output/output_rtmp.h b/src/output/output_rtmp.h index b4583f62..4850e194 100644 --- a/src/output/output_rtmp.h +++ b/src/output/output_rtmp.h @@ -21,7 +21,6 @@ namespace Mist { int64_t rtmpOffset; uint64_t lastOutTime; unsigned int maxbps; - void parseVars(std::string data); std::string app_name; void parseChunk(Socket::Buffer & inputBuffer); void parseAMFCommand(AMF::Object & amfData, int messageType, int streamId);