lavfi/selectivecolor: fix neutral color filtering
authorClément Bœsch <u@pkh.me>
Thu, 9 Aug 2018 17:22:02 +0000 (19:22 +0200)
committerClément Bœsch <u@pkh.me>
Thu, 9 Aug 2018 17:56:26 +0000 (19:56 +0200)
Neutrals are supposed to be anything not black (0,0,0) and not white
(N,N,N).

Previous neutral filtering code was too strict by excluding colors with
any of its RGB component maxed instead of just the white color.

Reported-by: Royi Avital <royiavital@yahoo.com>
libavfilter/vf_selectivecolor.c

index c4d51bb..b99f31b 100644 (file)
@@ -344,7 +344,7 @@ static inline int selective_color_##nbits(AVFilterContext *ctx, ThreadData *td,
             const int max_color = FFMAX3(r, g, b);                                                      \
             const int is_white   = (r > 1<<(nbits-1) && g > 1<<(nbits-1) && b > 1<<(nbits-1));          \
             const int is_neutral = (r || g || b) &&                                                     \
-                                   r != (1<<nbits)-1 && g != (1<<nbits)-1 && b != (1<<nbits)-1;         \
+                                   (r != (1<<nbits)-1 || g != (1<<nbits)-1 || b != (1<<nbits)-1);       \
             const int is_black   = (r < 1<<(nbits-1) && g < 1<<(nbits-1) && b < 1<<(nbits-1));          \
             const uint32_t range_flag = (r == max_color) << RANGE_REDS                                  \
                                       | (r == min_color) << RANGE_CYANS                                 \