summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2020-02-29 12:59:23 +0100
committerPaul B Mahol <onemda@gmail.com>2020-02-29 14:24:35 +0100
commitfc7d4d08fb9f8059aaba8d2b1e1a89400faa50a2 (patch)
tree9d84e696407bb90f66d04fda39b04c55d692fc6d /libavfilter
parentb6879b61dfe69e79c0fd32ce076fe1e7cbcc9c0c (diff)
avfilter/vf_v360: improve precision of some output formats
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/vf_v360.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
index 068ba6dfce..31d5e60553 100644
--- a/libavfilter/vf_v360.c
+++ b/libavfilter/vf_v360.c
@@ -1610,8 +1610,8 @@ static int 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->flat_range[0];
- const float y = ((2.f * j) / height - 1.f) * s->flat_range[1];
+ const float x = ((2.f * i + 1.f) / width - 1.f) * s->flat_range[0];
+ const float y = ((2.f * j + 1.f) / height - 1.f) * s->flat_range[1];
const float xy = x * x + y * y;
vec[0] = 2.f * x / (1.f + xy);
@@ -1837,8 +1837,8 @@ static int 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 + M_PI_2;
- const float y = ((2.f * j) / height - 1.f) * M_PI;
+ const float phi = ((2.f * i + 1.f) / width - 1.f) * M_PI + M_PI_2;
+ const float y = ((2.f * j + 1.f) / height - 1.f) * M_PI;
const float div = expf(2.f * y) + 1.f;
const float sin_phi = sinf(phi);
@@ -1907,8 +1907,8 @@ static int ball_to_xyz(const V360Context *s,
int i, int j, int width, int height,
float *vec)
{
- const float x = (2.f * i) / width - 1.f;
- const float y = (2.f * j) / height - 1.f;
+ const float x = (2.f * i + 1.f) / width - 1.f;
+ const float y = (2.f * j + 1.f) / height - 1.f;
const float l = hypotf(x, y);
if (l <= 1.f) {
@@ -1941,8 +1941,8 @@ static int hammer_to_xyz(const V360Context *s,
int i, int j, int width, int height,
float *vec)
{
- const float x = ((2.f * i) / width - 1.f);
- const float y = ((2.f * j) / height - 1.f);
+ const float x = ((2.f * i + 1.f) / width - 1.f);
+ const float y = ((2.f * j + 1.f) / height - 1.f);
const float xx = x * x;
const float yy = y * y;
@@ -2022,8 +2022,8 @@ static int sinusoidal_to_xyz(const V360Context *s,
int i, int j, int width, int height,
float *vec)
{
- const float theta = ((2.f * j) / height - 1.f) * M_PI_2;
- const float phi = ((2.f * i) / width - 1.f) * M_PI / cosf(theta);
+ const float theta = ((2.f * j + 1.f) / height - 1.f) * M_PI_2;
+ const float phi = ((2.f * i + 1.f) / width - 1.f) * M_PI / cosf(theta);
const float sin_phi = sinf(phi);
const float cos_phi = cosf(phi);
@@ -2360,8 +2360,8 @@ static int flat_to_xyz(const V360Context *s,
int i, int j, int width, int height,
float *vec)
{
- const float l_x = s->flat_range[0] * (2.f * i / width - 1.f);
- const float l_y = -s->flat_range[1] * (2.f * j / height - 1.f);
+ const float l_x = s->flat_range[0] * ((2.f * i + 0.5f) / width - 1.f);
+ const float l_y = -s->flat_range[1] * ((2.f * j + 0.5f) / height - 1.f);
vec[0] = l_x;
vec[1] = l_y;
@@ -2493,8 +2493,8 @@ static int pannini_to_xyz(const V360Context *s,
int i, int j, int width, int height,
float *vec)
{
- const float uf = ((2.f * i) / width - 1.f);
- const float vf = ((2.f * j) / height - 1.f);
+ const float uf = ((2.f * i + 1.f) / width - 1.f);
+ const float vf = ((2.f * j + 1.f) / height - 1.f);
const float d = s->h_fov;
const float k = uf * uf / ((d + 1.f) * (d + 1.f));
@@ -2544,8 +2544,8 @@ static int cylindrical_to_xyz(const V360Context *s,
int i, int j, int width, int height,
float *vec)
{
- const float uf = s->flat_range[0] * ((2.f * i) / width - 1.f);
- const float vf = s->flat_range[1] * ((2.f * j) / height - 1.f);
+ const float uf = s->flat_range[0] * ((2.f * i + 1.f) / width - 1.f);
+ const float vf = s->flat_range[1] * ((2.f * j + 1.f) / height - 1.f);
const float phi = uf;
const float theta = atanf(vf);
@@ -2638,8 +2638,8 @@ static int perspective_to_xyz(const V360Context *s,
int i, int j, int width, int height,
float *vec)
{
- const float uf = ((2.f * i) / width - 1.f);
- const float vf = ((2.f * j) / height - 1.f);
+ const float uf = ((2.f * i + 1.f) / width - 1.f);
+ const float vf = ((2.f * j + 1.f) / height - 1.f);
const float rh = hypotf(uf, vf);
const float sinzz = 1.f - rh * rh;
const float h = 1.f + s->v_fov;