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

Daniel Playfair Cal daniel.playfair.cal at gmail.com
Sun Mar 21 14:47:09 EET 2021


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 at 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 at 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 at 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 at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
>


More information about the ffmpeg-devel mailing list