Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-08-20 16:15:12 +0400
committerMichael Niedermayer <michaelni@gmx.at>2014-08-21 13:54:30 +0400
commit32cb6c1fe28f3f96ccc8a1ff90b17f01419a004e (patch)
tree2631ef5c2d3ece792906c30e81956a887e45e769 /libavfilter/vf_lenscorrection.c
parent2450ca0f3344acc9c48c5990aee2e617313f030d (diff)
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: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/vf_lenscorrection.c')
-rw-r--r--libavfilter/vf_lenscorrection.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/libavfilter/vf_lenscorrection.c b/libavfilter/vf_lenscorrection.c
index 11fa4c80c2..d30a81b033 100644
--- a/libavfilter/vf_lenscorrection.c
+++ b/libavfilter/vf_lenscorrection.c
@@ -149,8 +149,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
int h = rect->height / vdiv;
int xcenter = rect->cx * w;
int ycenter = rect->cy * h;
- float k1 = rect->k1;
- float k2 = rect->k2;
+ int k1 = rect->k1 * (1<<24);
+ int k2 = rect->k2 * (1<<24);
ThreadData td = {
.in = in,
.out = out,
@@ -162,7 +162,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
if (!rect->correction[plane]) {
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));
if (!rect->correction[plane])
@@ -172,9 +172,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
const int off_y2 = off_y * off_y;
for (i = 0; i < w; i++) {
const int off_x = i - xcenter;
- const float r2 = (off_x * off_x + off_y2) * r2inv;
- const float radius_mult = 1.0f + r2 * k1 + r2 * r2 * k2;
- rect->correction[plane][j * w + i] = lrintf(radius_mult * (1<<24));
+ const int64_t r2 = ((off_x * off_x + off_y2) * r2inv + (1LL<<31)) >> 32;
+ const int64_t r4 = (r2 * r2 + (1<<27)) >> 28;
+ const int radius_mult = (r2 * k1 + r4 * k2 + (1LL<<27) + (1LL<<52))>>28;
+ rect->correction[plane][j * w + i] = radius_mult;
}
}
}