diff options
Diffstat (limited to 'libass')
-rw-r--r-- | libass/ass_render.c | 21 | ||||
-rw-r--r-- | libass/ass_render.h | 3 |
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; |