summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2021-03-08 03:37:37 +0300
committerDr.Smile <vabnick@gmail.com>2021-04-21 20:58:01 +0300
commitcb5263a55b79e45517f09ff19d8fcfa921deb94a (patch)
tree00a330150836a122a158b7a4304a63413be9a167
parent49f116ab1fa4386f6a5191f322ac29872279516e (diff)
downloadlibass-cb5263a55b79e45517f09ff19d8fcfa921deb94a.tar.bz2
libass-cb5263a55b79e45517f09ff19d8fcfa921deb94a.tar.xz
Make alignment and padding of all bitmaps consistent
-rw-r--r--libass/ass_bitmap.c7
-rw-r--r--libass/ass_render.c6
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;