[FFmpeg-devel] [PATCH 1/3] lavu/x86util: make imprecise PMINSD implementation opt-in
Rodger Combs
rodger.combs at gmail.com
Wed Jan 23 04:39:12 EET 2019
This caused rounding errors when values that can't be expressed exactly as
32-bit floats were passed in, which could happen in 16-bit yadif
swscale's call is opted in, under the assumption that it never uses values
large enough to run into this (i.e. within 2^24)
---
libavutil/x86/x86util.asm | 4 ++--
libswscale/x86/scale.asm | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/libavutil/x86/x86util.asm b/libavutil/x86/x86util.asm
index d7cd996842..c96afb6ef1 100644
--- a/libavutil/x86/x86util.asm
+++ b/libavutil/x86/x86util.asm
@@ -799,10 +799,10 @@
pminsw %1, %3
%endmacro
-%macro PMINSD 3 ; dst, src, tmp/unused
+%macro PMINSD 3-4 ; dst, src, tmp/unused, rounding-allowed
%if cpuflag(sse4)
pminsd %1, %2
-%elif cpuflag(sse2)
+%elif cpuflag(sse2) && (%0 > 3)
cvtdq2ps %1, %1
minps %1, %2
cvtps2dq %1, %1
diff --git a/libswscale/x86/scale.asm b/libswscale/x86/scale.asm
index 83cabff722..914fd1ada4 100644
--- a/libswscale/x86/scale.asm
+++ b/libswscale/x86/scale.asm
@@ -364,7 +364,7 @@ cglobal hscale%1to%2_%4, %5, 10, %6, pos0, dst, w, srcmem, filter, fltpos, fltsi
movd [dstq+wq*2], m0
%endif ; %3 ==/!= X
%else ; %2 == 19
- PMINSD m0, m2, m4
+ PMINSD m0, m2, m4, 1
%ifnidn %3, X
mova [dstq+wq*(4>>wshr)], m0
%else ; %3 == X
--
2.19.1
More information about the ffmpeg-devel
mailing list