Commit 32cb6c1f authored by Michael Niedermayer's avatar Michael Niedermayer

avfilter/vf_lenscorrection: get rid of floats in init code

The only remaining floats are in the user interface, they are left as they
should not cause a problem in practice
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 2450ca0f
...@@ -149,8 +149,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -149,8 +149,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
int h = rect->height / vdiv; int h = rect->height / vdiv;
int xcenter = rect->cx * w; int xcenter = rect->cx * w;
int ycenter = rect->cy * h; int ycenter = rect->cy * h;
float k1 = rect->k1; int k1 = rect->k1 * (1<<24);
float k2 = rect->k2; int k2 = rect->k2 * (1<<24);
ThreadData td = { ThreadData td = {
.in = in, .in = in,
.out = out, .out = out,
...@@ -162,7 +162,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -162,7 +162,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
if (!rect->correction[plane]) { if (!rect->correction[plane]) {
int i,j; int i,j;
const float r2inv = 4.0 / (w * w + h * h); const int64_t r2inv = (4LL<<60) / (w * w + h * h);
rect->correction[plane] = av_malloc_array(w, h * sizeof(**rect->correction)); rect->correction[plane] = av_malloc_array(w, h * sizeof(**rect->correction));
if (!rect->correction[plane]) if (!rect->correction[plane])
...@@ -172,9 +172,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -172,9 +172,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
const int off_y2 = off_y * off_y; const int off_y2 = off_y * off_y;
for (i = 0; i < w; i++) { for (i = 0; i < w; i++) {
const int off_x = i - xcenter; const int off_x = i - xcenter;
const float r2 = (off_x * off_x + off_y2) * r2inv; const int64_t r2 = ((off_x * off_x + off_y2) * r2inv + (1LL<<31)) >> 32;
const float radius_mult = 1.0f + r2 * k1 + r2 * r2 * k2; const int64_t r4 = (r2 * r2 + (1<<27)) >> 28;
rect->correction[plane][j * w + i] = lrintf(radius_mult * (1<<24)); const int radius_mult = (r2 * k1 + r4 * k2 + (1LL<<27) + (1LL<<52))>>28;
rect->correction[plane][j * w + i] = radius_mult;
} }
} }
} }
......
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