diff options
author | Dr.Smile <vabnick@gmail.com> | 2022-08-09 03:58:25 +0300 |
---|---|---|
committer | Dr.Smile <vabnick@gmail.com> | 2022-12-04 02:17:38 +0300 |
commit | 99017a5bb0e88a3ad7100ecedb63c80475f5bbca (patch) | |
tree | 3da399d62068e5536354e13cbd033a229b5db730 /libass | |
parent | 7477ab2b12b443a0b880de89bfb32780b04c31bb (diff) | |
download | libass-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.am | 2 | ||||
-rw-r--r-- | libass/ass_bitmap_engine.c | 89 | ||||
-rw-r--r-- | libass/ass_func_template.h | 77 |
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) }, -}; |