diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index e40e7d2c6d..9141966fc1 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -5,11 +5,10 @@ Track Selection --------------- ``--alang=`` - 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``. + 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``. This is a string list option. See `List Options`_ for details. @@ -21,7 +20,10 @@ Track Selection audio. ``--slang=`` - Equivalent to ``--alang``, for subtitle tracks. + 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``. This is a string list option. See `List Options`_ for details. @@ -31,8 +33,6 @@ 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 cfdc445c98..2dbc9c2b94 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -455,9 +455,8 @@ static int match_lang(char **langs, const char *lang) if (!lang) return 0; for (int idx = 0; langs && langs[idx]; idx++) { - int score = mp_match_lang_single(langs[idx], lang); - if (score > 0) - return INT_MAX - (idx + 1) * LANGUAGE_SCORE_MAX + score - 1; + if (lang && strcasecmp(langs[idx], lang) == 0) + return INT_MAX - idx; } return 0; } @@ -617,7 +616,7 @@ struct track *select_default_track(struct MPContext *mpctx, int order, continue; if (sub) { // Subtitle specific auto-selecting crap. - bool audio_matches = mp_match_lang_single(audio_lang, track->lang); + bool audio_matches = audio_lang && track->lang && !strcasecmp(audio_lang, track->lang); bool forced = track->forced_track && (opts->subs_fallback_forced == 2 || (audio_matches && opts->subs_fallback_forced == 1)); bool lang_match = !os_langs && match_lang(langs, track->lang) > 0;