diff options
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r-- | libass/ass_render.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index 9723d20..15ce092 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -971,6 +971,16 @@ static ASS_Style *handle_selective_style_overrides(ASS_Renderer *render_priv, return new; } +ASS_Vector ass_layout_res(ASS_Renderer *render_priv) +{ + ASS_Settings *settings = &render_priv->settings; + if (settings->storage_width > 0 && settings->storage_height > 0) + return (ASS_Vector) { settings->storage_width, settings->storage_height }; + + ASS_Track *track = render_priv->track; + return (ASS_Vector) { track->PlayResX, track->PlayResY }; +} + static void init_font_scale(ASS_Renderer *render_priv) { ASS_Settings *settings_priv = &render_priv->settings; @@ -980,10 +990,7 @@ static void init_font_scale(ASS_Renderer *render_priv) font_scr_h = render_priv->fit_height; render_priv->font_scale = font_scr_h / render_priv->track->PlayResY; - if (settings_priv->storage_height) - render_priv->blur_scale = font_scr_h / settings_priv->storage_height; - else - render_priv->blur_scale = font_scr_h / render_priv->track->PlayResY; + render_priv->blur_scale = font_scr_h / ass_layout_res(render_priv).y; if (render_priv->track->ScaledBorderAndShadow) render_priv->border_scale = font_scr_h / render_priv->track->PlayResY; @@ -2943,8 +2950,6 @@ static bool ass_start_frame(ASS_Renderer *render_priv, ASS_Track *track, long long now) { - ASS_Settings *settings_priv = &render_priv->settings; - if (!render_priv->settings.frame_width && !render_priv->settings.frame_height) return false; // library not initialized @@ -2982,12 +2987,11 @@ ass_start_frame(ASS_Renderer *render_priv, ASS_Track *track, // PAR correction double par = render_priv->settings.par; if (par == 0.) { - if (render_priv->orig_width && render_priv->orig_height && - settings_priv->storage_width && settings_priv->storage_height) { + if (render_priv->orig_width && render_priv->orig_height) { double dar = ((double) render_priv->orig_width) / render_priv->orig_height; - double sar = ((double) settings_priv->storage_width) / - settings_priv->storage_height; + ASS_Vector layout_res = ass_layout_res(render_priv); + double sar = ((double) layout_res.x) / layout_res.y; par = dar / sar; } else par = 1.0; |