diff options
author | Paul B Mahol <onemda@gmail.com> | 2020-04-29 19:16:12 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2020-04-29 19:18:25 +0200 |
commit | 2970846fc1fce2f0d41675c9145bf0fa6f64a8d7 (patch) | |
tree | 66e297eb62ced6e85bf711e942f5685885d9216b /libavfilter/vf_v360.c | |
parent | d8147c4e2d9111787319983d14889bc21705746f (diff) | |
download | ffmpeg-2970846fc1fce2f0d41675c9145bf0fa6f64a8d7.tar.gz |
avfilter/vf_v360: make FOV adjusted for dual fisheye too
Remove any usage of padding for this format.
Diffstat (limited to 'libavfilter/vf_v360.c')
-rw-r--r-- | libavfilter/vf_v360.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c index e5b75c7226..e9457d9400 100644 --- a/libavfilter/vf_v360.c +++ b/libavfilter/vf_v360.c @@ -2991,16 +2991,14 @@ static int dfisheye_to_xyz(const V360Context *s, int i, int j, int width, int height, float *vec) { - const float scale = 1.f + s->out_pad; - const float ew = width / 2.f; const float eh = height; const int ei = i >= ew ? i - ew : i; const float m = i >= ew ? 1.f : -1.f; - const float uf = ((2.f * ei) / ew - 1.f) * scale; - const float vf = ((2.f * j + 1.f) / eh - 1.f) * scale; + const float uf = s->flat_range[0] * ((2.f * ei) / ew - 1.f); + const float vf = s->flat_range[1] * ((2.f * j + 1.f) / eh - 1.f); const float h = hypotf(uf, vf); const float lh = h > 0.f ? h : 1.f; @@ -3034,8 +3032,6 @@ static int xyz_to_dfisheye(const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv) { - const float scale = 1.f - s->in_pad; - const float ew = width / 2.f; const float eh = height; @@ -3043,8 +3039,8 @@ static int xyz_to_dfisheye(const V360Context *s, const float lh = h > 0.f ? h : 1.f; const float theta = acosf(fabsf(vec[2])) / M_PI; - float uf = (theta * (vec[0] / lh) * s->input_mirror_modifier[0] * scale + 0.5f) * ew; - float vf = (theta * (vec[1] / lh) * s->input_mirror_modifier[1] * scale + 0.5f) * eh; + float uf = (theta * (vec[0] / lh) * s->input_mirror_modifier[0] / s->iflat_range[0] + 0.5f) * ew; + float vf = (theta * (vec[1] / lh) * s->input_mirror_modifier[1] / s->iflat_range[1] + 0.5f) * eh; int ui, vi; int u_shift; @@ -3657,6 +3653,14 @@ static void fov_from_dfov(int format, float d_fov, float w, float h, float *h_fo *v_fov = 2.f * atan2f(h * 0.5f, l) * 360.f / M_PI; } break; + case DUAL_FISHEYE: + { + const float d = 0.5f * hypotf(w * 0.5f, h); + + *h_fov = d / w * 2.f * d_fov; + *v_fov = d / h * d_fov; + } + break; case FISHEYE: { const float d = 0.5f * hypotf(w, h); @@ -3928,7 +3932,7 @@ static int config_output(AVFilterLink *outlink) return AVERROR(EINVAL); case DUAL_FISHEYE: s->in_transform = xyz_to_dfisheye; - err = 0; + err = prepare_fisheye_in(ctx); wf = w; hf = h; break; @@ -4058,7 +4062,7 @@ static int config_output(AVFilterLink *outlink) break; case DUAL_FISHEYE: s->out_transform = dfisheye_to_xyz; - prepare_out = NULL; + prepare_out = prepare_fisheye_out; w = lrintf(wf); h = lrintf(hf); break; |