diff options
author | Martin Herkt <lachs0r@srsfckn.biz> | 2017-02-12 01:01:56 +0100 |
---|---|---|
committer | Martin Herkt <lachs0r@srsfckn.biz> | 2017-02-12 01:01:56 +0100 |
commit | 35aa705c3ece8293652ffcf449c71fe80b96e722 (patch) | |
tree | 7c0fb34ec96204cbcd867a973b2476689919a5b4 /player/external_files.c | |
parent | 10a005df0c981050afc35184a42173bea7ea2527 (diff) | |
parent | 3739d1318fdb658bb6037bfe06bb6cefb3b50a09 (diff) | |
download | mpv-35aa705c3ece8293652ffcf449c71fe80b96e722.tar.bz2 mpv-35aa705c3ece8293652ffcf449c71fe80b96e722.tar.xz |
Merge branch 'master' into release/current
Diffstat (limited to 'player/external_files.c')
-rw-r--r-- | player/external_files.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/player/external_files.c b/player/external_files.c index eb7345ac84..5eb3a1d730 100644 --- a/player/external_files.c +++ b/player/external_files.c @@ -10,13 +10,15 @@ #include "common/global.h" #include "common/msg.h" #include "misc/ctype.h" +#include "misc/charset_conv.h" #include "options/options.h" #include "options/path.h" #include "external_files.h" static const char *const sub_exts[] = {"utf", "utf8", "utf-8", "idx", "sub", "srt", - "smi", "rt", "txt", "ssa", "aqt", "jss", - "js", "ass", "mks", "vtt", "sup", NULL}; + "smi", "rt", "ssa", "aqt", "jss", + "js", "ass", "mks", "vtt", "sup", "scc", + NULL}; static const char *const audio_exts[] = {"mp3", "aac", "mka", "dts", "flac", "ogg", "m4a", "ac3", "opus", "wav", @@ -97,11 +99,16 @@ static void append_dir_subtitles(struct mpv_global *global, if (mp_is_url(bstr0(fname))) goto out; - struct bstr f_fname = bstr0(mp_basename(fname)); + struct bstr f_fbname = bstr0(mp_basename(fname)); + struct bstr f_fname = mp_iconv_to_utf8(log, f_fbname, + "UTF-8-MAC", MP_NO_LATIN1_FALLBACK); struct bstr f_fname_noext = bstrdup(tmpmem, bstr_strip_ext(f_fname)); bstr_lower(f_fname_noext); struct bstr f_fname_trim = bstr_strip(f_fname_noext); + if (f_fbname.start != f_fname.start) + talloc_steal(tmpmem, f_fname.start); + // 0 = nothing // 1 = any subtitle file // 2 = any sub file containing movie name @@ -113,15 +120,19 @@ static void append_dir_subtitles(struct mpv_global *global, mp_verbose(log, "Loading external files in %.*s\n", BSTR_P(path)); struct dirent *de; while ((de = readdir(d))) { - struct bstr dename = bstr0(de->d_name); void *tmpmem2 = talloc_new(tmpmem); - + struct bstr den = bstr0(de->d_name); + struct bstr dename = mp_iconv_to_utf8(log, den, + "UTF-8-MAC", MP_NO_LATIN1_FALLBACK); // retrieve various parts of the filename struct bstr tmp_fname_noext = bstrdup(tmpmem2, bstr_strip_ext(dename)); bstr_lower(tmp_fname_noext); struct bstr tmp_fname_ext = bstr_get_ext(dename); struct bstr tmp_fname_trim = bstr_strip(tmp_fname_noext); + if (den.start != dename.start) + talloc_steal(tmpmem2, dename.start); + // check what it is (most likely) int type = test_ext(tmp_fname_ext); char **langs = NULL; |