- float r0 = row[0] >= 1e-6 ? row[0] : 1e-6;
- float v0 = config.fix_min_r / r0 - config.fix_light;
- row[0] = normalize_pixel(v0 - config.fix_light);
- float r1 = row[1] >= 1e-6 ? row[1] : 1e-6;
- float v1 = POWF((config.fix_min_g / r1), config.fix_gamma_g);
- row[1] = normalize_pixel(v1 - config.fix_light);
- float r2 = row[2] >= 1e-6 ? row[2] : 1e-6;
- float v2 = POWF((config.fix_min_b / r2), config.fix_gamma_b);
- row[2] = normalize_pixel(v2 - config.fix_light);
+ row[0] = row[0] < 1e-3 ? pix_max :
+ (v = config.fix_min_r / row[0],
+ bclip(v -= config.fix_light, 0, pix_max));
+ row[1] = row[1] < 1e-3 ? pix_max :
+ (v = POWF((config.fix_min_g / row[1]), config.fix_gamma_g),
+ bclip(v -= config.fix_light, 0, pix_max));
+ row[2] = row[2] < 1e-3 ? pix_max :
+ (v = POWF((config.fix_min_b / row[2]), config.fix_gamma_b),
+ bclip(v -= config.fix_light, 0, pix_max));