diff options
author | James Almer <jamrial@gmail.com> | 2017-06-27 12:27:10 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2017-06-27 13:17:23 -0300 |
commit | fa50d9360ba36ba2ee8f85f2c59e8d6af20e833a (patch) | |
tree | b9dd29169dcb75acda73773e025d286781a0f46e /libavfilter/x86 | |
parent | d14179e3d49eb0f2533db16151e01abb0018b165 (diff) | |
download | ffmpeg-fa50d9360ba36ba2ee8f85f2c59e8d6af20e833a.tar.gz |
x86/vf_blend: add sse and ssse3 extremity functions
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavfilter/x86')
-rw-r--r-- | libavfilter/x86/vf_blend.asm | 25 | ||||
-rw-r--r-- | libavfilter/x86/vf_blend_init.c | 4 |
2 files changed, 29 insertions, 0 deletions
diff --git a/libavfilter/x86/vf_blend.asm b/libavfilter/x86/vf_blend.asm index 33b1ad1496..25f6f5affc 100644 --- a/libavfilter/x86/vf_blend.asm +++ b/libavfilter/x86/vf_blend.asm @@ -286,6 +286,31 @@ BLEND_INIT difference, 3 jl .loop BLEND_END +BLEND_INIT extremity, 8 + pxor m2, m2 + mova m4, [pw_255] +.nextrow: + mov xq, widthq + + .loop: + movu m0, [topq + xq] + movu m1, [bottomq + xq] + punpckhbw m5, m0, m2 + punpcklbw m0, m2 + punpckhbw m6, m1, m2 + punpcklbw m1, m2 + psubw m3, m4, m0 + psubw m7, m4, m5 + psubw m3, m1 + psubw m7, m6 + ABS1 m3, m1 + ABS1 m7, m6 + packuswb m3, m7 + mova [dstq + xq], m3 + add xq, mmsize + jl .loop +BLEND_END + BLEND_INIT negation, 5 pxor m2, m2 mova m4, [pw_255] diff --git a/libavfilter/x86/vf_blend_init.c b/libavfilter/x86/vf_blend_init.c index 96fe3d8baa..71f9b0a685 100644 --- a/libavfilter/x86/vf_blend_init.c +++ b/libavfilter/x86/vf_blend_init.c @@ -47,6 +47,8 @@ BLEND_FUNC(subtract, sse2) BLEND_FUNC(xor, sse2) BLEND_FUNC(difference, sse2) BLEND_FUNC(difference, ssse3) +BLEND_FUNC(extremity, sse2) +BLEND_FUNC(extremity, ssse3) BLEND_FUNC(negation, sse2) BLEND_FUNC(negation, ssse3) @@ -72,12 +74,14 @@ av_cold void ff_blend_init_x86(FilterParams *param, int is_16bit) case BLEND_SUBTRACT: param->blend = ff_blend_subtract_sse2; break; case BLEND_XOR: param->blend = ff_blend_xor_sse2; break; case BLEND_DIFFERENCE: param->blend = ff_blend_difference_sse2; break; + case BLEND_EXTREMITY: param->blend = ff_blend_extremity_sse2; break; case BLEND_NEGATION: param->blend = ff_blend_negation_sse2; break; } } if (EXTERNAL_SSSE3(cpu_flags) && param->opacity == 1 && !is_16bit) { switch (param->mode) { case BLEND_DIFFERENCE: param->blend = ff_blend_difference_ssse3; break; + case BLEND_EXTREMITY: param->blend = ff_blend_extremity_ssse3; break; case BLEND_NEGATION: param->blend = ff_blend_negation_ssse3; break; } } |