avfilter/vf_v360: simplify ball_to_xyz() calculations
authorPaul B Mahol <onemda@gmail.com>
Sat, 21 Sep 2019 14:21:36 +0000 (16:21 +0200)
committerPaul B Mahol <onemda@gmail.com>
Sat, 21 Sep 2019 14:31:32 +0000 (16:31 +0200)
libavfilter/vf_v360.c

index 1a0fe90..ea4c200 100644 (file)
@@ -1643,17 +1643,11 @@ static void ball_to_xyz(const V360Context *s,
     const float l = hypotf(x, y);
 
     if (l <= 1.f) {
-        const float phi   = atan2f(x, y);
-        const float theta = 2.f * asinf(l);
+        const float z = 2.f * l * sqrtf(1.f - l * l);
 
-        const float sin_phi   = sinf(phi);
-        const float cos_phi   = cosf(phi);
-        const float sin_theta = sinf(theta);
-        const float cos_theta = cosf(theta);
-
-        vec[0] =  sin_theta * sin_phi;
-        vec[1] = -sin_theta * cos_phi;
-        vec[2] = -cos_theta;
+        vec[0] =  z * x / (l > 0.f ? l : 1.f);
+        vec[1] = -z * y / (l > 0.f ? l : 1.f);
+        vec[2] = -1.f + 2.f * l * l;
     } else {
         vec[0] =  0.f;
         vec[1] = -1.f;