summaryrefslogtreecommitdiffstats
path: root/libass/ass_render.c
diff options
context:
space:
mode:
author11rcombs <rodger.combs@gmail.com>2014-01-25 16:55:21 -0600
committer11rcombs <rodger.combs@gmail.com>2014-01-25 19:09:16 -0600
commit31bc8ba5cc9850cd77cba84e0932d11cd5607e5f (patch)
tree5615a98c8a79c910843352423f4df84a564507d7 /libass/ass_render.c
parent5dd56af2f97419ce5a72d1dab2e9c19b34c1dd57 (diff)
downloadlibass-31bc8ba5cc9850cd77cba84e0932d11cd5607e5f.tar.bz2
libass-31bc8ba5cc9850cd77cba84e0932d11cd5607e5f.tar.xz
Added x86 ASM functions
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r--libass/ass_render.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index e6e6052..0f17404 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -33,6 +33,12 @@
#define SUBPIXEL_MASK 63
#define SUBPIXEL_ACCURACY 7
+#if (defined(__i386__) || defined(__x86_64__)) && CONFIG_ASM
+
+#include "x86/blend_bitmaps.h"
+#include "x86/be_blur.h"
+
+#endif // ASM
ASS_Renderer *ass_renderer_init(ASS_Library *library)
{
@@ -63,10 +69,29 @@ ASS_Renderer *ass_renderer_init(ASS_Library *library)
priv->ftlibrary = ft;
// images_root and related stuff is zero-filled in calloc
- priv->add_bitmaps_func = add_bitmaps_c;
- priv->sub_bitmaps_func = sub_bitmaps_c;
- priv->mul_bitmaps_func = mul_bitmaps_c;
- priv->be_blur_func = be_blur_c;
+ #if (defined(__i386__) || defined(__x86_64__)) && CONFIG_ASM
+ int sse2 = has_sse2();
+ int avx2 = has_avx2();
+ priv->add_bitmaps_func = avx2 ? ass_add_bitmaps_avx2 :
+ (sse2 ? ass_add_bitmaps_sse2 : ass_add_bitmaps_x86);
+ #ifdef __x86_64__
+ priv->be_blur_func = avx2 ? ass_be_blur_avx2 :
+ (sse2 ? ass_be_blur_sse2 : be_blur_c);
+ priv->mul_bitmaps_func = avx2 ? ass_mul_bitmaps_avx2 :
+ (sse2 ? ass_mul_bitmaps_sse2 : mul_bitmaps_c);
+ priv->sub_bitmaps_func = avx2 ? ass_sub_bitmaps_avx2 :
+ (sse2 ? ass_sub_bitmaps_sse2 : ass_sub_bitmaps_x86);
+ #else
+ priv->be_blur_func = be_blur_c;
+ priv->mul_bitmaps_func = mul_bitmaps_c;
+ priv->sub_bitmaps_func = ass_sub_bitmaps_x86;
+ #endif
+ #else
+ priv->add_bitmaps_func = add_bitmaps_c;
+ priv->sub_bitmaps_func = sub_bitmaps_c;
+ priv->mul_bitmaps_func = mul_bitmaps_c;
+ priv->be_blur_func = be_blur_c;
+ #endif
priv->restride_bitmap_func = restride_bitmap_c;
priv->cache.font_cache = ass_font_cache_create();