[FFmpeg-cvslog] avfilter/vf_v360: fix mercator_to_xyz()

Paul B Mahol git at videolan.org
Sun Sep 22 23:37:26 EEST 2019


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sun Sep 22 20:52:40 2019 +0200| [a8925d264a95c63c59faa94f697f51cb4dff09b4] | committer: Paul B Mahol

avfilter/vf_v360: fix mercator_to_xyz()

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

 libavfilter/vf_v360.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
index c34e3258f5..3b3ca16578 100644
--- a/libavfilter/vf_v360.c
+++ b/libavfilter/vf_v360.c
@@ -1589,17 +1589,18 @@ static void mercator_to_xyz(const V360Context *s,
                             int i, int j, int width, int height,
                             float *vec)
 {
-    const float phi   = ((2.f * i) / width  - 1.f) * M_PI;
-    const float theta = atanf(sinhf(((2.f * j) / height - 1.f) * 2.f * M_PI));
+    const float phi = ((2.f * i) / width - 1.f) * M_PI + M_PI_2;
+    const float y   = ((2.f * j) / height - 1.f) * M_PI;
+    const float div = expf(2.f * y) + 1.f;
 
     const float sin_phi   = sinf(phi);
     const float cos_phi   = cosf(phi);
-    const float sin_theta = sinf(theta);
-    const float cos_theta = cosf(theta);
+    const float sin_theta = -2.f * expf(y) / div;
+    const float cos_theta = -(expf(2.f * y) - 1.f) / div;
 
-    vec[0] =  cos_theta * sin_phi;
-    vec[1] = -sin_theta;
-    vec[2] = -cos_theta * cos_phi;
+    vec[0] = sin_theta * cos_phi;
+    vec[1] = cos_theta;
+    vec[2] = sin_theta * sin_phi;
 }
 
 /**



More information about the ffmpeg-cvslog mailing list