diff options
Diffstat (limited to 'sub/sd_ass.c')
-rw-r--r-- | sub/sd_ass.c | 27 |
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 { |