From patchwork Fri Mar 19 12:08:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Playfair Cal X-Patchwork-Id: 26488 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 51FCD44869A for ; Fri, 19 Mar 2021 14:08:46 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2F30D680700; Fri, 19 Mar 2021 14:08:46 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 822AE6804E0 for ; Fri, 19 Mar 2021 14:08:39 +0200 (EET) Received: by mail-pg1-f169.google.com with SMTP id m7so3535002pgj.8 for ; Fri, 19 Mar 2021 05:08:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=w4rYqPrArUdcl6eczKl9br1/++KL3fr6rBDBfSe9fEA=; b=HIYqdHdz7F78jT5vykDNqcmgFDsc/jiNScBb7JtZHaD0GXc3BLIiaEbupl5PEFWuCy 4NgS0vFk7B/0qsnZXxeSh/t+j4UlkBYNJ7TT/V0N/sLBJOtO2IP2iAAmtZdLSXLIKUD9 s34WecvBS/IYjuOHOtKSYcEc+ZzKNYYjtpTi42a+/3w0skVrH9eKiQgPckXqLd2e8BqT +a4giIUfMfYrQ+TPrLVwdpvbuLlvPU19dC5Kx8uXdychEjkgEu4sPbn901Y5JOHNoKcr eajanwF9tLvY41buaq0mo3Wwzu4QWbj+Cqc8CfxXAGITe8sydMr5TvYJTS48RSfPP/xq x28w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=w4rYqPrArUdcl6eczKl9br1/++KL3fr6rBDBfSe9fEA=; b=qWgl+YH1MaA9hjPwqBpo/0oz8JjUR25zkSXEBP1C4DgVNU+NlLvj4omkucep1xycR2 6pW6rVc9imkZ4S42KCONcj0uLjmMi+yE3KvNMCR1Fdp4SOyDXyudcRUELWaMRIdRghVA GpUQFHzvCPbc/fZ9fn2dkLhW/OinKfBr+W3Qk+tzkD8NonmdWYhDw738KKNxEucwhI+l 5S2fhA/N/es9bCNVFPuPGoZMvkJl6KuorOospY12V3LtFNRrVwdxTTQubGxqS9i0lCOU jHAvvQqEkqFyusGkJ/QssyFIWnBEsjH4BtwTaINYIwR9UccQTUfd4dHyRzP3UgSLSqaK 4EmA== X-Gm-Message-State: AOAM533gVATCQUk2GQdAorgpxIN8ShiDeWRMlmLeKDIr4BmITsnwJCKu i2FqMKSWMjh8+KccpSP+lUN01bXqueSbrQ== X-Google-Smtp-Source: ABdhPJxmclRmcvGZul6VvDPFDgtk6vzS9HI7/eaYYf6oor80EqbxabRhcAh1S/XNbYctNIdiW2n67g== X-Received: by 2002:a65:6a45:: with SMTP id o5mr11078249pgu.89.1616155717326; Fri, 19 Mar 2021 05:08:37 -0700 (PDT) Received: from localhost.localdomain (110-175-121-4.static.tpgi.com.au. [110.175.121.4]) by smtp.gmail.com with ESMTPSA id s19sm5255243pfh.168.2021.03.19.05.08.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 05:08:36 -0700 (PDT) From: Daniel Playfair Cal To: ffmpeg-devel@ffmpeg.org Date: Fri, 19 Mar 2021 23:08:26 +1100 Message-Id: <20210319120826.945489-1-daniel.playfair.cal@gmail.com> X-Mailer: git-send-email 2.31.0 In-Reply-To: <277996> References: <277996> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] vf_v360: fix (i)flat_range for fisheye projection X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Daniel Playfair Cal Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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 --- 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;