misc/language: parse default tag from external subtitle tracks

This commit is contained in:
dyphire
2025-07-06 16:53:01 +08:00
committed by Kacper Michajłow
parent db7bc5949a
commit 2d149e007f
5 changed files with 21 additions and 0 deletions
+1
View File
@@ -97,6 +97,7 @@ enum track_flags {
TRACK_VISUAL_IMPAIRED = 1 << 3,
TRACK_ATTACHED_PICTURE = 1 << 4,
TRACK_FORCED = 1 << 5,
TRACK_DEFAULT = 1 << 6,
};
#define VS_IS_DISP(x) ((x) == VS_DISP_RESAMPLE || \
+4
View File
@@ -347,6 +347,10 @@ bstr mp_guess_lang_from_filename(bstr name, int *lang_start, enum track_flags *f
*f |= TRACK_FORCED;
matched = true;
}
if (!bstrcasecmp0(tag, "default")) {
*f |= TRACK_DEFAULT;
matched = true;
}
if (matched) {
lang_length = 0;
i -= (delimiter != '.') ? 2 : 1;
+2
View File
@@ -6315,6 +6315,7 @@ static void cmd_track_reload(void *p)
flags |= t->hearing_impaired_track ? TRACK_HEARING_IMPAIRED : 0;
flags |= t->visual_impaired_track ? TRACK_VISUAL_IMPAIRED : 0;
flags |= t->forced_track ? TRACK_FORCED : 0;
flags |= t->default_track ? TRACK_DEFAULT : 0;
mp_remove_track(mpctx, t);
nt_num = mp_add_external_file(mpctx, filename, type, cmd->abort->cancel,
flags);
@@ -6335,6 +6336,7 @@ static void cmd_track_reload(void *p)
nt->lang = bstrto0(nt, lang);
nt->hearing_impaired_track = flags & TRACK_HEARING_IMPAIRED;
nt->forced_track = flags & TRACK_FORCED;
nt->default_track = flags & TRACK_DEFAULT;
}
mp_switch_track(mpctx, nt->type, nt, 0);
+1
View File
@@ -918,6 +918,7 @@ int mp_add_external_file(struct MPContext *mpctx, char *filename,
t->hearing_impaired_track = flags & TRACK_HEARING_IMPAIRED;
t->visual_impaired_track = flags & TRACK_VISUAL_IMPAIRED;
t->forced_track = flags & TRACK_FORCED;
t->default_track = flags & TRACK_DEFAULT;
// if we found video, and we are loading cover art, flag as such.
t->attached_picture = t->type == STREAM_VIDEO && (flags & TRACK_ATTACHED_PICTURE);
if (first_num < 0 && (filter == STREAM_TYPE_COUNT || sh->type == filter))
+13
View File
@@ -81,6 +81,9 @@ int main(void)
TEST_LANG_GUESS("foo.en-US.forced.srt", "en-US", 3, TRACK_FORCED);
TEST_LANG_GUESS("foo.en-US.forced.sdh.srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_FORCED);
TEST_LANG_GUESS("foo.en-US.sdh.forced.srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_FORCED);
TEST_LANG_GUESS("foo.en-US.default.srt", "en-US", 3, TRACK_DEFAULT);
TEST_LANG_GUESS("foo.en-US.default.sdh.srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_DEFAULT);
TEST_LANG_GUESS("foo.en-US.sdh.default.srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_DEFAULT);
TEST_LANG_GUESS("foo.en-simple.srt", "en-simple", 3, 0);
TEST_LANG_GUESS("foo.sgn-FSL.srt", "sgn-FSL", 3, 0);
TEST_LANG_GUESS("foo.gsw-u-sd-chzh.srt", "gsw-u-sd-chzh", 3, 0);
@@ -96,6 +99,9 @@ int main(void)
TEST_LANG_GUESS("foo[en-US][forced].srt", "en-US", 3, TRACK_FORCED);
TEST_LANG_GUESS("foo[en-US][forced][sdh].srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_FORCED);
TEST_LANG_GUESS("foo[en-US][sdh][forced].srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_FORCED);
TEST_LANG_GUESS("foo[en-US][default].srt", "en-US", 3, TRACK_DEFAULT);
TEST_LANG_GUESS("foo[en-US][default][sdh].srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_DEFAULT);
TEST_LANG_GUESS("foo[en-US][sdh][default].srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_DEFAULT);
TEST_LANG_GUESS("foo[].srt", "", -1, 0);
TEST_LANG_GUESS("foo(en).srt", "en", 3, 0);
@@ -105,12 +111,19 @@ int main(void)
TEST_LANG_GUESS("foo(en-US)(forced).srt", "en-US", 3, TRACK_FORCED);
TEST_LANG_GUESS("foo(en-US)(forced)(sdh).srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_FORCED);
TEST_LANG_GUESS("foo(en-US)(sdh)(forced).srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_FORCED);
TEST_LANG_GUESS("foo(en-US)(default).srt", "en-US", 3, TRACK_DEFAULT);
TEST_LANG_GUESS("foo(en-US)(default)(sdh).srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_DEFAULT);
TEST_LANG_GUESS("foo(en-US)(sdh)(default).srt", "en-US", 3, TRACK_HEARING_IMPAIRED | TRACK_DEFAULT);
TEST_LANG_GUESS("foo().srt", "", -1, 0);
TEST_LANG_GUESS("foo.hi.forced.srt", "", -1, TRACK_HEARING_IMPAIRED | TRACK_FORCED);
TEST_LANG_GUESS("foo.forced.hi.srt", "", -1, TRACK_HEARING_IMPAIRED | TRACK_FORCED);
TEST_LANG_GUESS("foo.hi.default.srt", "", -1, TRACK_HEARING_IMPAIRED | TRACK_DEFAULT);
TEST_LANG_GUESS("foo.default.hi.srt", "", -1, TRACK_HEARING_IMPAIRED | TRACK_DEFAULT);
TEST_LANG_GUESS("foo.default.forced.srt", "", -1, TRACK_DEFAULT | TRACK_FORCED);
TEST_LANG_GUESS("foo.hi.srt", "", -1, TRACK_HEARING_IMPAIRED);
TEST_LANG_GUESS("foo.forced.srt", "", -1, TRACK_FORCED);
TEST_LANG_GUESS("foo.default.srt", "", -1, TRACK_DEFAULT);
talloc_free(ta_ctx);
}