Commit fa50d936 authored by James Almer's avatar James Almer

x86/vf_blend: add sse and ssse3 extremity functions

Reviewed-by: 's avatarPaul B Mahol <onemda@gmail.com>
Signed-off-by: 's avatarJames Almer <jamrial@gmail.com>
parent d14179e3
...@@ -286,6 +286,31 @@ BLEND_INIT difference, 3 ...@@ -286,6 +286,31 @@ BLEND_INIT difference, 3
jl .loop jl .loop
BLEND_END 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 BLEND_INIT negation, 5
pxor m2, m2 pxor m2, m2
mova m4, [pw_255] mova m4, [pw_255]
......
...@@ -47,6 +47,8 @@ BLEND_FUNC(subtract, sse2) ...@@ -47,6 +47,8 @@ BLEND_FUNC(subtract, sse2)
BLEND_FUNC(xor, sse2) BLEND_FUNC(xor, sse2)
BLEND_FUNC(difference, sse2) BLEND_FUNC(difference, sse2)
BLEND_FUNC(difference, ssse3) BLEND_FUNC(difference, ssse3)
BLEND_FUNC(extremity, sse2)
BLEND_FUNC(extremity, ssse3)
BLEND_FUNC(negation, sse2) BLEND_FUNC(negation, sse2)
BLEND_FUNC(negation, ssse3) BLEND_FUNC(negation, ssse3)
...@@ -72,12 +74,14 @@ av_cold void ff_blend_init_x86(FilterParams *param, int is_16bit) ...@@ -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_SUBTRACT: param->blend = ff_blend_subtract_sse2; break;
case BLEND_XOR: param->blend = ff_blend_xor_sse2; break; case BLEND_XOR: param->blend = ff_blend_xor_sse2; break;
case BLEND_DIFFERENCE: param->blend = ff_blend_difference_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; case BLEND_NEGATION: param->blend = ff_blend_negation_sse2; break;
} }
} }
if (EXTERNAL_SSSE3(cpu_flags) && param->opacity == 1 && !is_16bit) { if (EXTERNAL_SSSE3(cpu_flags) && param->opacity == 1 && !is_16bit) {
switch (param->mode) { switch (param->mode) {
case BLEND_DIFFERENCE: param->blend = ff_blend_difference_ssse3; break; 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; case BLEND_NEGATION: param->blend = ff_blend_negation_ssse3; break;
} }
} }
......
...@@ -117,6 +117,7 @@ void checkasm_check_blend(void) ...@@ -117,6 +117,7 @@ void checkasm_check_blend(void)
check_and_report(subtract, BLEND_SUBTRACT) check_and_report(subtract, BLEND_SUBTRACT)
check_and_report(xor, BLEND_XOR) check_and_report(xor, BLEND_XOR)
check_and_report(difference, BLEND_DIFFERENCE) check_and_report(difference, BLEND_DIFFERENCE)
check_and_report(extremity, BLEND_EXTREMITY)
check_and_report(negation, BLEND_NEGATION) check_and_report(negation, BLEND_NEGATION)
report("8bit"); report("8bit");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment