summaryrefslogtreecommitdiff
path: root/libavfilter/x86/vf_blend_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavfilter/x86/vf_blend_init.c')
-rw-r--r--libavfilter/x86/vf_blend_init.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/libavfilter/x86/vf_blend_init.c b/libavfilter/x86/vf_blend_init.c
index a4fc9af246..6e782e4edb 100644
--- a/libavfilter/x86/vf_blend_init.c
+++ b/libavfilter/x86/vf_blend_init.c
@@ -31,26 +31,43 @@ void ff_blend_##name##_##opt(const uint8_t *top, ptrdiff_t top_linesize, \
struct FilterParams *param, double *values, int starty);
BLEND_FUNC(addition, sse2)
+BLEND_FUNC(addition, avx2)
BLEND_FUNC(grainmerge, sse2)
+BLEND_FUNC(grainmerge, avx2)
BLEND_FUNC(average, sse2)
+BLEND_FUNC(average, avx2)
BLEND_FUNC(and, sse2)
+BLEND_FUNC(and, avx2)
BLEND_FUNC(darken, sse2)
+BLEND_FUNC(darken, avx2)
BLEND_FUNC(grainextract, sse2)
+BLEND_FUNC(grainextract, avx2)
BLEND_FUNC(multiply, sse2)
+BLEND_FUNC(multiply, avx2)
BLEND_FUNC(screen, sse2)
+BLEND_FUNC(screen, avx2)
BLEND_FUNC(hardmix, sse2)
+BLEND_FUNC(hardmix, avx2)
BLEND_FUNC(divide, sse2)
BLEND_FUNC(lighten, sse2)
+BLEND_FUNC(lighten, avx2)
BLEND_FUNC(or, sse2)
+BLEND_FUNC(or, avx2)
BLEND_FUNC(phoenix, sse2)
+BLEND_FUNC(phoenix, avx2)
BLEND_FUNC(subtract, sse2)
+BLEND_FUNC(subtract, avx2)
BLEND_FUNC(xor, sse2)
+BLEND_FUNC(xor, avx2)
BLEND_FUNC(difference, sse2)
BLEND_FUNC(difference, ssse3)
+BLEND_FUNC(difference, avx2)
BLEND_FUNC(extremity, sse2)
BLEND_FUNC(extremity, ssse3)
+BLEND_FUNC(extremity, avx2)
BLEND_FUNC(negation, sse2)
BLEND_FUNC(negation, ssse3)
+BLEND_FUNC(negation, avx2)
av_cold void ff_blend_init_x86(FilterParams *param, int is_16bit)
{
@@ -85,4 +102,26 @@ av_cold void ff_blend_init_x86(FilterParams *param, int is_16bit)
case BLEND_NEGATION: param->blend = ff_blend_negation_ssse3; break;
}
}
+
+ if (EXTERNAL_AVX2_FAST(cpu_flags) && param->opacity == 1 && !is_16bit) {
+ switch (param->mode) {
+ case BLEND_ADDITION: param->blend = ff_blend_addition_avx2; break;
+ case BLEND_GRAINMERGE: param->blend = ff_blend_grainmerge_avx2; break;
+ case BLEND_AND: param->blend = ff_blend_and_avx2; break;
+ case BLEND_AVERAGE: param->blend = ff_blend_average_avx2; break;
+ case BLEND_DARKEN: param->blend = ff_blend_darken_avx2; break;
+ case BLEND_GRAINEXTRACT: param->blend = ff_blend_grainextract_avx2; break;
+ case BLEND_HARDMIX: param->blend = ff_blend_hardmix_avx2; break;
+ case BLEND_LIGHTEN: param->blend = ff_blend_lighten_avx2; break;
+ case BLEND_MULTIPLY: param->blend = ff_blend_multiply_avx2; break;
+ case BLEND_OR: param->blend = ff_blend_or_avx2; break;
+ case BLEND_PHOENIX: param->blend = ff_blend_phoenix_avx2; break;
+ case BLEND_SCREEN: param->blend = ff_blend_screen_avx2; break;
+ case BLEND_SUBTRACT: param->blend = ff_blend_subtract_avx2; break;
+ case BLEND_XOR: param->blend = ff_blend_xor_avx2; break;
+ case BLEND_DIFFERENCE: param->blend = ff_blend_difference_avx2; break;
+ case BLEND_EXTREMITY: param->blend = ff_blend_extremity_avx2; break;
+ case BLEND_NEGATION: param->blend = ff_blend_negation_avx2; break;
+ }
+ }
}