diff options
author | Paul B Mahol <onemda@gmail.com> | 2022-03-02 22:30:40 +0100 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2022-03-03 09:57:53 +0100 |
commit | dae95b3ffd62ed86cd2e3798c2f281aa67969eca (patch) | |
tree | a83c2dfe6a1c3f271406a7497ad053f8bfe59bfb /libavfilter/x86 | |
parent | 59520f068da89006d527f044a6560235260bcc6c (diff) |
avfilter/vf_maskedmerge: fix rounding when masking
Diffstat (limited to 'libavfilter/x86')
-rw-r--r-- | libavfilter/x86/vf_maskedmerge.asm | 17 |
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 |