]> git.sesse.net Git - ffmpeg/commitdiff
avfilter/vf_v360: speed up fisheye input calculation
authorPaul B Mahol <onemda@gmail.com>
Sat, 29 Feb 2020 15:39:35 +0000 (16:39 +0100)
committerPaul B Mahol <onemda@gmail.com>
Sat, 29 Feb 2020 15:39:35 +0000 (16:39 +0100)
libavfilter/vf_v360.c

index 90e45b4fd024a88c5e2003d8c74f8708cd95dd8d..3c73ad32f7b5c57b059774532a79404802d01a43 100644 (file)
@@ -2484,11 +2484,12 @@ static int xyz_to_fisheye(const V360Context *s,
                           const float *vec, int width, int height,
                           int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 {
-    const float phi   = -atan2f(hypotf(vec[0], vec[1]), -vec[2]) / M_PI;
-    const float theta = -atan2f(vec[0], vec[1]);
+    const float h   = hypotf(vec[0], vec[1]);
+    const float lh  = h > 0.f ? h : 1.f;
+    const float phi = atan2f(h, -vec[2]) / M_PI;
 
-    float uf = sinf(theta) * phi * s->input_mirror_modifier[0] / s->iflat_range[0];
-    float vf = cosf(theta) * phi * s->input_mirror_modifier[1] / s->iflat_range[1];
+    float uf =  vec[0] / lh * phi * s->input_mirror_modifier[0] / s->iflat_range[0];
+    float vf = -vec[1] / lh * phi * s->input_mirror_modifier[1] / s->iflat_range[1];
 
     const int visible = hypotf(uf, vf) <= 0.5f;
     int ui, vi;