From f862d3b6cd66abee98f2af21c36255ef7361cb80 Mon Sep 17 00:00:00 2001 From: llyyr Date: Sat, 16 Dec 2023 22:08:52 +0530 Subject: [PATCH] sd_ass: fix margins for all styles when overriding PlayResX Also save old playresx and use it instead of assuming values of things we know. --- sub/sd_ass.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sub/sd_ass.c b/sub/sd_ass.c index 8a99c35ff2..9983f74682 100644 --- a/sub/sd_ass.c +++ b/sub/sd_ass.c @@ -550,12 +550,13 @@ static void configure_ass(struct sd *sd, struct mp_osd_res *dim, if (override_playres) { int vidw = dim->w - (dim->ml + dim->mr); int vidh = dim->h - (dim->mt + dim->mb); + int old_playresx = track->PlayResX; track->PlayResX = track->PlayResY * (double)vidw / MPMAX(vidh, 1); - // ffmpeg and mpv use a default PlayResX of 384 when it is not known, - // this comes from VSFilter. - double fix_margins = track->PlayResX / (double)MP_ASS_FONT_PLAYRESX; - track->styles->MarginL = round(track->styles->MarginL * fix_margins); - track->styles->MarginR = round(track->styles->MarginR * fix_margins); + double fix_margins = track->PlayResX / (double)old_playresx; + for (int n = 0; n < track->n_styles; n++) { + track->styles[n].MarginL = round(track->styles[n].MarginL * fix_margins); + track->styles[n].MarginR = round(track->styles[n].MarginR * fix_margins); + } } } }