summaryrefslogtreecommitdiffstats
path: root/libavfilter/x86/vf_blend.asm
diff options
context:
space:
mode:
Diffstat (limited to 'libavfilter/x86/vf_blend.asm')
-rw-r--r--libavfilter/x86/vf_blend.asm29
1 files changed, 29 insertions, 0 deletions
diff --git a/libavfilter/x86/vf_blend.asm b/libavfilter/x86/vf_blend.asm
index 50b5f8a..a5ea74c 100644
--- a/libavfilter/x86/vf_blend.asm
+++ b/libavfilter/x86/vf_blend.asm
@@ -111,6 +111,13 @@ BLEND_END
psrlw %1, 8 ; 00xx00xx a * b / 255
%endmacro
+%macro SCREEN 4 ; a, b, pw_1, pw_255
+ pxor %1, %4 ; 00xx00xx 255 - a
+ pxor %2, %4
+ MULTIPLY %1, %2, %3
+ pxor %1, %4 ; 00xx00xx 255 - x / 255
+%endmacro
+
BLEND_INIT multiply, 4
pxor m2, m2
mova m3, [pw_1]
@@ -134,6 +141,28 @@ BLEND_INIT multiply, 4
jl .loop
BLEND_END
+BLEND_INIT screen, 5
+ pxor m2, m2
+ mova m3, [pw_1]
+ mova m4, [pw_255]
+.nextrow:
+ mov xq, widthq
+
+ .loop:
+ movh m0, [topq + xq] ; 0000xxxx
+ movh m1, [bottomq + xq]
+ punpcklbw m0, m2 ; 00xx00xx
+ punpcklbw m1, m2
+
+ SCREEN m0, m1, m3, m4
+
+ packuswb m0, m0 ; 0000xxxx
+ movh [dstq + xq], m0
+ add xq, mmsize / 2
+
+ jl .loop
+BLEND_END
+
BLEND_INIT average, 3
pxor m2, m2
.nextrow:
OpenPOWER on IntegriCloud