Browse Source

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>
tags/n3.4
James Almer 8 years ago
parent
commit
fa50d9360b
3 changed files with 30 additions and 0 deletions
  1. +25
    -0
      libavfilter/x86/vf_blend.asm
  2. +4
    -0
      libavfilter/x86/vf_blend_init.c
  3. +1
    -0
      tests/checkasm/vf_blend.c

+ 25
- 0
libavfilter/x86/vf_blend.asm View File

@@ -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]


+ 4
- 0
libavfilter/x86/vf_blend_init.c View File

@@ -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;
}
}


+ 1
- 0
tests/checkasm/vf_blend.c View File

@@ -117,6 +117,7 @@ void checkasm_check_blend(void)
check_and_report(subtract, BLEND_SUBTRACT)
check_and_report(xor, BLEND_XOR)
check_and_report(difference, BLEND_DIFFERENCE)
check_and_report(extremity, BLEND_EXTREMITY)
check_and_report(negation, BLEND_NEGATION)

report("8bit");


Loading…
Cancel
Save