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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel