Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -328,6 +328,9 @@ static inline int selective_color_##nbits(AVFilterContext *ctx, ThreadData *td, · 327 unmodified lines | |||
| 328 | const uint8_t goffset = s->rgba_map[G]; \ | 328 | const uint8_t goffset = s->rgba_map[G]; \ |
| 329 | const uint8_t boffset = s->rgba_map[B]; \ | 329 | const uint8_t boffset = s->rgba_map[B]; \ |
| 330 | const uint8_t aoffset = s->rgba_map[A]; \ | 330 | const uint8_t aoffset = s->rgba_map[A]; \ |
| 331 | const int mid = 1<<(nbits-1); \ | ||
| 332 | const int max = (1<<nbits)-1; \ | ||
| 333 | const float scale = 1.f / max; \ | ||
| 331 | \ | 334 | \ |
| 332 | for (y = slice_start; y < slice_end; y++) { \ | 335 | for (y = slice_start; y < slice_end; y++) { \ |
| 333 | uint##nbits##_t *dst = ( uint##nbits##_t *)(out->data[0] + y * dst_linesize); \ | 336 | uint##nbits##_t *dst = ( uint##nbits##_t *)(out->data[0] + y * dst_linesize); \ |
| @@ -339,10 +342,10 @@ static inline int selective_color_##nbits(AVFilterContext *ctx, ThreadData *td, · 5 unmodified lines | |||
| 339 | const int b = src[x + boffset]; \ | 342 | const int b = src[x + boffset]; \ |
| 340 | const int min_color = FFMIN3(r, g, b); \ | 343 | const int min_color = FFMIN3(r, g, b); \ |
| 341 | const int max_color = FFMAX3(r, g, b); \ | 344 | const int max_color = FFMAX3(r, g, b); \ |
| 342 | const int is_white = (r > 1<<(nbits-1) && g > 1<<(nbits-1) && b > 1<<(nbits-1)); \ | 345 | const int is_white = (r > mid && g > mid && b > mid); \ |
| 343 | const int is_neutral = (r || g || b) && \ | 346 | const int is_neutral = (r || g || b) && \ |
| 344 | (r != (1<<nbits)-1 || g != (1<<nbits)-1 || b != (1<<nbits)-1); \ | 347 | (r != max || g != max || b != max); \ |
| 345 | const int is_black = (r < 1<<(nbits-1) && g < 1<<(nbits-1) && b < 1<<(nbits-1)); \ | 348 | const int is_black = (r < mid && g < mid && b < mid); \ |
| 346 | const uint32_t range_flag = (r == max_color) << RANGE_REDS \ | 349 | const uint32_t range_flag = (r == max_color) << RANGE_REDS \ |
| 347 | | (r == min_color) << RANGE_CYANS \ | 350 | | (r == min_color) << RANGE_CYANS \ |
| 348 | | (g == max_color) << RANGE_GREENS \ | 351 | | (g == max_color) << RANGE_GREENS \ |
| @@ -353,9 +356,9 @@ static inline int selective_color_##nbits(AVFilterContext *ctx, ThreadData *td, · 4 unmodified lines | |||
| 353 | | is_neutral << RANGE_NEUTRALS \ | 356 | | is_neutral << RANGE_NEUTRALS \ |
| 354 | | is_black << RANGE_BLACKS; \ | 357 | | is_black << RANGE_BLACKS; \ |
| 355 | \ | 358 | \ |
| 356 | const float rnorm = r * (1.f / ((1<<nbits)-1)); \ | 359 | const float rnorm = r * scale; \ |
| 357 | const float gnorm = g * (1.f / ((1<<nbits)-1)); \ | 360 | const float gnorm = g * scale; \ |
| 358 | const float bnorm = b * (1.f / ((1<<nbits)-1)); \ | 361 | const float bnorm = b * scale; \ |
| 359 | int adjust_r = 0, adjust_g = 0, adjust_b = 0; \ | 362 | int adjust_r = 0, adjust_g = 0, adjust_b = 0; \ |
| 360 | \ | 363 | \ |
| 361 | for (i = 0; i < s->nb_process_ranges; i++) { \ | 364 | for (i = 0; i < s->nb_process_ranges; i++) { \ |