summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido Cella <guido@guidocella.xyz>2024-01-14 15:25:56 +0100
committerDudemanguy <random342@airmail.cc>2024-01-20 17:26:45 +0000
commit5871ba8f3e7e728d2efcbfdbe1d67059f8feca4d (patch)
tree24295cdfbbee943d2b356c567feeb8c5422ba6bf
parent02c6165d2b3e8448f13a34a845113d94669b0050 (diff)
downloadmpv-5871ba8f3e7e728d2efcbfdbe1d67059f8feca4d.tar.bz2
mpv-5871ba8f3e7e728d2efcbfdbe1d67059f8feca4d.tar.xz
command: restore lang after track reload
If a track's language was guessed from its filename, the commands that reload the track, like sub-reload, remove it. Fix this by calling guess_lang_from_filename() again. Note that backing up t->lang and restoring it if nt->lang is NULL would work incorrectly when lang is in the stream and it is removed before reloading.
-rw-r--r--player/command.c4
-rw-r--r--player/external_files.c8
-rw-r--r--player/external_files.h1
3 files changed, 13 insertions, 0 deletions
diff --git a/player/command.c b/player/command.c
index 3caaf897ce..caf134aa66 100644
--- a/player/command.c
+++ b/player/command.c
@@ -5769,6 +5769,10 @@ static void cmd_track_reload(void *p)
}
struct track *nt = mpctx->tracks[nt_num];
+
+ if (!nt->lang)
+ nt->lang = mp_guess_lang_from_filename(nt, nt->external_filename);
+
mp_switch_track(mpctx, nt->type, nt, 0);
print_track_list(mpctx, "Reloaded:");
}
diff --git a/player/external_files.c b/player/external_files.c
index e9a60815e1..2e0091261d 100644
--- a/player/external_files.c
+++ b/player/external_files.c
@@ -142,6 +142,14 @@ static struct bstr guess_lang_from_filename(struct bstr name, int *fn_start)
return (struct bstr){name.start + i + 1, n};
}
+char *mp_guess_lang_from_filename(void* ctx, const char *filename)
+{
+ bstr filename_no_ext = bstr_strip_ext(bstr0(filename));
+ int start = 0; // only used in append_dir_subtitles()
+ char *lang = bstrto0(ctx, guess_lang_from_filename(filename_no_ext, &start));
+ return lang;
+}
+
static void append_dir_subtitles(struct mpv_global *global, struct MPOpts *opts,
struct subfn **slist, int *nsub,
struct bstr path, const char *fname,
diff --git a/player/external_files.h b/player/external_files.h
index 20b37c3705..5d42c551ae 100644
--- a/player/external_files.h
+++ b/player/external_files.h
@@ -34,5 +34,6 @@ struct subfn *find_external_files(struct mpv_global *global, const char *fname,
bool mp_might_be_subtitle_file(const char *filename);
void mp_update_subtitle_exts(struct MPOpts *opts);
+char *mp_guess_lang_from_filename(void *talloc_ctx, const char *filename);
#endif /* MPLAYER_FINDFILES_H */