summaryrefslogtreecommitdiffstats
path: root/libass
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2022-08-09 03:58:25 +0300
committerDr.Smile <vabnick@gmail.com>2022-12-04 02:17:38 +0300
commit99017a5bb0e88a3ad7100ecedb63c80475f5bbca (patch)
tree3da399d62068e5536354e13cbd033a229b5db730 /libass
parent7477ab2b12b443a0b880de89bfb32780b04c31bb (diff)
downloadlibass-99017a5bb0e88a3ad7100ecedb63c80475f5bbca.tar.bz2
libass-99017a5bb0e88a3ad7100ecedb63c80475f5bbca.tar.xz
Merge ass_func_template.h into ass_bitmap_engine.c
Diffstat (limited to 'libass')
-rw-r--r--libass/Makefile_library.am2
-rw-r--r--libass/ass_bitmap_engine.c89
-rw-r--r--libass/ass_func_template.h77
3 files changed, 74 insertions, 94 deletions
diff --git a/libass/Makefile_library.am b/libass/Makefile_library.am
index 72b118f..b447685 100644
--- a/libass/Makefile_library.am
+++ b/libass/Makefile_library.am
@@ -27,7 +27,7 @@ libass_libass_la_SOURCES = \
libass/ass_bitmap.h libass/ass_bitmap.c libass/ass_blur.c \
libass/ass_rasterizer.h libass/ass_rasterizer.c libass/ass_rasterizer_c.c \
libass/ass_render.h libass/ass_render.c libass/ass_render_api.c \
- libass/ass_func_template.h libass/ass_bitmap_engine.h libass/ass_bitmap_engine.c \
+ libass/ass_bitmap_engine.h libass/ass_bitmap_engine.c \
libass/wyhash.h
if ASM
diff --git a/libass/ass_bitmap_engine.c b/libass/ass_bitmap_engine.c
index f836906..54bb5c7 100644
--- a/libass/ass_bitmap_engine.c
+++ b/libass/ass_bitmap_engine.c
@@ -21,24 +21,81 @@
#include "ass_bitmap_engine.h"
-#define ALIGN C_ALIGN_ORDER
-#define DECORATE(func) ass_##func##_c
-#include "ass_func_template.h"
-#undef ALIGN
-#undef DECORATE
+#define RASTERIZER_PROTOTYPES(tile_size, suffix) \
+ FillSolidTileFunc ass_fill_solid_tile ## tile_size ## _ ## suffix; \
+ FillHalfplaneTileFunc ass_fill_halfplane_tile ## tile_size ## _ ## suffix; \
+ FillGenericTileFunc ass_fill_generic_tile ## tile_size ## _ ## suffix; \
+ MergeTileFunc ass_merge_tile ## tile_size ## _ ## suffix;
+
+#define PARAM_BLUR_SET(suffix) \
+ ass_blur4_ ## suffix, \
+ ass_blur5_ ## suffix, \
+ ass_blur6_ ## suffix, \
+ ass_blur7_ ## suffix, \
+ ass_blur8_ ## suffix
+
+#define GENERIC_PROTOTYPES(suffix) \
+ BitmapBlendFunc ass_add_bitmaps_ ## suffix; \
+ BitmapBlendFunc ass_imul_bitmaps_ ## suffix; \
+ BitmapMulFunc ass_mul_bitmaps_ ## suffix; \
+ BeBlurFunc ass_be_blur_ ## suffix; \
+ Convert8to16Func ass_stripe_unpack_ ## suffix; \
+ Convert16to8Func ass_stripe_pack_ ## suffix; \
+ FilterFunc ass_shrink_horz_ ## suffix, ass_shrink_vert_ ## suffix; \
+ FilterFunc ass_expand_horz_ ## suffix, ass_expand_vert_ ## suffix; \
+ ParamFilterFunc PARAM_BLUR_SET(horz_ ## suffix); \
+ ParamFilterFunc PARAM_BLUR_SET(vert_ ## suffix);
+
+#define BITMAP_ENGINE(align_order_, tile_order_, tile_size, suffix) \
+ const BitmapEngine ass_bitmap_engine_ ## suffix = { \
+ .align_order = align_order_, \
+ .tile_order = tile_order_, \
+ .fill_solid = ass_fill_solid_tile ## tile_size ## _ ## suffix, \
+ .fill_halfplane = ass_fill_halfplane_tile ## tile_size ## _ ## suffix, \
+ .fill_generic = ass_fill_generic_tile ## tile_size ## _ ## suffix, \
+ .merge_tile = ass_merge_tile ## tile_size ## _ ## suffix, \
+ .add_bitmaps = ass_add_bitmaps_ ## suffix, \
+ .imul_bitmaps = ass_imul_bitmaps_ ## suffix, \
+ .mul_bitmaps = ass_mul_bitmaps_ ## suffix, \
+ .be_blur = ass_be_blur_ ## suffix, \
+ .stripe_unpack = ass_stripe_unpack_ ## suffix, \
+ .stripe_pack = ass_stripe_pack_ ## suffix, \
+ .shrink_horz = ass_shrink_horz_ ## suffix, \
+ .shrink_vert = ass_shrink_vert_ ## suffix, \
+ .expand_horz = ass_expand_horz_ ## suffix, \
+ .expand_vert = ass_expand_vert_ ## suffix, \
+ .blur_horz = { PARAM_BLUR_SET(horz_ ## suffix) }, \
+ .blur_vert = { PARAM_BLUR_SET(vert_ ## suffix) }, \
+ };
+
+
+GENERIC_PROTOTYPES(c)
+#if CONFIG_LARGE_TILES
+RASTERIZER_PROTOTYPES(32, c)
+BITMAP_ENGINE(C_ALIGN_ORDER, 5, 32, c)
+#else
+RASTERIZER_PROTOTYPES(16, c)
+BITMAP_ENGINE(C_ALIGN_ORDER, 4, 16, c)
+#endif
#if CONFIG_ASM && ARCH_X86
-#define ALIGN 4
-#define DECORATE(func) ass_##func##_sse2
-#include "ass_func_template.h"
-#undef ALIGN
-#undef DECORATE
-
-#define ALIGN 5
-#define DECORATE(func) ass_##func##_avx2
-#include "ass_func_template.h"
-#undef ALIGN
-#undef DECORATE
+GENERIC_PROTOTYPES(sse2)
+#if CONFIG_LARGE_TILES
+RASTERIZER_PROTOTYPES(32, sse2)
+BITMAP_ENGINE(4, 5, 32, sse2)
+#else
+RASTERIZER_PROTOTYPES(16, sse2)
+BITMAP_ENGINE(4, 4, 16, sse2)
+#endif
+
+GENERIC_PROTOTYPES(avx2)
+#if CONFIG_LARGE_TILES
+RASTERIZER_PROTOTYPES(32, avx2)
+BITMAP_ENGINE(5, 5, 32, avx2)
+#else
+RASTERIZER_PROTOTYPES(16, avx2)
+BITMAP_ENGINE(5, 4, 16, avx2)
+#endif
#endif
diff --git a/libass/ass_func_template.h b/libass/ass_func_template.h
deleted file mode 100644
index 892e498..0000000
--- a/libass/ass_func_template.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2015 Vabishchevich Nikolay <vabnick@gmail.com>
- *
- * This file is part of libass.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-
-FillSolidTileFunc DECORATE(fill_solid_tile16);
-FillHalfplaneTileFunc DECORATE(fill_halfplane_tile16);
-FillGenericTileFunc DECORATE(fill_generic_tile16);
-MergeTileFunc DECORATE(merge_tile16);
-
-FillSolidTileFunc DECORATE(fill_solid_tile32);
-FillHalfplaneTileFunc DECORATE(fill_halfplane_tile32);
-FillGenericTileFunc DECORATE(fill_generic_tile32);
-MergeTileFunc DECORATE(merge_tile32);
-
-BitmapBlendFunc DECORATE(add_bitmaps), DECORATE(imul_bitmaps);
-BitmapMulFunc DECORATE(mul_bitmaps);
-
-BeBlurFunc DECORATE(be_blur);
-
-Convert8to16Func DECORATE(stripe_unpack);
-Convert16to8Func DECORATE(stripe_pack);
-FilterFunc DECORATE(shrink_horz), DECORATE(shrink_vert);
-FilterFunc DECORATE(expand_horz), DECORATE(expand_vert);
-ParamFilterFunc DECORATE(blur4_horz), DECORATE(blur4_vert);
-ParamFilterFunc DECORATE(blur5_horz), DECORATE(blur5_vert);
-ParamFilterFunc DECORATE(blur6_horz), DECORATE(blur6_vert);
-ParamFilterFunc DECORATE(blur7_horz), DECORATE(blur7_vert);
-ParamFilterFunc DECORATE(blur8_horz), DECORATE(blur8_vert);
-
-
-const BitmapEngine DECORATE(bitmap_engine) = {
- .align_order = ALIGN,
-
-#if CONFIG_LARGE_TILES
- .tile_order = 5,
- .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),
- .imul_bitmaps = DECORATE(imul_bitmaps),
- .mul_bitmaps = DECORATE(mul_bitmaps),
-
- .be_blur = DECORATE(be_blur),
-
- .stripe_unpack = DECORATE(stripe_unpack),
- .stripe_pack = DECORATE(stripe_pack),
- .shrink_horz = DECORATE(shrink_horz),
- .shrink_vert = DECORATE(shrink_vert),
- .expand_horz = DECORATE(expand_horz),
- .expand_vert = DECORATE(expand_vert),
- .blur_horz = { DECORATE(blur4_horz), DECORATE(blur5_horz), DECORATE(blur6_horz), DECORATE(blur7_horz), DECORATE(blur8_horz) },
- .blur_vert = { DECORATE(blur4_vert), DECORATE(blur5_vert), DECORATE(blur6_vert), DECORATE(blur7_vert), DECORATE(blur8_vert) },
-};