[FFmpeg-cvslog] avfilter/vf_v360: really fix FoV selection

Paul B Mahol git at videolan.org
Wed Sep 11 16:14:19 EEST 2019


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Wed Sep 11 15:00:12 2019 +0200| [cb41c2af92f26338bc4b732e4891d3bff0f0b169] | committer: Paul B Mahol

avfilter/vf_v360: really fix FoV selection

Big thanks to Michael Koch for providing actual formula.

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

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

diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
index 794f6212a3..3edea5510f 100644
--- a/libavfilter/vf_v360.c
+++ b/libavfilter/vf_v360.c
@@ -1410,8 +1410,11 @@ static void stereographic_to_xyz(const V360Context *s,
                                  int i, int j, int width, int height,
                                  float *vec)
 {
-    const float x = ((2.f * i) / width  - 1.f) * (s->h_fov / 180.f);
-    const float y = ((2.f * j) / height - 1.f) * (s->v_fov / 180.f);
+    const float h_angle = tan(FFMIN(s->h_fov, 359.f) * M_PI / 720.f);
+    const float v_angle = tan(FFMIN(s->v_fov, 359.f) * M_PI / 720.f);
+
+    const float x = ((2.f * i) / width  - 1.f) * h_angle;
+    const float y = ((2.f * j) / height - 1.f) * v_angle;
     const float xy = x * x + y * y;
 
     vec[0] = 2.f * x / (1.f + xy);



More information about the ffmpeg-cvslog mailing list