On Mon, Nov 20, 2017 at 19:01:12 +1100, Richard Ling wrote: > Patch attached.
You code nicely sticks to floats throughout, but at points like these: > + min[c].smoothed = (min[c].smoothed * s->independence) > + + (rgb_min_smoothed * (1.0 - s->independence)); > + max[c].smoothed = (max[c].smoothed * s->independence) > + + (rgb_max_smoothed * (1.0 - s->independence)); and this: > + min[c].out = (s->blackpt[c] * s->strength) > + + (min[c].in * (1.0 - s->strength)); > + max[c].out = (s->whitept[c] * s->strength) > + + (max[c].in * (1.0 - s->strength)); and this: > + int out_val = (in_val - min[c].smoothed) * scale + > min[c].out + 0.5; your calculation gets promoted to double. You need to write e.g. "1.0f". (This only matters on shitty old ARMs and similar processors, which are really slow on doubles [soft emulation]. But just for sanity, please let the compiler stick to float or double.) > + { "smoothing", "amount of temporal smoothing of the input range, to > reduce flicker", OFFSET(smoothing), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, > FLAGS }, [...] > + s->history_len = (int)s->smoothing + 1; Certainly a corner case, but this can overflow. And why do you cast an int to an int? (Perhaps it was an unsigned int before?) Cheers, Moritz _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel