summaryrefslogtreecommitdiffstats
path: root/libass/ass_func_template.h
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2021-09-26 05:06:54 +0300
committerDr.Smile <vabnick@gmail.com>2021-09-26 17:13:07 +0300
commit813237b76e3219294a87160407d51932e53d5721 (patch)
tree093268e0dace26d43e8f68342b65bfb9bf8d0e7a /libass/ass_func_template.h
parent4c3ace7cdcc740652331dbd57cc500b4ad50be81 (diff)
downloadlibass-813237b76e3219294a87160407d51932e53d5721.tar.bz2
libass-813237b76e3219294a87160407d51932e53d5721.tar.xz
rasterizer: use max-blending for outline pair merge
Max-blending is more correct than previous addition-blending in case of small (less than pixel) outline offsets. Fixes buffer overrun (up to 16 bytes read past rst->tile) in add_bitmaps() in case of engine->tile_order < engine->align_order (AVX2 assembly with LARGE_TILES disabled) due to insufficient padding.
Diffstat (limited to 'libass/ass_func_template.h')
-rw-r--r--libass/ass_func_template.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/libass/ass_func_template.h b/libass/ass_func_template.h
index 3556a76..c1ea12a 100644
--- a/libass/ass_func_template.h
+++ b/libass/ass_func_template.h
@@ -30,6 +30,8 @@ void DECORATE(fill_generic_tile16)(uint8_t *buf, ptrdiff_t stride,
void DECORATE(fill_generic_tile32)(uint8_t *buf, ptrdiff_t stride,
const struct segment *line, size_t n_lines,
int winding);
+void DECORATE(merge_tile16)(uint8_t *buf, ptrdiff_t stride, const uint8_t *tile);
+void DECORATE(merge_tile32)(uint8_t *buf, ptrdiff_t stride, const uint8_t *tile);
void DECORATE(add_bitmaps)(uint8_t *dst, intptr_t dst_stride,
uint8_t *src, intptr_t src_stride,
@@ -97,11 +99,13 @@ const BitmapEngine DECORATE(bitmap_engine) = {
.fill_solid = DECORATE(fill_solid_tile32),
.fill_halfplane = DECORATE(fill_halfplane_tile32),
.fill_generic = DECORATE(fill_generic_tile32),
+ .merge_tile = DECORATE(merge_tile32),
#else
.tile_order = 4,
.fill_solid = DECORATE(fill_solid_tile16),
.fill_halfplane = DECORATE(fill_halfplane_tile16),
.fill_generic = DECORATE(fill_generic_tile16),
+ .merge_tile = DECORATE(merge_tile16),
#endif
.add_bitmaps = DECORATE(add_bitmaps),