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 | expand |
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 |
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".
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 --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;
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(-)