diff mbox series

[FFmpeg-devel] vf_v360: fix (i)flat_range for fisheye projection

Message ID 20210319120826.945489-1-daniel.playfair.cal@gmail.com
State New
Headers show
Series [FFmpeg-devel] vf_v360: fix (i)flat_range for fisheye projection
Related show

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished
andriy/PPC64_make success Make finished
andriy/PPC64_make_fate success Make fate finished

Commit Message

Daniel Playfair Cal March 19, 2021, 12:08 p.m. UTC
This changes the iflat_range and flat_range values for the fisheye
projection so that they indicate the maximum angle between an observed
point and the center (direction the camera is facing). This matches the
meaning of those variables in the flat projection.

Signed-off-by: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
---

Sorry for the previous identical patch, this version really does remove
the use of double literals.

 libavfilter/vf_v360.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

Comments

Paul B Mahol March 21, 2021, 9:14 a.m. UTC | #1
Please make log message consistent with other commits to this file.

Also make set of patches to be applied all at once instead each single one.

On Fri, Mar 19, 2021 at 1:08 PM Daniel Playfair Cal <
daniel.playfair.cal@gmail.com> wrote:

> This changes the iflat_range and flat_range values for the fisheye
> projection so that they indicate the maximum angle between an observed
> point and the center (direction the camera is facing). This matches the
> meaning of those variables in the flat projection.
>
> Signed-off-by: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
> ---
>
> Sorry for the previous identical patch, this version really does remove
> the use of double literals.
>
>  libavfilter/vf_v360.c | 19 +++++++++----------
>  1 file changed, 9 insertions(+), 10 deletions(-)
>
> diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
> index 94473cd5b3..7535612d34 100644
> --- a/libavfilter/vf_v360.c
> +++ b/libavfilter/vf_v360.c
> @@ -2807,9 +2807,8 @@ static int prepare_fisheye_out(AVFilterContext *ctx)
>  {
>      V360Context *s = ctx->priv;
>
> -    s->flat_range[0] = s->h_fov / 180.f;
> -    s->flat_range[1] = s->v_fov / 180.f;
> -
> +    s->flat_range[0] = 0.5f * s->h_fov * M_PI / 180.f;
> +    s->flat_range[1] = 0.5f * s->v_fov * M_PI / 180.f;
>      return 0;
>  }
>
> @@ -2827,8 +2826,8 @@ static int fisheye_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 + 1.f) / height - 1.f);
> +    const float uf = 2.f * s->flat_range[0] / M_PI * ((2.f * i) / width
> - 1.f);
> +    const float vf = 2.f * s->flat_range[1] / M_PI * ((2.f * j + 1.f) /
> height - 1.f);
>
>      const float phi   = atan2f(vf, uf);
>      const float theta = M_PI_2 * (1.f - hypotf(uf, vf));
> @@ -2858,8 +2857,8 @@ static int prepare_fisheye_in(AVFilterContext *ctx)
>  {
>      V360Context *s = ctx->priv;
>
> -    s->iflat_range[0] = s->ih_fov / 180.f;
> -    s->iflat_range[1] = s->iv_fov / 180.f;
> +    s->iflat_range[0] = 0.5f * s->ih_fov * M_PI / 180.f;
> +    s->iflat_range[1] = 0.5f * s->iv_fov * M_PI / 180.f;
>
>      return 0;
>  }
> @@ -2882,10 +2881,10 @@ static int xyz_to_fisheye(const V360Context *s,
>  {
>      const float h   = hypotf(vec[0], vec[1]);
>      const float lh  = h > 0.f ? h : 1.f;
> -    const float phi = atan2f(h, vec[2]) / M_PI;
> +    const float phi = atan2f(h, vec[2]);
>
> -    float uf = vec[0] / lh * phi / s->iflat_range[0];
> -    float vf = vec[1] / lh * phi / s->iflat_range[1];
> +    float uf = 0.5f * vec[0] / lh * phi / s->iflat_range[0];
> +    float vf = 0.5f * vec[1] / lh * phi / s->iflat_range[1];
>
>      const int visible = hypotf(uf, vf) <= 0.5f;
>      int ui, vi;
> --
> 2.31.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Daniel Playfair Cal March 21, 2021, 12:47 p.m. UTC | #2
Sure, I've done so. I'm pretty new to sending patches by email so sorry if
it's a bit messy!

On Sun, Mar 21, 2021 at 8:14 PM Paul B Mahol <onemda@gmail.com> wrote:

> Please make log message consistent with other commits to this file.
>
> Also make set of patches to be applied all at once instead each single one.
>
> On Fri, Mar 19, 2021 at 1:08 PM Daniel Playfair Cal <
> daniel.playfair.cal@gmail.com> wrote:
>
>> This changes the iflat_range and flat_range values for the fisheye
>> projection so that they indicate the maximum angle between an observed
>> point and the center (direction the camera is facing). This matches the
>> meaning of those variables in the flat projection.
>>
>> Signed-off-by: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
>> ---
>>
>> Sorry for the previous identical patch, this version really does remove
>> the use of double literals.
>>
>>  libavfilter/vf_v360.c | 19 +++++++++----------
>>  1 file changed, 9 insertions(+), 10 deletions(-)
>>
>> diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
>> index 94473cd5b3..7535612d34 100644
>> --- a/libavfilter/vf_v360.c
>> +++ b/libavfilter/vf_v360.c
>> @@ -2807,9 +2807,8 @@ static int prepare_fisheye_out(AVFilterContext *ctx)
>>  {
>>      V360Context *s = ctx->priv;
>>
>> -    s->flat_range[0] = s->h_fov / 180.f;
>> -    s->flat_range[1] = s->v_fov / 180.f;
>> -
>> +    s->flat_range[0] = 0.5f * s->h_fov * M_PI / 180.f;
>> +    s->flat_range[1] = 0.5f * s->v_fov * M_PI / 180.f;
>>      return 0;
>>  }
>>
>> @@ -2827,8 +2826,8 @@ static int fisheye_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 + 1.f) / height - 1.f);
>> +    const float uf = 2.f * s->flat_range[0] / M_PI * ((2.f * i) / width
>> - 1.f);
>> +    const float vf = 2.f * s->flat_range[1] / M_PI * ((2.f * j + 1.f) /
>> height - 1.f);
>>
>>      const float phi   = atan2f(vf, uf);
>>      const float theta = M_PI_2 * (1.f - hypotf(uf, vf));
>> @@ -2858,8 +2857,8 @@ static int prepare_fisheye_in(AVFilterContext *ctx)
>>  {
>>      V360Context *s = ctx->priv;
>>
>> -    s->iflat_range[0] = s->ih_fov / 180.f;
>> -    s->iflat_range[1] = s->iv_fov / 180.f;
>> +    s->iflat_range[0] = 0.5f * s->ih_fov * M_PI / 180.f;
>> +    s->iflat_range[1] = 0.5f * s->iv_fov * M_PI / 180.f;
>>
>>      return 0;
>>  }
>> @@ -2882,10 +2881,10 @@ static int xyz_to_fisheye(const V360Context *s,
>>  {
>>      const float h   = hypotf(vec[0], vec[1]);
>>      const float lh  = h > 0.f ? h : 1.f;
>> -    const float phi = atan2f(h, vec[2]) / M_PI;
>> +    const float phi = atan2f(h, vec[2]);
>>
>> -    float uf = vec[0] / lh * phi / s->iflat_range[0];
>> -    float vf = vec[1] / lh * phi / s->iflat_range[1];
>> +    float uf = 0.5f * vec[0] / lh * phi / s->iflat_range[0];
>> +    float vf = 0.5f * vec[1] / lh * phi / s->iflat_range[1];
>>
>>      const int visible = hypotf(uf, vf) <= 0.5f;
>>      int ui, vi;
>> --
>> 2.31.0
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>
>
diff mbox series

Patch

diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
index 94473cd5b3..7535612d34 100644
--- a/libavfilter/vf_v360.c
+++ b/libavfilter/vf_v360.c
@@ -2807,9 +2807,8 @@  static int prepare_fisheye_out(AVFilterContext *ctx)
 {
     V360Context *s = ctx->priv;
 
-    s->flat_range[0] = s->h_fov / 180.f;
-    s->flat_range[1] = s->v_fov / 180.f;
-
+    s->flat_range[0] = 0.5f * s->h_fov * M_PI / 180.f;
+    s->flat_range[1] = 0.5f * s->v_fov * M_PI / 180.f;
     return 0;
 }
 
@@ -2827,8 +2826,8 @@  static int fisheye_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 + 1.f) / height - 1.f);
+    const float uf = 2.f * s->flat_range[0] / M_PI * ((2.f * i) / width  - 1.f);
+    const float vf = 2.f * s->flat_range[1] / M_PI * ((2.f * j + 1.f) / height - 1.f);
 
     const float phi   = atan2f(vf, uf);
     const float theta = M_PI_2 * (1.f - hypotf(uf, vf));
@@ -2858,8 +2857,8 @@  static int prepare_fisheye_in(AVFilterContext *ctx)
 {
     V360Context *s = ctx->priv;
 
-    s->iflat_range[0] = s->ih_fov / 180.f;
-    s->iflat_range[1] = s->iv_fov / 180.f;
+    s->iflat_range[0] = 0.5f * s->ih_fov * M_PI / 180.f;
+    s->iflat_range[1] = 0.5f * s->iv_fov * M_PI / 180.f;
 
     return 0;
 }
@@ -2882,10 +2881,10 @@  static int xyz_to_fisheye(const V360Context *s,
 {
     const float h   = hypotf(vec[0], vec[1]);
     const float lh  = h > 0.f ? h : 1.f;
-    const float phi = atan2f(h, vec[2]) / M_PI;
+    const float phi = atan2f(h, vec[2]);
 
-    float uf = vec[0] / lh * phi / s->iflat_range[0];
-    float vf = vec[1] / lh * phi / s->iflat_range[1];
+    float uf = 0.5f * vec[0] / lh * phi / s->iflat_range[0];
+    float vf = 0.5f * vec[1] / lh * phi / s->iflat_range[1];
 
     const int visible = hypotf(uf, vf) <= 0.5f;
     int ui, vi;