summaryrefslogtreecommitdiffstats
path: root/libass
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2022-08-09 03:56:44 +0300
committerDr.Smile <vabnick@gmail.com>2022-12-04 02:17:38 +0300
commit3fdf7e58e810855ac5ea26dd6ee0d958553d6af5 (patch)
tree7bb63c91eec8b73b0aee09ac0d9d341fff7f16e5 /libass
parent4b10baeecd33be785e09a11e7cbcb48662ed1af9 (diff)
downloadlibass-3fdf7e58e810855ac5ea26dd6ee0d958553d6af5.tar.bz2
libass-3fdf7e58e810855ac5ea26dd6ee0d958553d6af5.tar.xz
Move BitmapEngine infrastructure into separate file
Diffstat (limited to 'libass')
-rw-r--r--libass/Makefile_library.am2
-rw-r--r--libass/ass_bitmap.c22
-rw-r--r--libass/ass_bitmap.h65
-rw-r--r--libass/ass_bitmap_engine.c44
-rw-r--r--libass/ass_bitmap_engine.h87
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 */