summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOneric <oneric@oneric.stub>2022-09-08 00:45:05 +0200
committerOneric <oneric@oneric.stub>2022-09-09 21:54:59 +0200
commitd8f056158abe9d671c53f430ecd21022cc983d47 (patch)
treec7216c9cafa8a08831f09237df373f48c5f34642
parent5a6a943923a88b15f6c202aa7232c39e0a37d0c5 (diff)
downloadlibass-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.c24
-rw-r--r--libass/ass_render.h1
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);