aboutsummaryrefslogtreecommitdiffstats
path: root/libavfilter
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2019-09-09 17:43:16 +0200
committerPaul B Mahol <onemda@gmail.com>2019-09-09 17:47:03 +0200
commit799c07e5c864878b1705b2b6bd06dddd23dfab2a (patch)
treec8aafdbba4852f3056d1fc0034821e28a600be92 /libavfilter
parent976617c7d21e4b525d6edde2fb280994fc5c567c (diff)
downloadffmpeg-799c07e5c864878b1705b2b6bd06dddd23dfab2a.tar.gz
avfilter/vf_v360: partialy revert previous commit
roll/pitch can do exactly same thing.
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/v360.h1
-rw-r--r--libavfilter/vf_v360.c25
2 files changed, 4 insertions, 22 deletions
diff --git a/libavfilter/v360.h b/libavfilter/v360.h
index b769218c04..93ac8034ef 100644
--- a/libavfilter/v360.h
+++ b/libavfilter/v360.h
@@ -105,7 +105,6 @@ typedef struct V360Context {
float h_fov, v_fov;
float flat_range[3];
- float p_lon, p_lat;
float input_mirror_modifier[2];
diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
index 0ea7a460ea..4d59316bf6 100644
--- a/libavfilter/vf_v360.c
+++ b/libavfilter/vf_v360.c
@@ -33,8 +33,6 @@
* 5) Remap input frame to output frame using precalculated data
*/
-#include <float.h>
-
#include "libavutil/avassert.h"
#include "libavutil/imgutils.h"
#include "libavutil/pixdesc.h"
@@ -107,8 +105,6 @@ static const AVOption v360_options[] = {
{ "iv_flip", "flip in video vertically", OFFSET(iv_flip), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS, "iv_flip"},
{ "in_trans", "transpose video input", OFFSET(in_transpose), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS, "in_transpose"},
{ "out_trans", "transpose video output", OFFSET(out_transpose), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS, "out_transpose"},
- { "p_lon", "central projection longitude", OFFSET(p_lon), AV_OPT_TYPE_FLOAT, {.dbl=0.f}, -180.f, 180.f, FLAGS, "p_lon"},
- { "p_lat", "central projection latitude", OFFSET(p_lat), AV_OPT_TYPE_FLOAT, {.dbl=90.f}, -90.f, 90.f, FLAGS, "p_lat"},
{ NULL }
};
@@ -1412,24 +1408,11 @@ static void stereographic_to_xyz(const V360Context *s,
{
const float x = ((2.f * i) / width - 1.f) * (s->h_fov / 180.f) * M_PI;
const float y = ((2.f * j) / height - 1.f) * (s->v_fov / 90.f) * M_PI_2;
- const float rho = hypotf(x, y) + FLT_EPSILON;
- const float c = 2.f * atan2f(rho, 0.15f / 2.f);
- const float cos_c = cosf(c);
- const float sin_c = sinf(c);
- const float cp_x = s->p_lon / 180.f * M_PI;
- const float cp_y = s->p_lat / 90.f * M_PI_2;
-
- const float phi = cp_x + atan2f(x * sin_c, rho * cosf(cp_y) * cos_c - y * sinf(cp_y) * sin_c);
- const float theta = asinf(cos_c * sinf(cp_y) + (y * sin_c * cosf(cp_y)) / rho);
-
- 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 xy = x * x + y * y;
- vec[0] = cos_theta * sin_phi;
- vec[1] = -sin_theta;
- vec[2] = -cos_theta * cos_phi;
+ vec[0] = 2.f * x / (1.f + xy);
+ vec[1] = (-1.f + xy) / (1.f + xy);
+ vec[2] = 2.f * y / (1.f + xy);
normalize_vector(vec);
}