summaryrefslogtreecommitdiffstats
path: root/libass
diff options
context:
space:
mode:
Diffstat (limited to 'libass')
-rw-r--r--libass/ass_render.c21
-rw-r--r--libass/ass_render.h3
2 files changed, 14 insertions, 10 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index f14a737..69dde0c 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -1040,13 +1040,14 @@ static void init_font_scale(RenderContext *state)
state->screen_scale_y = font_scr_h / render_priv->track->PlayResY;
ASS_Vector layout_res = ass_layout_res(render_priv);
- state->blur_scale = font_scr_h / layout_res.y;
+ state->blur_scale_x = font_scr_w / layout_res.x;
+ state->blur_scale_y = font_scr_h / layout_res.y;
if (render_priv->track->ScaledBorderAndShadow) {
state->border_scale_x = state->screen_scale_x;
state->border_scale_y = state->screen_scale_y;
} else {
- state->border_scale_x = font_scr_w / layout_res.x;
- state->border_scale_y = state->blur_scale;
+ state->border_scale_x = state->blur_scale_x;
+ state->border_scale_y = state->blur_scale_y;
}
if (state->apply_font_scale) {
@@ -1054,7 +1055,8 @@ static void init_font_scale(RenderContext *state)
state->screen_scale_y *= settings_priv->font_size_coeff;
state->border_scale_x *= settings_priv->font_size_coeff;
state->border_scale_y *= settings_priv->font_size_coeff;
- state->blur_scale *= settings_priv->font_size_coeff;
+ state->blur_scale_x *= settings_priv->font_size_coeff;
+ state->blur_scale_y *= settings_priv->font_size_coeff;
}
}
@@ -1357,7 +1359,7 @@ static void calc_transform_matrix(RenderContext *state,
z4[i] = x2[i] * sy + z3[i] * cy;
}
- double dist = 20000 * state->blur_scale;
+ double dist = 20000 * state->blur_scale_y;
z4[2] += dist;
double scale_x = dist * render_priv->par_scale_x;
@@ -2539,10 +2541,11 @@ static void render_and_combine_glyphs(RenderContext *state,
filter->be = info->be;
int32_t shadow_mask_x, shadow_mask_y;
- double blur_scale = state->blur_scale * (2 / sqrt(log(256)));
- // XXX: correct anamorphic blur radii
- filter->blur_x = quantize_blur(info->blur * blur_scale, &shadow_mask_x);
- filter->blur_y = quantize_blur(info->blur * blur_scale, &shadow_mask_y);
+ double blur_radius_scale = 2 / sqrt(log(256));
+ double blur_scale_x = state->blur_scale_x * blur_radius_scale;
+ double blur_scale_y = state->blur_scale_y * blur_radius_scale;
+ filter->blur_x = quantize_blur(info->blur * blur_scale_x, &shadow_mask_x);
+ filter->blur_y = quantize_blur(info->blur * blur_scale_y, &shadow_mask_y);
if (flags & FILTER_NONZERO_SHADOW) {
int32_t x = double_to_d6(info->shadow_x * state->border_scale_x);
int32_t y = double_to_d6(info->shadow_y * state->border_scale_y);
diff --git a/libass/ass_render.h b/libass/ass_render.h
index fadbee1..581c131 100644
--- a/libass/ass_render.h
+++ b/libass/ass_render.h
@@ -292,7 +292,8 @@ struct render_context {
double screen_scale_y;
double border_scale_x;
double border_scale_y;
- double blur_scale;
+ double blur_scale_x;
+ double blur_scale_y;
};
typedef struct render_context RenderContext;