diff options
author | Paul B Mahol <onemda@gmail.com> | 2019-09-09 10:55:36 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2019-09-09 11:07:39 +0200 |
commit | 7985430c70910fe4aa2a10a3a852fba2c6396d0c (patch) | |
tree | a8243f72c065beeffbdc123b308bccb2fe28afec /libavfilter/vf_v360.c | |
parent | a0abcb4a31c35e35f6e4afdc5b0fc2d902dc45f7 (diff) | |
download | ffmpeg-7985430c70910fe4aa2a10a3a852fba2c6396d0c.tar.gz |
avfilter/vf_v360: factor vector normalization out
Diffstat (limited to 'libavfilter/vf_v360.c')
-rw-r--r-- | libavfilter/vf_v360.c | 57 |
1 files 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); } /** |