summaryrefslogtreecommitdiff
path: root/libavfilter/x86
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2022-03-02 22:30:40 +0100
committerPaul B Mahol <onemda@gmail.com>2022-03-03 09:57:53 +0100
commitdae95b3ffd62ed86cd2e3798c2f281aa67969eca (patch)
treea83c2dfe6a1c3f271406a7497ad053f8bfe59bfb /libavfilter/x86
parent59520f068da89006d527f044a6560235260bcc6c (diff)
avfilter/vf_maskedmerge: fix rounding when masking
Diffstat (limited to 'libavfilter/x86')
-rw-r--r--libavfilter/x86/vf_maskedmerge.asm17
1 files changed, 10 insertions, 7 deletions
diff --git a/libavfilter/x86/vf_maskedmerge.asm b/libavfilter/x86/vf_maskedmerge.asm
index 7e61935b97..1028299087 100644
--- a/libavfilter/x86/vf_maskedmerge.asm
+++ b/libavfilter/x86/vf_maskedmerge.asm
@@ -24,26 +24,28 @@
SECTION_RODATA
-pw_128: times 8 dw 128
-pw_256: times 8 dw 256
+pw_127: times 8 dw 127
+pw_255: times 8 dw 255
+pw_32897: times 8 dw 32897
SECTION .text
INIT_XMM sse2
%if ARCH_X86_64
-cglobal maskedmerge8, 8, 11, 7, bsrc, osrc, msrc, dst, blinesize, olinesize, mlinesize, dlinesize, w, h, x
+cglobal maskedmerge8, 8, 11, 8, bsrc, osrc, msrc, dst, blinesize, olinesize, mlinesize, dlinesize, w, h, x
mov wd, dword wm
mov hd, dword hm
%else
-cglobal maskedmerge8, 5, 7, 7, bsrc, osrc, msrc, dst, blinesize, w, x
+cglobal maskedmerge8, 5, 7, 8, bsrc, osrc, msrc, dst, blinesize, w, x
mov wd, r8m
%define olinesizeq r5mp
%define mlinesizeq r6mp
%define dlinesizeq r7mp
%define hd r9mp
%endif
- mova m4, [pw_256]
- mova m5, [pw_128]
+ mova m4, [pw_255]
+ mova m5, [pw_127]
+ mova m7, [pw_32897]
pxor m6, m6
add bsrcq, wq
add osrcq, wq
@@ -66,7 +68,8 @@ cglobal maskedmerge8, 5, 7, 7, bsrc, osrc, msrc, dst, blinesize, w, x
pmullw m1, m3
paddw m1, m2
paddw m1, m5
- psrlw m1, 8
+ pmulhuw m1, m7
+ psrlw m1, 7
packuswb m1, m1
movh [dstq + xq], m1
add xq, mmsize / 2