summaryrefslogtreecommitdiffstats
path: root/sub/sd_ass.c
diff options
context:
space:
mode:
Diffstat (limited to 'sub/sd_ass.c')
-rw-r--r--sub/sd_ass.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 8b6f1f1554..e4428516b9 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -128,6 +128,16 @@ static void decode(struct sd *sd, struct demux_packet *packet)
event->Text = strdup(text);
}
+static ASS_Style *find_style(ASS_Track *track, const char *name)
+{
+ for (int n = track->n_styles - 1; n >= 0; n--) {
+ const char *style_name = track->styles[n].Name;
+ if (style_name && strcasecmp(style_name, name) == 0)
+ return &track->styles[n];
+ }
+ return NULL;
+}
+
static void get_bitmaps(struct sd *sd, struct mp_osd_res dim, double pts,
struct sub_bitmaps *res)
{
@@ -137,6 +147,18 @@ static void get_bitmaps(struct sd *sd, struct mp_osd_res dim, double pts,
if (pts == MP_NOPTS_VALUE || !sd->ass_renderer)
return;
+ ASS_Style prev_default_style;
+ ASS_Style *default_style = NULL;
+ if (opts->ass_style_override == 2) {
+ default_style = find_style(ctx->ass_track, "Default");
+ if (default_style) {
+ prev_default_style = *default_style;
+ default_style->FontName = NULL; // don't free this
+ mp_ass_set_style(default_style, ctx->ass_track->PlayResY,
+ opts->sub_text_style);
+ }
+ }
+
ASS_Renderer *renderer = sd->ass_renderer;
double scale = dim.display_par;
if (!ctx->is_converted && (!opts->ass_style_override ||
@@ -166,6 +188,11 @@ static void get_bitmaps(struct sd *sd, struct mp_osd_res dim, double pts,
if (!ctx->is_converted)
mangle_colors(sd, res);
+
+ if (default_style) {
+ free(default_style->FontName);
+ *default_style = prev_default_style;
+ }
}
struct buf {