summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrcombs <rcombs@rcombs.me>2021-05-26 17:57:41 -0500
committersfan5 <sfan5@live.de>2023-06-25 11:01:58 +0200
commit76009bf7a6192b9eddc8d4c21a17133bf6352b2b (patch)
treec15b47b20252f89459873d39d5de605ef003c782
parenteb14dbff3e3aeaccd4172b1b3139966e45e223b4 (diff)
downloadmpv-76009bf7a6192b9eddc8d4c21a17133bf6352b2b.tar.bz2
mpv-76009bf7a6192b9eddc8d4c21a17133bf6352b2b.tar.xz
loadfile: use mp_match_lang_single
This adds basic support for IETF language tags, as well as matching 2-letter language codes against 3-letter ones (and vice versa).
-rw-r--r--DOCS/man/options.rst16
-rw-r--r--player/loadfile.c6
2 files changed, 12 insertions, 10 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index 9d653ed886..bad3150d92 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -5,10 +5,11 @@ Track Selection
---------------
``--alang=<languagecode[,languagecode,...]>``
- Specify a priority list of audio languages to use. Different container
- formats employ different language codes. DVDs use ISO 639-1 two-letter
- language codes, Matroska, MPEG-TS and NUT use ISO 639-2 three-letter
- language codes, while OGM uses a free-form identifier. See also ``--aid``.
+ Specify a priority list of audio languages to use, as IETF language tags.
+ Equivalent ISO 639-1 two-letter and ISO 639-2 three-letter codes are treated the same.
+ The first tag in the list whose language matches a track in the file will be used.
+ A track that matches more subtags will be preferred over one that matches fewer,
+ with preference given to earlier subtags over later ones. See also ``--aid``.
This is a string list option. See `List Options`_ for details.
@@ -20,10 +21,7 @@ Track Selection
audio.
``--slang=<languagecode[,languagecode,...]>``
- Specify a priority list of subtitle languages to use. Different container
- formats employ different language codes. DVDs use ISO 639-1 two letter
- language codes, Matroska uses ISO 639-2 three letter language codes while
- OGM uses a free-form identifier. See also ``--sid``.
+ Equivalent to ``--alang``, for subtitle tracks.
This is a string list option. See `List Options`_ for details.
@@ -33,6 +31,8 @@ Track Selection
a DVD and falls back on English if Hungarian is not available.
- ``mpv --slang=jpn example.mkv`` plays a Matroska file with Japanese
subtitles.
+ - ``mpv --slang=pt-BR example.mkv`` plays a Matroska file with Brazilian
+ Portuguese subtitles if available, and otherwise any Portuguese subtitles.
``--vlang=<...>``
Equivalent to ``--alang`` and ``--slang``, for video tracks.
diff --git a/player/loadfile.c b/player/loadfile.c
index 009d1471ad..5095f6a49f 100644
--- a/player/loadfile.c
+++ b/player/loadfile.c
@@ -47,6 +47,7 @@
#include "common/recorder.h"
#include "common/stats.h"
#include "input/input.h"
+#include "misc/language.h"
#include "audio/out/ao.h"
#include "filters/f_decoder_wrapper.h"
@@ -447,8 +448,9 @@ static int match_lang(char **langs, const char *lang)
if (!lang)
return 0;
for (int idx = 0; langs && langs[idx]; idx++) {
- if (lang && strcasecmp(langs[idx], lang) == 0)
- return INT_MAX - idx;
+ int score = mp_match_lang_single(langs[idx], lang);
+ if (score > 0)
+ return INT_MAX - (idx + 1) * LANGUAGE_SCORE_MAX + score - 1;
}
return 0;
}