summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOneric <oneric@oneric.stub>2022-08-31 13:46:17 +0000
committersfan5 <sfan5@live.de>2022-09-19 15:56:38 +0200
commit9e3ec04d56f1ef2c6a9981cb4a0699b5f6ecbdd0 (patch)
treece4bab765aced029c0ce79d94798ce60eb79b68a
parentba81e4ed88433b021282ca435c80361418d66999 (diff)
downloadmpv-9e3ec04d56f1ef2c6a9981cb4a0699b5f6ecbdd0.tar.bz2
mpv-9e3ec04d56f1ef2c6a9981cb4a0699b5f6ecbdd0.tar.xz
sub: use Unicode linebreaking for non-ASS subs and OSD
ASS must only automatically break at ASCII spaces (\x20), but other subtitle formats might expect more breaking oppurtinities. Especially non-ASS subs in scripts, which typically do not use (ASCII) spaces to seperate words, like e.g. CJK, might overflow the screen if the conversion didn't insert additional linebreaks (ffmpeg does not). Thus try to enable Unicode linebreaking for converted subs and the OSD if libass is new enough. The feature may still be unavailable at runtime if libass wasn't build with Unicode linebreaking support.
-rw-r--r--sub/osd_libass.c4
-rw-r--r--sub/sd_ass.c4
2 files changed, 7 insertions, 1 deletions
diff --git a/sub/osd_libass.c b/sub/osd_libass.c
index c916c530c2..7bb0471610 100644
--- a/sub/osd_libass.c
+++ b/sub/osd_libass.c
@@ -133,7 +133,9 @@ static void create_ass_track(struct osd_state *osd, struct osd_object *obj,
track->WrapStyle = 1; // end-of-line wrapping instead of smart wrapping
track->Kerning = true;
track->ScaledBorderAndShadow = true;
-
+#if LIBASS_VERSION >= 0x01600010
+ ass_track_set_feature(track, ASS_FEATURE_WRAP_UNICODE, 1);
+#endif
update_playres(ass, &obj->vo_res);
}
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 939c000156..765b77822d 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -442,6 +442,10 @@ static void configure_ass(struct sd *sd, struct mp_osd_res *dim,
ass_set_font_scale(priv, set_font_scale);
ass_set_hinting(priv, set_hinting);
ass_set_line_spacing(priv, set_line_spacing);
+#if LIBASS_VERSION >= 0x01600010
+ if (converted)
+ ass_track_set_feature(track, ASS_FEATURE_WRAP_UNICODE, 1);
+#endif
}
static bool has_overrides(char *s)