diff options
author | Dr.Smile <vabnick@gmail.com> | 2022-08-09 03:56:44 +0300 |
---|---|---|
committer | Dr.Smile <vabnick@gmail.com> | 2022-12-04 02:17:38 +0300 |
commit | 3fdf7e58e810855ac5ea26dd6ee0d958553d6af5 (patch) | |
tree | 7bb63c91eec8b73b0aee09ac0d9d341fff7f16e5 /libass | |
parent | 4b10baeecd33be785e09a11e7cbcb48662ed1af9 (diff) | |
download | libass-3fdf7e58e810855ac5ea26dd6ee0d958553d6af5.tar.bz2 libass-3fdf7e58e810855ac5ea26dd6ee0d958553d6af5.tar.xz |
Move BitmapEngine infrastructure into separate file
Diffstat (limited to 'libass')
-rw-r--r-- | libass/Makefile_library.am | 2 | ||||
-rw-r--r-- | libass/ass_bitmap.c | 22 | ||||
-rw-r--r-- | libass/ass_bitmap.h | 65 | ||||
-rw-r--r-- | libass/ass_bitmap_engine.c | 44 | ||||
-rw-r--r-- | libass/ass_bitmap_engine.h | 87 |
5 files changed, 133 insertions, 87 deletions
diff --git a/libass/Makefile_library.am b/libass/Makefile_library.am index adf5f24..72b118f 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_func_template.h libass/ass_bitmap_engine.h libass/ass_bitmap_engine.c \ libass/wyhash.h if ASM diff --git a/libass/ass_bitmap.c b/libass/ass_bitmap.c index 3f62f82..0c52df9 100644 --- a/libass/ass_bitmap.c +++ b/libass/ass_bitmap.c @@ -36,28 +36,6 @@ #include "ass_render.h" -#define ALIGN C_ALIGN_ORDER -#define DECORATE(func) ass_##func##_c -#include "ass_func_template.h" -#undef ALIGN -#undef DECORATE - -#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 - -#endif - static void be_blur_pre(uint8_t *buf, intptr_t stride, intptr_t width, intptr_t height) { for (int y = 0; y < height; ++y) diff --git a/libass/ass_bitmap.h b/libass/ass_bitmap.h index 9f425cc..c337bf1 100644 --- a/libass/ass_bitmap.h +++ b/libass/ass_bitmap.h @@ -25,70 +25,7 @@ #include "ass.h" #include "ass_outline.h" - - -struct segment; -typedef void (*FillSolidTileFunc)(uint8_t *buf, ptrdiff_t stride, int set); -typedef void (*FillHalfplaneTileFunc)(uint8_t *buf, ptrdiff_t stride, - int32_t a, int32_t b, int64_t c, int32_t scale); -typedef void (*FillGenericTileFunc)(uint8_t *buf, ptrdiff_t stride, - const struct segment *line, size_t n_lines, - int winding); -typedef void (*MergeTileFunc)(uint8_t *buf, ptrdiff_t stride, const uint8_t *tile); - -typedef void (*BitmapBlendFunc)(uint8_t *dst, intptr_t dst_stride, - uint8_t *src, intptr_t src_stride, - intptr_t width, intptr_t height); -typedef void (*BitmapMulFunc)(uint8_t *dst, intptr_t dst_stride, - uint8_t *src1, intptr_t src1_stride, - uint8_t *src2, intptr_t src2_stride, - intptr_t width, intptr_t height); - -typedef void (*BeBlurFunc)(uint8_t *buf, intptr_t stride, - intptr_t width, intptr_t height, uint16_t *tmp); - -// intermediate bitmaps represented as sets of verical stripes of int16_t[alignment / 2] -typedef void (*Convert8to16Func)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, - uintptr_t width, uintptr_t height); -typedef void (*Convert16to8Func)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src, - uintptr_t width, uintptr_t height); -typedef void (*FilterFunc)(int16_t *dst, const int16_t *src, - uintptr_t src_width, uintptr_t src_height); -typedef void (*ParamFilterFunc)(int16_t *dst, const int16_t *src, - uintptr_t src_width, uintptr_t src_height, - const int16_t *param); - -#define C_ALIGN_ORDER 5 - -typedef struct { - int align_order; // log2(alignment) - - // rasterizer functions - int tile_order; // log2(tile_size) - FillSolidTileFunc fill_solid; - FillHalfplaneTileFunc fill_halfplane; - FillGenericTileFunc fill_generic; - MergeTileFunc merge_tile; - - // blend functions - BitmapBlendFunc add_bitmaps, imul_bitmaps; - BitmapMulFunc mul_bitmaps; - - // be blur function - BeBlurFunc be_blur; - - // gaussian blur functions - Convert8to16Func stripe_unpack; - Convert16to8Func stripe_pack; - FilterFunc shrink_horz, shrink_vert; - FilterFunc expand_horz, expand_vert; - ParamFilterFunc blur_horz[5], blur_vert[5]; -} BitmapEngine; - -extern const BitmapEngine ass_bitmap_engine_c; -extern const BitmapEngine ass_bitmap_engine_sse2; -extern const BitmapEngine ass_bitmap_engine_avx2; - +#include "ass_bitmap_engine.h" typedef struct { int32_t left, top; diff --git a/libass/ass_bitmap_engine.c b/libass/ass_bitmap_engine.c new file mode 100644 index 0000000..f836906 --- /dev/null +++ b/libass/ass_bitmap_engine.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2021-2022 libass contributors + * + * 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. + */ + +#include "config.h" +#include "ass_compat.h" + +#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 + +#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 + +#endif diff --git a/libass/ass_bitmap_engine.h b/libass/ass_bitmap_engine.h new file mode 100644 index 0000000..7198947 --- /dev/null +++ b/libass/ass_bitmap_engine.h @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2021-2022 libass contributors + * + * 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. + */ + +#ifndef LIBASS_BITMAP_ENGINE_H +#define LIBASS_BITMAP_ENGINE_H + +#include <stddef.h> +#include <stdint.h> + +struct segment; +typedef void (*FillSolidTileFunc)(uint8_t *buf, ptrdiff_t stride, int set); +typedef void (*FillHalfplaneTileFunc)(uint8_t *buf, ptrdiff_t stride, + int32_t a, int32_t b, int64_t c, int32_t scale); +typedef void (*FillGenericTileFunc)(uint8_t *buf, ptrdiff_t stride, + const struct segment *line, size_t n_lines, + int winding); +typedef void (*MergeTileFunc)(uint8_t *buf, ptrdiff_t stride, const uint8_t *tile); + +typedef void (*BitmapBlendFunc)(uint8_t *dst, intptr_t dst_stride, + uint8_t *src, intptr_t src_stride, + intptr_t width, intptr_t height); +typedef void (*BitmapMulFunc)(uint8_t *dst, intptr_t dst_stride, + uint8_t *src1, intptr_t src1_stride, + uint8_t *src2, intptr_t src2_stride, + intptr_t width, intptr_t height); + +typedef void (*BeBlurFunc)(uint8_t *buf, intptr_t stride, + intptr_t width, intptr_t height, uint16_t *tmp); + +// intermediate bitmaps represented as sets of verical stripes of int16_t[alignment / 2] +typedef void (*Convert8to16Func)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, + uintptr_t width, uintptr_t height); +typedef void (*Convert16to8Func)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src, + uintptr_t width, uintptr_t height); +typedef void (*FilterFunc)(int16_t *dst, const int16_t *src, + uintptr_t src_width, uintptr_t src_height); +typedef void (*ParamFilterFunc)(int16_t *dst, const int16_t *src, + uintptr_t src_width, uintptr_t src_height, + const int16_t *param); + +#define C_ALIGN_ORDER 5 + +typedef struct { + int align_order; // log2(alignment) + + // rasterizer functions + int tile_order; // log2(tile_size) + FillSolidTileFunc fill_solid; + FillHalfplaneTileFunc fill_halfplane; + FillGenericTileFunc fill_generic; + MergeTileFunc merge_tile; + + // blend functions + BitmapBlendFunc add_bitmaps, imul_bitmaps; + BitmapMulFunc mul_bitmaps; + + // be blur function + BeBlurFunc be_blur; + + // gaussian blur functions + Convert8to16Func stripe_unpack; + Convert16to8Func stripe_pack; + FilterFunc shrink_horz, shrink_vert; + FilterFunc expand_horz, expand_vert; + ParamFilterFunc blur_horz[5], blur_vert[5]; +} BitmapEngine; + +extern const BitmapEngine ass_bitmap_engine_c; +extern const BitmapEngine ass_bitmap_engine_sse2; +extern const BitmapEngine ass_bitmap_engine_avx2; + +#endif /* LIBASS_BITMAP_ENGINE_H */ |