diff --git a/libavfilter/vf_threshold_init.h b/libavfilter/vf_threshold_init.h index 7d160ddbb9..64a0a861ba 100644 --- a/libavfilter/vf_threshold_init.h +++ b/libavfilter/vf_threshold_init.h @@ -38,7 +38,7 @@ static void threshold8(const uint8_t *in, const uint8_t *threshold, { for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) - out[x] = in[x] < threshold[x] ? min[x] : max[x]; + out[x] = in[x] <= threshold[x] ? min[x] : max[x]; in += ilinesize; threshold += tlinesize; @@ -64,7 +64,7 @@ static void threshold16(const uint8_t *iin, const uint8_t *tthreshold, for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) - out[x] = in[x] < threshold[x] ? min[x] : max[x]; + out[x] = in[x] <= threshold[x] ? min[x] : max[x]; in += ilinesize / 2; threshold += tlinesize / 2; diff --git a/libavfilter/x86/vf_threshold.asm b/libavfilter/x86/vf_threshold.asm index 098069b083..8977a586c0 100644 --- a/libavfilter/x86/vf_threshold.asm +++ b/libavfilter/x86/vf_threshold.asm @@ -22,15 +22,10 @@ %include "libavutil/x86/x86util.asm" -SECTION_RODATA - -pb_128: times 16 db 128 -pb_128_0 : times 8 db 0, 128 - SECTION .text -;%1 depth (8 or 16) ; %2 b or w ; %3 constant -%macro THRESHOLD 3 +;%1 depth (8 or 16) ; %2 b or w +%macro THRESHOLD 2 %if ARCH_X86_64 cglobal threshold%1, 10, 13, 5, in, threshold, min, max, out, ilinesize, tlinesize, flinesize, slinesize, olinesize, w, h, x mov wd, dword wm @@ -45,7 +40,6 @@ cglobal threshold%1, 5, 7, 5, in, threshold, min, max, out, w, x %define olinesizeq r9mp %define hd r11mp %endif - VBROADCASTI128 m4, [%3] %if %1 == 16 add wq, wq ; w *= 2 (16 bits instead of 8) %endif @@ -63,9 +57,8 @@ cglobal threshold%1, 5, 7, 5, in, threshold, min, max, out, w, x movu m0, [thresholdq + xq] movu m2, [minq + xq] movu m3, [maxq + xq] - pxor m0, m4 - pxor m1, m4 - pcmpgt%2 m0, m1 + pminu%2 m0, m1 + pcmpeq%2 m0, m1 PBLENDVB m3, m2, m0 movu [outq + xq], m3 add xq, mmsize @@ -82,11 +75,11 @@ RET %endmacro INIT_XMM sse4 -THRESHOLD 8, b, pb_128 -THRESHOLD 16, w, pb_128_0 +THRESHOLD 8, b +THRESHOLD 16, w %if HAVE_AVX2_EXTERNAL INIT_YMM avx2 -THRESHOLD 8, b, pb_128 -THRESHOLD 16, w, pb_128_0 +THRESHOLD 8, b +THRESHOLD 16, w %endif