Commit eb1860e0 authored by Clément Bœsch's avatar Clément Bœsch

lavfi/selectivecolor: fix neutral color filtering

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: 's avatarRoyi Avital <royiavital@yahoo.com>
parent e0539f03
...@@ -344,7 +344,7 @@ static inline int selective_color_##nbits(AVFilterContext *ctx, ThreadData *td, ...@@ -344,7 +344,7 @@ static inline int selective_color_##nbits(AVFilterContext *ctx, ThreadData *td,
const int max_color = FFMAX3(r, g, b); \ 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_white = (r > 1<<(nbits-1) && g > 1<<(nbits-1) && b > 1<<(nbits-1)); \
const int is_neutral = (r || g || b) && \ 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 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 \ const uint32_t range_flag = (r == max_color) << RANGE_REDS \
| (r == min_color) << RANGE_CYANS \ | (r == min_color) << RANGE_CYANS \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment