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.
This commit is contained in:
llyyr 2023-12-16 22:08:52 +05:30 committed by Kacper Michajłow
parent d2efa1c1be
commit f862d3b6cd
1 changed files with 6 additions and 5 deletions

View File

@ -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);
}
}
}
}