mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-24 11:49:48 +00:00
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>
This commit is contained in:
parent
d14179e3d4
commit
fa50d9360b
@ -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]
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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…
Reference in New Issue
Block a user