summaryrefslogtreecommitdiffstats
path: root/libass/ass_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r--libass/ass_render.c24
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;