diff options
author | 11rcombs <rodger.combs@gmail.com> | 2014-01-25 16:55:21 -0600 |
---|---|---|
committer | 11rcombs <rodger.combs@gmail.com> | 2014-01-25 19:09:16 -0600 |
commit | 31bc8ba5cc9850cd77cba84e0932d11cd5607e5f (patch) | |
tree | 5615a98c8a79c910843352423f4df84a564507d7 /libass/ass_render.c | |
parent | 5dd56af2f97419ce5a72d1dab2e9c19b34c1dd57 (diff) | |
download | libass-31bc8ba5cc9850cd77cba84e0932d11cd5607e5f.tar.bz2 libass-31bc8ba5cc9850cd77cba84e0932d11cd5607e5f.tar.xz |
Added x86 ASM functions
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r-- | libass/ass_render.c | 33 |
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(); |