You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avfilter/vf_threshold: fix handling of zero threshold
This commit is contained in:
		| @@ -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; | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user