summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/interface-changes.rst2
-rw-r--r--DOCS/man/options.rst3
-rw-r--r--player/core.h1
-rw-r--r--player/loadfile.c4
4 files changed, 9 insertions, 1 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index 66d284cdd0..c252a57f82 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -22,6 +22,8 @@ Interface changes
--- mpv 0.29.0 ---
- drop deprecated --videotoolbox-format, --ff-aid, --ff-vid, --ff-sid,
--ad-spdif-dtshd, --softvol options
+ - fix --external-files: strictly never select any tracks from them, unless
+ explicitly selected (this may or may not be expected)
--- mpv 0.28.0 ---
- rename --hwdec=mediacodec option to mediacodec-copy, to reflect
conventions followed by other hardware video decoding APIs
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index 1037e74e29..cc65ea98c3 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -5376,7 +5376,8 @@ Miscellaneous
Unlike ``--sub-files`` and ``--audio-files``, this includes all tracks, and
does not cause default stream selection over the "proper" file. This makes
- it slightly less intrusive.
+ it slightly less intrusive. (In mpv 0.28.0 and before, this was not quite
+ strictly enforced.)
This is a list option. See `List Options`_ for details.
diff --git a/player/core.h b/player/core.h
index cee1bf3bc2..041065e1f6 100644
--- a/player/core.h
+++ b/player/core.h
@@ -141,6 +141,7 @@ struct track {
// If this track is from an external file (e.g. subtitle file).
bool is_external;
bool no_default; // pretend it's not external for auto-selection
+ bool no_auto_select;
char *external_filename;
bool auto_loaded;
diff --git a/player/loadfile.c b/player/loadfile.c
index c54204db0b..daea9149e7 100644
--- a/player/loadfile.c
+++ b/player/loadfile.c
@@ -310,6 +310,7 @@ static int match_lang(char **langs, char *lang)
* Sort tracks based on the following criteria, and pick the first:
* 0a) track matches ff-index (always wins)
* 0b) track matches tid (almost always wins)
+ * 0c) track is not from --external-file
* 1) track is external (no_default cancels this)
* 1b) track was passed explicitly (is not an auto-loaded subtitle)
* 2) earlier match in lang list
@@ -371,6 +372,8 @@ struct track *select_default_track(struct MPContext *mpctx, int order,
continue;
if (track->user_tid == tid)
return track;
+ if (track->no_auto_select)
+ continue;
if (!pick || compare_track(track, pick, langs, mpctx->opts))
pick = track;
}
@@ -624,6 +627,7 @@ struct track *mp_add_external_file(struct MPContext *mpctx, char *filename,
t->title = talloc_strdup(t, mp_basename(disp_filename));
t->external_filename = talloc_strdup(t, filename);
t->no_default = sh->type != filter;
+ t->no_auto_select = filter == STREAM_TYPE_COUNT;
if (!first && (filter == STREAM_TYPE_COUNT || sh->type == filter))
first = t;
}