From cb5263a55b79e45517f09ff19d8fcfa921deb94a Mon Sep 17 00:00:00 2001 From: "Dr.Smile" Date: Mon, 8 Mar 2021 03:37:37 +0300 Subject: Make alignment and padding of all bitmaps consistent --- libass/ass_bitmap.c | 7 ++++--- libass/ass_render.c | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/libass/ass_bitmap.c b/libass/ass_bitmap.c index f18bc7f..b97d87d 100644 --- a/libass/ass_bitmap.c +++ b/libass/ass_bitmap.c @@ -73,8 +73,9 @@ void ass_synth_blur(const BitmapEngine *engine, Bitmap *bm, return; // Apply box blur (multiple passes, if requested) + unsigned align = 1 << engine->align_order; size_t size = sizeof(uint16_t) * bm->stride * 2; - uint16_t *tmp = ass_aligned_alloc(32, size, false); + uint16_t *tmp = ass_aligned_alloc(align, size, false); if (!tmp) return; @@ -101,9 +102,9 @@ bool alloc_bitmap(const BitmapEngine *engine, Bitmap *bm, unsigned align = 1 << engine->align_order; size_t s = ass_align(align, w); // Too often we use ints as offset for bitmaps => use INT_MAX. - if (s > (INT_MAX - 32) / FFMAX(h, 1)) + if (s > (INT_MAX - align) / FFMAX(h, 1)) return false; - uint8_t *buf = ass_aligned_alloc(align, s * h + 32, zero); + uint8_t *buf = ass_aligned_alloc(align, s * h + align, zero); if (!buf) return false; bm->w = w; diff --git a/libass/ass_render.c b/libass/ass_render.c index c6c1e45..05a0604 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -714,6 +714,7 @@ static void blend_vector_clip(ASS_Renderer *render_priv, ASS_Image *head) bleft = left - bx; btop = top - by; + unsigned align = 1 << render_priv->engine->align_order; if (render_priv->state.clip_drawing_mode) { // Inverse clip if (ax + aw < bx || ay + ah < by || ax > bx + bw || @@ -722,7 +723,7 @@ static void blend_vector_clip(ASS_Renderer *render_priv, ASS_Image *head) } // Allocate new buffer and add to free list - nbuffer = ass_aligned_alloc(32, as * ah, false); + nbuffer = ass_aligned_alloc(align, as * ah + align, false); if (!nbuffer) break; @@ -740,9 +741,8 @@ static void blend_vector_clip(ASS_Renderer *render_priv, ASS_Image *head) } // Allocate new buffer and add to free list - unsigned align = (w >= 16) ? 16 : ((w >= 8) ? 8 : 1); unsigned ns = ass_align(align, w); - nbuffer = ass_aligned_alloc(align, ns * h, false); + nbuffer = ass_aligned_alloc(align, ns * h + align, false); if (!nbuffer) break; -- cgit v1.2.3