From d8f056158abe9d671c53f430ecd21022cc983d47 Mon Sep 17 00:00:00 2001 From: Oneric Date: Thu, 8 Sep 2022 00:45:05 +0200 Subject: render: simplify storage resolution checks This avoids repeated checks for set storage size and also makes our zero checks more consistent instead of sometimes only checking one dimension. The function will also come in handy outside ass_render.c in the following commit, so add it to the internal API. --- libass/ass_render.c | 24 ++++++++++++++---------- libass/ass_render.h | 1 + 2 files changed, 15 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; diff --git a/libass/ass_render.h b/libass/ass_render.h index 19d03f3..a0b02b3 100644 --- a/libass/ass_render.h +++ b/libass/ass_render.h @@ -345,6 +345,7 @@ typedef struct { void reset_render_context(ASS_Renderer *render_priv, ASS_Style *style); void ass_frame_ref(ASS_Image *img); void ass_frame_unref(ASS_Image *img); +ASS_Vector ass_layout_res(ASS_Renderer *render_priv); // XXX: this is actually in ass.c, includes should be fixed later on void ass_lazy_track_init(ASS_Library *lib, ASS_Track *track); -- cgit v1.2.3