diff options
author | Oneric <oneric@oneric.stub> | 2022-09-08 00:45:05 +0200 |
---|---|---|
committer | Oneric <oneric@oneric.stub> | 2022-09-09 21:54:59 +0200 |
commit | d8f056158abe9d671c53f430ecd21022cc983d47 (patch) | |
tree | c7216c9cafa8a08831f09237df373f48c5f34642 | |
parent | 5a6a943923a88b15f6c202aa7232c39e0a37d0c5 (diff) | |
download | libass-d8f056158abe9d671c53f430ecd21022cc983d47.tar.bz2 libass-d8f056158abe9d671c53f430ecd21022cc983d47.tar.xz |
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.
-rw-r--r-- | libass/ass_render.c | 24 | ||||
-rw-r--r-- | 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); |