avfilter/vf_v360: simplify xyz_to_dfisheye() calculations
authorPaul B Mahol <onemda@gmail.com>
Sat, 21 Sep 2019 19:33:03 +0000 (21:33 +0200)
committerPaul B Mahol <onemda@gmail.com>
Sat, 21 Sep 2019 19:33:03 +0000 (21:33 +0200)
libavfilter/vf_v360.c

index 741a626..fbaa1c4 100644 (file)
@@ -2083,11 +2083,12 @@ static void xyz_to_dfisheye(const V360Context *s,
     const float ew = width / 2.f;
     const float eh = height;
 
-    const float phi   = atan2f(-vec[1], -vec[0]) * s->input_mirror_modifier[0];
-    const float theta = acosf(fabsf(vec[2])) / M_PI * s->input_mirror_modifier[1];
+    const float h     = hypotf(vec[0], vec[1]);
+    const float lh    = h > 0.f ? h : 1.f;
+    const float theta = acosf(fabsf(vec[2])) / M_PI;
 
-    float uf = (theta * cosf(phi) * scale + 0.5f) * ew;
-    float vf = (theta * sinf(phi) * scale + 0.5f) * eh;
+    float uf = (theta * (-vec[0] / lh) * s->input_mirror_modifier[0] * scale + 0.5f) * ew;
+    float vf = (theta * (-vec[1] / lh) * s->input_mirror_modifier[1] * scale + 0.5f) * eh;
 
     int ui, vi;
     int u_shift;