[FFmpeg-cvslog] avfilter/vf_v360: factor vector normalization out

Paul B Mahol git at videolan.org
Mon Sep 9 12:08:37 EEST 2019


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Mon Sep  9 10:55:36 2019 +0200| [7985430c70910fe4aa2a10a3a852fba2c6396d0c] | committer: Paul B Mahol

avfilter/vf_v360: factor vector normalization out

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7985430c70910fe4aa2a10a3a852fba2c6396d0c
---

 libavfilter/vf_v360.c | 57 ++++++++++++++++++++++++++++-----------------------
 1 file changed, 31 insertions(+), 26 deletions(-)

diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
index 13dffd9e15..bf94727400 100644
--- a/libavfilter/vf_v360.c
+++ b/libavfilter/vf_v360.c
@@ -690,6 +690,20 @@ static inline void rotate_cube_face_inverse(float *uf, float *vf, int rotation)
 }
 
 /**
+ * Normalize vector.
+ *
+ * @param vec vector
+ */
+static void normalize_vector(float *vec)
+{
+    const float norm = sqrtf(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]);
+
+    vec[0] /= norm;
+    vec[1] /= norm;
+    vec[2] /= norm;
+}
+
+/**
  * Calculate 3D coordinates on sphere for corresponding cubemap position.
  * Common operation for every cubemap.
  *
@@ -704,7 +718,6 @@ static void cube_to_xyz(const V360Context *s,
                         float *vec)
 {
     const int direction = s->out_cubemap_direction_order[face];
-    float norm;
     float l_x, l_y, l_z;
 
     uf /= (1.f - s->out_pad);
@@ -745,10 +758,11 @@ static void cube_to_xyz(const V360Context *s,
         break;
     }
 
-    norm = sqrtf(l_x * l_x + l_y * l_y + l_z * l_z);
-    vec[0] = l_x / norm;
-    vec[1] = l_y / norm;
-    vec[2] = l_z / norm;
+    vec[0] = l_x;
+    vec[1] = l_y;
+    vec[2] = l_z;
+
+    normalize_vector(vec);
 }
 
 /**
@@ -1396,16 +1410,12 @@ static void stereographic_to_xyz(const V360Context *s,
     const float x  = z * (2.f * i / width  - 1.f);
     const float y  = z * (2.f * j / height - 1.f);
     const float xy = x * x + y * y;
-    float norm;
 
     vec[0] = 2.f * x / (1.f + xy);
     vec[1] = (-1.f + xy) / (1.f + xy);
     vec[2] = 2.f * y / (1.f + xy);
 
-    norm = sqrtf(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]);
-    vec[0] /= norm;
-    vec[1] /= norm;
-    vec[2] /= norm;
+    normalize_vector(vec);
 }
 
 /**
@@ -1555,7 +1565,6 @@ static void eac_to_xyz(const V360Context *s,
     int u_face, v_face, face;
 
     float l_x, l_y, l_z;
-    float norm;
 
     float uf = (float)i / width;
     float vf = (float)j / height;
@@ -1629,10 +1638,11 @@ static void eac_to_xyz(const V360Context *s,
         av_assert0(0);
     }
 
-    norm = sqrtf(l_x * l_x + l_y * l_y + l_z * l_z);
-    vec[0] = l_x / norm;
-    vec[1] = l_y / norm;
-    vec[2] = l_z / norm;
+    vec[0] = l_x;
+    vec[1] = l_y;
+    vec[2] = l_z;
+
+    normalize_vector(vec);
 }
 
 /**
@@ -1735,11 +1745,11 @@ static void flat_to_xyz(const V360Context *s,
     const float l_y = -s->flat_range[1] * (2.f * j / height - 1.f);
     const float l_z =  s->flat_range[2];
 
-    const float norm = sqrtf(l_x * l_x + l_y * l_y + l_z * l_z);
+    vec[0] = l_x;
+    vec[1] = l_y;
+    vec[2] = l_z;
 
-    vec[0] = l_x / norm;
-    vec[1] = l_y / norm;
-    vec[2] = l_z / norm;
+    normalize_vector(vec);
 }
 
 /**
@@ -1833,7 +1843,6 @@ static void barrel_to_xyz(const V360Context *s,
         const int eh = height / 2;
 
         float uf, vf;
-        float norm;
 
         if (j < eh) {   // UP
             uf = 2.f * (i - 4 * ew) / ew  - 1.f;
@@ -1856,17 +1865,13 @@ static void barrel_to_xyz(const V360Context *s,
             l_y = -1.f;
             l_z =  vf;
         }
-
-        norm = sqrtf(l_x * l_x + l_y * l_y + l_z * l_z);
-
-        l_x /= norm;
-        l_y /= norm;
-        l_z /= norm;
     }
 
     vec[0] = l_x;
     vec[1] = l_y;
     vec[2] = l_z;
+
+    normalize_vector(vec);
 }
 
 /**



More information about the ffmpeg-cvslog mailing list