From patchwork Mon Jun 17 13:41:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 49973 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1952829vqg; Mon, 17 Jun 2024 06:42:13 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUbtVRKyo5IHkfe0LoCYDjqB+VdTMrAc6dZjE0+2kTKcoZ4IlKa7HvYkTvP5OupJ8iVS4fRF4gGrK/J0IpcXrzDMNSkkC2I89VL0Q== X-Google-Smtp-Source: AGHT+IEwSm2P42guWg27bvj/l1bgltHO9McZ5d4No9HsAjSikdortXu6zLc4/2RwabFbWT0Sgv9x X-Received: by 2002:a17:906:a00c:b0:a6f:d5b:20c3 with SMTP id a640c23a62f3a-a6f60de6224mr637064266b.74.1718631733241; Mon, 17 Jun 2024 06:42:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718631733; cv=none; d=google.com; s=arc-20160816; b=y+39yrwcKjo2VKdVrv2IMtoJY4WbscWieKGivd7weNuMlBBzf2mBbu4AhTrBuwccUF f6IO6LKHWsyoXFv+BSfvnjjroXdHsfNFhzKk/yqumOxiu+Zl8wRMjRpix3waTX1+kAoY 2pW3goNhsldm87+A1wxsljEhGjcP29yNPEYC7OoNR60ig36WyEMaE5D6vyW6uJQidi3u +eL8XqwGJUtYkWLYSdo5kfH5lEUuT5+XrqBZLJ6cq8HwIeqkJT0mHmAsmgDq9SmxA4GX 1vkQJFZbCSZXqIxxiFNym18wyXARhf1LYoKT7DXBiYPrfDt97BzzzJDHZzy55jDwCM/p XfMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=hPRYEPrS4a13NRbEHkn4GdhRyyYgu+lX/0dgyqThCVs=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=UvSQ1cRYRcanBAku7qwZzZwg1db3UX82ECcG/yB98CGIv/z9rFm8lkOWVZH97aeGAe FRahtntpja3LGs5bEDyqJEDnMi98duKjWB/sWWmwtLX66oBVx4wSA50rgIi8i5WTlgjK jOGwZvhSvJvBYjJWONL9kh8z0zsz51SdFKFYwE9VMi3lJxiHfA6hROujilFZqzxExDrb l6Tep3NsuZAtQHOOM63g1BTYDCmFiwXVpErF2k0sYBpiwgtqsbrPFEqogbChVQ+XzTyW NhnP/rW+DezjSq7zBq2EvhYsKNfm2gL0k2Eyv+zSXpxujrrECB7L/u8osL0HhOpOjwBJ gR8g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=d2J9SwI3; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a6f56dd6d05si446885866b.279.2024.06.17.06.42.12; Mon, 17 Jun 2024 06:42:13 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=d2J9SwI3; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3000C68D334; Mon, 17 Jun 2024 16:42:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EB07868D735 for ; Mon, 17 Jun 2024 16:41:52 +0300 (EEST) Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-354b722fe81so3940431f8f.3 for ; Mon, 17 Jun 2024 06:41:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718631712; x=1719236512; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=vl70ixDhP5Atv6Vc1oK+x81USvOLkG5e46JvJaNBNCQ=; b=d2J9SwI3jiHkST6qtOUCVClNJjPfwlr8iohfGFc1+9HwgBB9keNQXat2eA5PLWeOej p498tavemb4VN4xHPVd0wWYfFyRf9Qmr0xTfyN7iAwf6NmR85A736q/grmLeS1Hkmi4E +ndc1PylzMe2ZxGFUzIEb16qZL7RYzkUcgl6stEHe83IC0rtMkV9YjBPojHqeDwTthZW psro1+u0bdeg9BVxi6alQxiU9fdr6sunSBxXLQZWX9hpd0mFbgyc2KjXR1q9er3ahl9T 7KIwoGZJGS1Lq0zX4pX0RKK57t3vOBT+L8NfktKCnKGP7M55awa2AddBVHaslWwcx+VN 0Kbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718631712; x=1719236512; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vl70ixDhP5Atv6Vc1oK+x81USvOLkG5e46JvJaNBNCQ=; b=LtV1HdwLuy32BIkvE0ImlaGHujlThvPvdsWeqqnPeCIXcpTmbntiIvhJv5Ks9+6bZz 1gu8EsoA02bBUh9N7bsE+u0uOVKBUONQVIJSijiqZL5A06C3s4Uol1aWlwuMsEb7WcRa WfgJFWZSe7uNfhoPGdeRUKTMUtN+h5s63ih5uVL+fB3Z8MImNf51Y2ezRqBJDMlJVfBN qqkM9tzcrxO0QcKfCl8z3YtGXPlKL2Is5L4o3G4Yi/OocLaKXWmolRdRTyl+BXrV8VeG HBF8IbQwN1UZ5oz6pohzwtg5cEGtkHd2Vrwmz9OOKHDK7kruR/pa28ehstpK5/gUXQBY rmaQ== X-Gm-Message-State: AOJu0YzJkiKvYL6LXzPbOfAebY2v25Epqnil8XaQkLvTe3GDUCF2Crk6 b37imD2zN3XJQEeDLVHVq8E7AGz3Kgkt2rrh0Ub484r18466Qo5twD4Ksw== X-Received: by 2002:adf:f906:0:b0:35f:30ae:a6e4 with SMTP id ffacd0b85a97d-3607a782371mr6813823f8f.46.1718631711725; Mon, 17 Jun 2024 06:41:51 -0700 (PDT) Received: from localhost.localdomain (0540dce9.skybroadband.com. [5.64.220.233]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3607509c790sm11915391f8f.38.2024.06.17.06.41.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 06:41:51 -0700 (PDT) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jun 2024 14:41:37 +0100 Message-ID: <20240617134141.224614-2-derek.buitenhuis@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240617134141.224614-1-derek.buitenhuis@gmail.com> References: <20240617134141.224614-1-derek.buitenhuis@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/5] avutil/spherical: Add more spherical types X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: hVMsB2YDj6vb These originate from the Apple Vision Pro, and are documented here: https://developer.apple.com/documentation/coremedia/cmprojectiontype Signed-off-by: Derek Buitenhuis --- libavutil/spherical.c | 5 +++++ libavutil/spherical.h | 16 ++++++++++++++++ libavutil/version.h | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/libavutil/spherical.c b/libavutil/spherical.c index 800d3459a5..64ade1d0ec 100644 --- a/libavutil/spherical.c +++ b/libavutil/spherical.c @@ -29,6 +29,8 @@ AVSphericalMapping *av_spherical_alloc(size_t *size) if (!spherical) return NULL; + spherical->projection = AV_SPHERICAL_RECTILINEAR; + if (size) *size = sizeof(*spherical); @@ -57,6 +59,9 @@ static const char *const spherical_projection_names[] = { [AV_SPHERICAL_EQUIRECTANGULAR] = "equirectangular", [AV_SPHERICAL_CUBEMAP] = "cubemap", [AV_SPHERICAL_EQUIRECTANGULAR_TILE] = "tiled equirectangular", + [AV_SPHERICAL_HALF_EQUIRECTANGULAR] = "half equirectangular", + [AV_SPHERICAL_RECTILINEAR] = "rectilinear", + [AV_SPHERICAL_FISHEYE] = "fisheye", }; const char *av_spherical_projection_name(enum AVSphericalProjection projection) diff --git a/libavutil/spherical.h b/libavutil/spherical.h index 828ac836da..2e90f7752d 100644 --- a/libavutil/spherical.h +++ b/libavutil/spherical.h @@ -66,6 +66,22 @@ enum AVSphericalProjection { * the position of the current video in a larger surface. */ AV_SPHERICAL_EQUIRECTANGULAR_TILE, + + /** + * Video frame displays as a 180 degree equirectangular projection. + */ + AV_SPHERICAL_HALF_EQUIRECTANGULAR, + + /** + * Video frame displays on a flat, rectangular 2D surface. + */ + AV_SPHERICAL_RECTILINEAR, + + /** + * Fisheye projection (Apple). + * See: https://developer.apple.com/documentation/coremedia/cmprojectiontype/fisheye + */ + AV_SPHERICAL_FISHEYE, }; /** diff --git a/libavutil/version.h b/libavutil/version.h index 2756f2aa03..7df546ee22 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 59 -#define LIBAVUTIL_VERSION_MINOR 22 +#define LIBAVUTIL_VERSION_MINOR 23 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Mon Jun 17 13:41:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 49978 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1956664vqg; Mon, 17 Jun 2024 06:49:17 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWvuYxOcnlbaKxa0o0BpC+d/+UZMlnbuEeBbPbXOXM4XaNJ1df1xWv66gxyzkqvsMkO2onPV/+D6lK8tcWV7U7N1z2ayYcRP+9sPg== X-Google-Smtp-Source: AGHT+IG1Di2Bu7LdlS0KD4TOYKN0Z2A/sc7yGEDSjSZqKaltK6xwxOHRUsBgm74AbJqq19bdE/e/ X-Received: by 2002:a2e:7d03:0:b0:2eb:e56c:c90a with SMTP id 38308e7fff4ca-2ec0e5c8c3dmr74563001fa.43.1718632157279; Mon, 17 Jun 2024 06:49:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718632157; cv=none; d=google.com; s=arc-20160816; b=dBa4r8u4p/y5Eis17A2Ig2qkLyeDhpsm0ZSUXo4ujMvVE2RIwL454UBwcK8yTt9qBR Yd4L0kjwfwGY5CAvhKZgb+zIGr9pXmIxFUsxz7tFTDYa9fIlVjR8JWAgHnwvlDmsuVTy quMze9DANMUQq9Gy0Zm1nTTGdqS9V8zj+wMbv4A5Lf+uykPy7UFCikq1AGAn2oAl0l2A uxNirNIhPs4yZ5aNe3BFg8R7cilaSJdroCqTMq4FbY1qx+BSzGOpQoRnv8/nDA5Rd6HQ YNjLOS8OWvc7kqexVZdVReWIr3VFHGf7VqxnkHXHB2ENhyNXg9P/YgjakCtXKdF4nM0k qOYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=+PUWM9JCo/rzNPmLbrpvonERa7U2uJDol/ICHlcbagg=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=qgjDRXwrIigQojCAfRKGPfYtD+48ZMowONR9gIjo84bNCcY41Ffh4xDLa0uHomk11J eZ8WtG0Q07pc/fpNMOX+Tc7VBaxQDy3Tm2d/fwvlrpKOSSplTLrAlW5jufsfuUGS9oOb wuAHtUwHiJaDgAzFMqKnYhwM6OqEjLnpBlY4/PiKL03qq/aUQj0lSUQBXhAyKpEHhHlI LBFtIriMd0JNbm1nEfGRLlj4KJ5ZuaSK5AK4NKfYL3SkbsixVp9qt41B/LdPP1Nh4Goa F9VpuSpROIey2wBe4JAYy8uQfYPYOklVOIeU5UVt5X8eOXNAcbKJx+rvnENOY8288IBF EbUA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=B+Pxmntu; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2ec05c4b632si26964671fa.271.2024.06.17.06.49.16; Mon, 17 Jun 2024 06:49:17 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=B+Pxmntu; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6643568D773; Mon, 17 Jun 2024 16:42:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2221E68D76E for ; Mon, 17 Jun 2024 16:41:55 +0300 (EEST) Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-35f22d3abf1so3966731f8f.1 for ; Mon, 17 Jun 2024 06:41:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718631713; x=1719236513; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=StlB+Iz6JMTNG2bkf8DuW/n8Kd/er+F4rVPZJo2z7ts=; b=B+PxmntuBI0Cb3LSfPklYhV/7nMpb+sigjjbcx2gjz0WVYM1acZrAN8CZFk2ngB5lS p7MBahf5Lk8LzIljzc97SA/2nyUzsOsWqOr5qvb3H+CPYTD5kfIAgou1C0U1QYPrk1En Z/Wcuss6yZZMiE+wGDxnpZrgr2Wz7UrebdpiCFTRL1CmfAyQtYLbmgXYqfEG+Io9r1TK 3Ue5peaK+fz8ZN2D4UiU3dV2qMF6iifezQFg3LDTqvj7hbggv+WH/CR6pqp3RPwlS/bW hoT7eV1LXqnIyhbJOXeFfd9JHYsGxSYV3nyzgVzkrrp1fPstv1k9d+Owmhy93jHTnu4f KiJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718631713; x=1719236513; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=StlB+Iz6JMTNG2bkf8DuW/n8Kd/er+F4rVPZJo2z7ts=; b=XNramiWjHO26RIEXLEkXSGoobuMkBGHcAtJQYCWO+80+M6BuHncL9Y0cBssDnsmtmY qluJ2HdgI87CNu7cu2jwc+FNYNtfKs4CWLf4U5nOpJ18gzrAf9be+h8IQLRlgp/AyV1O glqlR+1VCAmb6fUUmZTcv3QiJEBctEVnQ+p1WgvY9lSXBdtK6ZL7Cw7bUW10L/7WbOIo sL1h+4GOSq4SJarWIDUk+X4ILsIwBjMSkufwrkAiK2eDtKS8PKgy6JOD8h0F+LCdLljA M26jBddW06cGDovkxlKEIzjdfbc5CtspUeJA8WWEIT1CjIojRfd2bIDjmvBBRMG/rYTW loNw== X-Gm-Message-State: AOJu0Ywn8imP7FmoIKZaSMmLz9Oj6bvhzRomdXur9goLl3Vg3pa8EENM KOZG3yddkdXksCT6/koS517vXftio3pAnqIqFgBBa51py5HfHVFiZk05Zw== X-Received: by 2002:adf:f30c:0:b0:360:88ca:b18f with SMTP id ffacd0b85a97d-36088cab253mr5285599f8f.0.1718631713143; Mon, 17 Jun 2024 06:41:53 -0700 (PDT) Received: from localhost.localdomain (0540dce9.skybroadband.com. [5.64.220.233]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3607509c790sm11915391f8f.38.2024.06.17.06.41.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 06:41:52 -0700 (PDT) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jun 2024 14:41:38 +0100 Message-ID: <20240617134141.224614-3-derek.buitenhuis@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240617134141.224614-1-derek.buitenhuis@gmail.com> References: <20240617134141.224614-1-derek.buitenhuis@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/5] avutil/stereo3d: Fill out stereo info provided by Vision Pro files X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: zeHlzzKI/0/h Based on what is in the files themselves, and what the API provides to users. URLs: * https://developer.apple.com/documentation/videotoolbox/kvtcompressionpropertykey_heroeye * https://developer.apple.com/documentation/videotoolbox/kvtcompressionpropertykey_stereocamerabaseline * https://developer.apple.com/documentation/videotoolbox/kvtcompressionpropertykey_horizontaldisparityadjustment * https://developer.apple.com/documentation/coremedia/kcmformatdescriptionextension_horizontalfieldofview Signed-off-by: Derek Buitenhuis --- libavutil/stereo3d.c | 52 +++++++++++++++++++++++++++++ libavutil/stereo3d.h | 78 ++++++++++++++++++++++++++++++++++++++++++++ libavutil/version.h | 2 +- 3 files changed, 131 insertions(+), 1 deletion(-) diff --git a/libavutil/stereo3d.c b/libavutil/stereo3d.c index 9c29ab01b5..a40a9439bb 100644 --- a/libavutil/stereo3d.c +++ b/libavutil/stereo3d.c @@ -55,6 +55,18 @@ static const char * const stereo3d_type_names[] = { [AV_STEREO3D_COLUMNS] = "interleaved columns", }; +static const char * const stereo3d_view_names[] = { + [AV_STEREO3D_VIEW_PACKED] = "packed", + [AV_STEREO3D_VIEW_LEFT] = "left", + [AV_STEREO3D_VIEW_RIGHT] = "right", +}; + +static const char * const stereo3d_primary_eye_names[] = { + [AV_PRIMARY_EYE_NONE] = "none", + [AV_PRIMARY_EYE_LEFT] = "left", + [AV_PRIMARY_EYE_RIGHT] = "right", +}; + const char *av_stereo3d_type_name(unsigned int type) { if (type >= FF_ARRAY_ELEMS(stereo3d_type_names)) @@ -74,3 +86,43 @@ int av_stereo3d_from_name(const char *name) return -1; } + +const char *av_stereo3d_view_name(unsigned int view) +{ + if (view >= FF_ARRAY_ELEMS(stereo3d_view_names)) + return "unknown"; + + return stereo3d_view_names[view]; +} + +int av_stereo3d_view_from_name(const char *name) +{ + int i; + + for (i = 0; i < FF_ARRAY_ELEMS(stereo3d_view_names); i++) { + if (av_strstart(name, stereo3d_view_names[i], NULL)) + return i; + } + + return -1; +} + +const char *av_stereo3d_primary_eye_name(unsigned int eye) +{ + if (eye >= FF_ARRAY_ELEMS(stereo3d_primary_eye_names)) + return "unknown"; + + return stereo3d_primary_eye_names[eye]; +} + +int av_stereo3d_primary_eye_from_name(const char *name) +{ + int i; + + for (i = 0; i < FF_ARRAY_ELEMS(stereo3d_primary_eye_names); i++) { + if (av_strstart(name, stereo3d_primary_eye_names[i], NULL)) + return i; + } + + return -1; +} diff --git a/libavutil/stereo3d.h b/libavutil/stereo3d.h index 3aab959b79..d35e46e670 100644 --- a/libavutil/stereo3d.h +++ b/libavutil/stereo3d.h @@ -158,6 +158,26 @@ enum AVStereo3DView { AV_STEREO3D_VIEW_RIGHT, }; +/** + * List of possible primary eyes. + */ +enum AVStereo3DPrimaryEye { + /** + * Neither eye. + */ + AV_PRIMARY_EYE_NONE, + + /** + * Left eye. + */ + AV_PRIMARY_EYE_LEFT, + + /** + * Right eye + */ + AV_PRIMARY_EYE_RIGHT, +}; + /** * Inverted views, Right/Bottom represents the left view. */ @@ -185,6 +205,28 @@ typedef struct AVStereo3D { * Determines which views are packed. */ enum AVStereo3DView view; + + /** + * Which eye is the primary eye when rendering in 2D. + */ + enum AVStereo3DPrimaryEye primary_eye; + + /** + * The distance between the centres of the lenses of the camera system, + * in micrometers. Zero if unset. + */ + uint32_t baseline; + + /** + * Relative shift of the left and right images, which changes the zero parallax plane. + * Range -10000 to 10000, mapped to -1.0 to 1.0. Zero if unset. + */ + int32_t horizontal_disparity_adjustment; + + /** + * Horizontal field of view in thousanths of a degree. Zero if unset. + */ + uint32_t horizontal_field_of_view; } AVStereo3D; /** @@ -222,6 +264,42 @@ const char *av_stereo3d_type_name(unsigned int type); */ int av_stereo3d_from_name(const char *name); +/** + * Provide a human-readable name of a given stereo3d view. + * + * @param type The input stereo3d view value. + * + * @return The name of the stereo3d view value, or "unknown". + */ +const char *av_stereo3d_view_name(unsigned int view); + +/** + * Get the AVStereo3DView form a human-readable name. + * + * @param name The input string. + * + * @return The AVStereo3DView value, or -1 if not found. + */ +int av_stereo3d_view_from_name(const char *name); + +/** + * Provide a human-readable name of a given stereo3d primary eye. + * + * @param type The input stereo3d primary eye value. + * + * @return The name of the stereo3d primary eye value, or "unknown". + */ +const char *av_stereo3d_primary_eye_name(unsigned int eye); + +/** + * Get the AVStereo3DPrimaryEye form a human-readable name. + * + * @param name The input string. + * + * @return The AVStereo3DPrimaryEye value, or -1 if not found. + */ +int av_stereo3d_primary_eye_from_name(const char *name); + /** * @} */ diff --git a/libavutil/version.h b/libavutil/version.h index 7df546ee22..8044fd3935 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 59 -#define LIBAVUTIL_VERSION_MINOR 23 +#define LIBAVUTIL_VERSION_MINOR 24 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Mon Jun 17 13:41:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 49974 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1952983vqg; Mon, 17 Jun 2024 06:42:31 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW6N+6wWqUv04xKbe0NsNQLerzPw7cPI5dGYhcKOf1rLdu7pVQuvDxQ8Uj4osDZICeUD9yHa4MWNKaN+ef8J+MUS/bp0JlZNsM6xg== X-Google-Smtp-Source: AGHT+IGiTmutaGVF2npU3PBvKQ6295sYlYcz7a/KqB6jFFpkn6gNtf+Wm4eV8ue96iX2yDxrT3g5 X-Received: by 2002:a50:9354:0:b0:57c:6f0a:bc57 with SMTP id 4fb4d7f45d1cf-57cbd7c4ef0mr6741776a12.36.1718631751567; Mon, 17 Jun 2024 06:42:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718631751; cv=none; d=google.com; s=arc-20160816; b=Ucbjf0IvGl08MyBJSOxZj6Wx61+7o859IB49df8qs10eMy/Q4fF/aOh7acCrSfxJDZ GWB4habwK3bI2GU/hTbsUWOsOyOmhhs2h+tDC1FgZ5/RazMq7zPfqRC7J3QEruzzFsZT fiKgNRmUB1tbI543WZKbad45b6kQgE+WHa3SYGpzmw9GkttN/RPbx755Ul8aMomAWbzW 2fhje9S5Xqd5m/YxSK9VO9RRPTRsLEt8GsZQhdd/w5Ddrz+LRsOPiBK0AT+D8ZbD1bSL zJFM+2FKiWytRCDe153ODyrhjMnyOsCKguz6EbutOIaz48a0Tmdv8mwsFcU1cTHxbH85 PHBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=cma9KPLASzpbJwOD8ZoOIQ87X3BoUjAlFlAYbT9Nkp4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=TpX3v+zxYaENxPRi9hPDpu/P0ZExkzi3CxzPFCSc9ARCC4lrlr2ZUAnsX9SIRCFE90 1mDo4+X3eNK1E4HjFbNag599SB8eG8xZ1+rPCydiDM3Jp8rVkisQIKzIoK6fBU2a9fAq hIKXB1cQxTHr472+g0bP05MMA3rFA/OxESPvMgfuxHugduzVn+BrxHIH6cNoni47X0Jf tpNZFyyATBtqR0lYaOUD5eAl6ZM3OnMFgsFezef4CUnkdClTGxA8yjL24dLO9q/4XaLk z5wxljwwFrWuBz/FM4ZbLoxm/dRKluvtqwYPZQpP+rLLi5NX8JRwzVUqX8m5dWq0gRlf ElqQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=iXmuAg1I; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-57cb72d69b1si4679164a12.110.2024.06.17.06.42.30; Mon, 17 Jun 2024 06:42:31 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=iXmuAg1I; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 81BBD68D781; Mon, 17 Jun 2024 16:42:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 756C868D771 for ; Mon, 17 Jun 2024 16:41:55 +0300 (EEST) Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-35f2d723ef0so3692417f8f.1 for ; Mon, 17 Jun 2024 06:41:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718631714; x=1719236514; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=NS9vrMwN9pvW3LCmi7okYMKbXrzDDau5E4L98MhHDv0=; b=iXmuAg1IugClg4Jypu1yO9oVZvQBRtKBc6WkXdEOvky9hoiu5ZeYAtd1UEtHmVXxkL 8nFuWE4fO2FGqdrl0DWbhFKwdKJ3dalFz6ce74qV/TleW7OCtd/wcGZpevF6GzZu1AXL cybhOXXIQnSsYTvwAZNmG0Ych2JZ2OBiQ9DkYbPhe20QkSBhMV155LIeftHjBdPwIBtO ptAggTMszRJT3UjtBop+e4RSnzOH8MgouQW9nhh0GX++Gk93YrPHzFZfHW7N3ztS1MH0 C2N/GDMqVlaatxGufS3zx1SrtMFCaiScfTRukRvRHSA5171WUFN6uEZvefVvzU8oSr23 YQqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718631714; x=1719236514; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NS9vrMwN9pvW3LCmi7okYMKbXrzDDau5E4L98MhHDv0=; b=DEBLGqGlq/rJ/W04I61DZIMFT5BJzVaFG2U1yY1xXV7PbqFJ7zeeWV/8aC4JqI2Xzr aOZ7dnZFv9nD8/bqWyJsjap2Fj2/RgwCdozm5xw3sSycNsC1lMBQq33KTXdzxFm/c3gR Y68MzxdvPzJLbix9I8kVlBgDMSwDOCdWu+h77vzrWowJJyBY3H/4fXxqWBTEGP8eMLWB lIS5q4J4aN1Axmy8CsaznVmYZpDYeN2Kf6B5Xod1W9i+/M6MVRMcu59LTDUcpEHkOUFx NyFw4WJ9P8ayDcmV4uCqKg0MP7MYLLgtnMslFi4ZUPgRzh40CreE2N1EV9BRt66j1vG3 FCng== X-Gm-Message-State: AOJu0YzAoxQz/yv+BS+fzA5pV9HqIzHBBHjKBiL9n31Oj+VYwji0R8LA udGrAMR7urKtV3FtNo6nHfzHTZNGaWCCoz0apyH5fQLdcFpSGbKxCimQkg== X-Received: by 2002:a5d:6e03:0:b0:35f:1ed3:fe8c with SMTP id ffacd0b85a97d-3607a77fcbfmr7601463f8f.53.1718631714147; Mon, 17 Jun 2024 06:41:54 -0700 (PDT) Received: from localhost.localdomain (0540dce9.skybroadband.com. [5.64.220.233]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3607509c790sm11915391f8f.38.2024.06.17.06.41.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 06:41:53 -0700 (PDT) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jun 2024 14:41:39 +0100 Message-ID: <20240617134141.224614-4-derek.buitenhuis@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240617134141.224614-1-derek.buitenhuis@gmail.com> References: <20240617134141.224614-1-derek.buitenhuis@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/5] fftools/ffprobe: Print more Stereo 3D info from side data X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: wEW8aK7x/bNe Signed-off-by: Derek Buitenhuis --- fftools/ffprobe.c | 8 ++++++++ tests/ref/fate/matroska-spherical-mono | 2 ++ tests/ref/fate/matroska-spherical-mono-remux | 4 ++++ tests/ref/fate/matroska-stereo_mode | 8 ++++++++ tests/ref/fate/matroska-vp8-alpha-remux | 2 ++ tests/ref/fate/mov-spherical-mono | 2 ++ 6 files changed, 26 insertions(+) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index 2d38e5dfdc..082cec8a64 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -2544,6 +2544,14 @@ static void print_pkt_side_data(WriterContext *w, const AVStereo3D *stereo = (AVStereo3D *)sd->data; print_str("type", av_stereo3d_type_name(stereo->type)); print_int("inverted", !!(stereo->flags & AV_STEREO3D_FLAG_INVERT)); + print_str("view", av_stereo3d_view_name(stereo->view)); + print_str("primary_eye", av_stereo3d_primary_eye_name(stereo->primary_eye)); + if (stereo->baseline) + print_int("baseline", stereo->baseline); + if (stereo->horizontal_disparity_adjustment) + print_int("horizontal_disparity_adjustment", stereo->horizontal_disparity_adjustment); + if (stereo->horizontal_field_of_view) + print_int("horizontal_field_of_view", stereo->horizontal_field_of_view); } else if (sd->type == AV_PKT_DATA_SPHERICAL) { const AVSphericalMapping *spherical = (AVSphericalMapping *)sd->data; print_str("projection", av_spherical_projection_name(spherical->projection)); diff --git a/tests/ref/fate/matroska-spherical-mono b/tests/ref/fate/matroska-spherical-mono index bd57d94514..08b94e455b 100644 --- a/tests/ref/fate/matroska-spherical-mono +++ b/tests/ref/fate/matroska-spherical-mono @@ -3,6 +3,8 @@ side_data_type=Stereo 3D type=2D inverted=0 +view=packed +primary_eye=none [/SIDE_DATA] [SIDE_DATA] side_data_type=Spherical Mapping diff --git a/tests/ref/fate/matroska-spherical-mono-remux b/tests/ref/fate/matroska-spherical-mono-remux index 6fcda14822..0ca77c8074 100644 --- a/tests/ref/fate/matroska-spherical-mono-remux +++ b/tests/ref/fate/matroska-spherical-mono-remux @@ -27,6 +27,8 @@ DISPOSITION:forced=1 side_data_type=Stereo 3D type=2D inverted=0 +view=packed +primary_eye=none [/SIDE_DATA] [SIDE_DATA] side_data_type=Spherical Mapping @@ -51,6 +53,8 @@ DISPOSITION:forced=0 side_data_type=Stereo 3D type=2D inverted=0 +view=packed +primary_eye=none [/SIDE_DATA] [SIDE_DATA] side_data_type=Spherical Mapping diff --git a/tests/ref/fate/matroska-stereo_mode b/tests/ref/fate/matroska-stereo_mode index 739b789fea..13bce13cb8 100644 --- a/tests/ref/fate/matroska-stereo_mode +++ b/tests/ref/fate/matroska-stereo_mode @@ -132,6 +132,8 @@ TAG:DURATION=00:00:10.000000000 side_data_type=Stereo 3D type=side by side inverted=0 +view=packed +primary_eye=none [/SIDE_DATA] [/STREAM] [STREAM] @@ -147,6 +149,8 @@ TAG:DURATION=00:00:10.000000000 side_data_type=Stereo 3D type=top and bottom inverted=1 +view=packed +primary_eye=none [/SIDE_DATA] [/STREAM] [STREAM] @@ -160,6 +164,8 @@ TAG:DURATION=00:00:10.000000000 side_data_type=Stereo 3D type=interleaved lines inverted=1 +view=packed +primary_eye=none [/SIDE_DATA] [/STREAM] [STREAM] @@ -174,6 +180,8 @@ TAG:DURATION=00:00:10.000000000 side_data_type=Stereo 3D type=interleaved columns inverted=1 +view=packed +primary_eye=none [/SIDE_DATA] [/STREAM] [STREAM] diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux index f6c24dead6..e54304cafd 100644 --- a/tests/ref/fate/matroska-vp8-alpha-remux +++ b/tests/ref/fate/matroska-vp8-alpha-remux @@ -35,5 +35,7 @@ DISPOSITION:still_image=0 side_data_type=Stereo 3D type=2D inverted=0 +view=packed +primary_eye=none [/SIDE_DATA] [/STREAM] diff --git a/tests/ref/fate/mov-spherical-mono b/tests/ref/fate/mov-spherical-mono index bd57d94514..08b94e455b 100644 --- a/tests/ref/fate/mov-spherical-mono +++ b/tests/ref/fate/mov-spherical-mono @@ -3,6 +3,8 @@ side_data_type=Stereo 3D type=2D inverted=0 +view=packed +primary_eye=none [/SIDE_DATA] [SIDE_DATA] side_data_type=Spherical Mapping From patchwork Mon Jun 17 13:44:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 49976 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1954159vqg; Mon, 17 Jun 2024 06:44:46 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU4YNPwrsNKWVXfM7Y5Bf+P+JzS2lQ7aEfNb4rj+TsZC8skE9SebTL8BKWVMKx1wRfuwKyWTCstIUwJ7VMZU2zxZFguHGXPJ3YfHw== X-Google-Smtp-Source: AGHT+IHp3jk5ceFKosfoALIP31Q5QusXxzpGcoG2EsTPmBV/yHnYz31RLGnnjYokl1PnmvKUB9Lq X-Received: by 2002:a50:8715:0:b0:57c:671d:8455 with SMTP id 4fb4d7f45d1cf-57cbd683b76mr7790694a12.14.1718631885779; Mon, 17 Jun 2024 06:44:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718631885; cv=none; d=google.com; s=arc-20160816; b=ZhkQyL3fOURbdHiViiCv6gPVQhyIRlf6ZvTTEG7aAR83XRMOX/GOOcpGi12L10HKkp 9O3JvBTYsaJl7qMtvQljfVzIT0PsnbaIsGf60Nu9bDf/9YsfZRjCPsqw78T/VpHP/1gd jhDvHH3K8RgRFavLEEOCtBM7t83cN263/PQc3sy7QT/IoSUYe78xHfuuDs+nQtcVMqAw pp44TxPKT/IK41ggzjbyFAhLQk9U/6pp0nY6FQ8mmwciM/6h878jbatwpEVMSCfQIXfu G/pLWqJ8okodzf0dheXjjMxj4QsFTlDQ3CGVr1LePkrYjANNl1T9OqmVNyhrrZchmP2l c0AQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=JR0Z62A0WL7fkcGoWc/A2nueXkph7gcapCzszD90sa0=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=rsJYeHHVEwYCmnFrQcEiQqloK+n2Z81Ab/UgNGlB8Mp0KnX3Tj+YiAN2GZtFNGxLUF 63AGWAC9yWdSaQdGB3/iSrk/9Z0qJxIes8WrNSfX5mU2Hz4bQB8h2Yadw1ZSezBt0po2 Ex5KWXO5fS9NdM4b0939kORNCwwt+fmFwNeX+wXUZHuJPPp1wcxpf1soN0vZSzrSbkZO xknl1mxHl6m4RQh4/gQkOrsdBdfK6ACjYPw6riQ62MX8wszx6F10qbv4pbb4RQd87uVg MycPM/N/KFqJ1VDqFsDF92cEo+PQPWpniQWXCjghr2dHyU47r/bG1FDSeMyC8ifjzJIp j5Yg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Vo9hYdT1; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-57ceb435c59si549646a12.403.2024.06.17.06.44.44; Mon, 17 Jun 2024 06:44:45 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Vo9hYdT1; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BB49868D779; Mon, 17 Jun 2024 16:44:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F2B4A68D5D7 for ; Mon, 17 Jun 2024 16:44:34 +0300 (EEST) Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-42189d3c7efso45390295e9.2 for ; Mon, 17 Jun 2024 06:44:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718631874; x=1719236674; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=sr5wUasFHl6TC0wjgmMy3qJemyeGdLs716uYJo1T9ds=; b=Vo9hYdT1t9SspUBilWNr3CsoBFTLuP/D7ZfFBmUSEgDFpPFNMXN7yL4o1x+xuT7D48 Gs4IvlhrAUdm/5QvseKgDWygEH3zCafCts1MJB67moMJyaMS5Yj9LdtBq9tJdXDstIAt isbL3ZWCLwnylEHmjga8kdPRhg9IVpceICBdFfqKbuHxypdyqV4FTJwFYgcWiWl+Z4ok XOb6DbjMxA8PwHi+RES6CERhcbq2XBV/hoO9LrER4btYYtIlt95va02vjGscuMB+CcoL eNYKjZV7dhwp4iYArkqxN274BhlcoPYGSTyj5tZ3T38fxIMbWcu/QppKGAfVmg+Uzvl0 UILw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718631874; x=1719236674; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sr5wUasFHl6TC0wjgmMy3qJemyeGdLs716uYJo1T9ds=; b=uoWWfZPzfUDiTY/TUIaeVi8RklDtMElkmW0lLD9mJGb9QKZL9DDiIFgbkMgU80FzbK CA1IBQn8ZisL3WZ7VjR5HVtCiS3OCqgI5dZVWHg612sBd7NpuKcHL6M+ZArLmKmjNejr mhQXPx7Z/7p8QcCh/Uqk/pbjQYdaTZ/7LRI8VT0TZsd+OPKUvQOZRyK2iED7DrCF45vV W+D8BBmzc63bXxwMDMKkONN5M0GYLOzXXA08dJ9sykSkJ/pGkgZIH72D5DZ8tZlZS6VU n73bP5lw1RvQU8SGir3sOwKpF3jG66XaF4nQwERyMR44GG2RIeED5FOvyp4BcjlgTUcc k6FQ== X-Gm-Message-State: AOJu0YzL+WKbMBahB17LxVDcR5M8Z9lo5koNK9f8F/Nh7tsYnS9AsbQ9 E7GRpK09dsmw7Xq4lCZ/wPK5Jibc7A+pp7lJvrYu10ig8bPxoMbd7iAGIw== X-Received: by 2002:adf:f308:0:b0:360:6fc3:5676 with SMTP id ffacd0b85a97d-3607a7833f7mr7237715f8f.50.1718631873676; Mon, 17 Jun 2024 06:44:33 -0700 (PDT) Received: from localhost.localdomain (0540dce9.skybroadband.com. [5.64.220.233]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-360750f0d71sm11861511f8f.86.2024.06.17.06.44.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 06:44:32 -0700 (PDT) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jun 2024 14:44:22 +0100 Message-ID: <20240617134422.224916-1-derek.buitenhuis@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240617134141.224614-1-derek.buitenhuis@gmail.com> References: <20240617134141.224614-1-derek.buitenhuis@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 4/5] avformat/mov: Add support for exporting Video Extension Usage info X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: XbogdTmGdfWv This box is provided by files created by the Apple Vision Pro, as well as the iPhone 15+ when capture for Vision Pro is enabled. The boxes are a mix of things documented by Apple in some PDFs, their API docs, and reverse engineering. Ideally we will have a real spec one day. Links: * https://developer.apple.com/av-foundation/Stereo-Video-ISOBMFF-Extensions.pdf * https://developer.apple.com/documentation/videotoolbox/kvtcompressionpropertykey_horizontaldisparityadjustment * https://developer.apple.com/documentation/videotoolbox/kvtcompressionpropertykey_stereocamerabaseline * https://developer.apple.com/documentation/videotoolbox/kvtcompressionpropertykey_heroeye Signed-off-by: Derek Buitenhuis --- Only difference from v2 is s/RECTANGULAR/RECTILINEAR/. --- libavformat/mov.c | 279 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index 9016cd5ad0..0f8d7e83b2 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -6477,6 +6477,284 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_vexu_proj(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + AVStream *st; + MOVStreamContext *sc; + int size; + uint32_t tag; + enum AVSphericalProjection projection; + + if (c->fc->nb_streams < 1) + return 0; + + st = c->fc->streams[c->fc->nb_streams - 1]; + sc = st->priv_data; + + if (atom.size != 16) { + av_log(c->fc, AV_LOG_ERROR, "Invalid size for proj box: %"PRIu64"\n", atom.size); + return AVERROR_INVALIDDATA; + } + + size = avio_rb32(pb); + if (size != 16) { + av_log(c->fc, AV_LOG_ERROR, "Invalid size for prji box: %d\n", size); + return AVERROR_INVALIDDATA; + } + + tag = avio_rl32(pb); + if (tag != MKTAG('p','r','j','i')) { + av_log(c->fc, AV_LOG_ERROR, "Invalid child box of proj box: 0x%08X\n", tag); + return AVERROR_INVALIDDATA; + } + + avio_skip(pb, 1); // version + avio_skip(pb, 3); // flags + + tag = avio_rl32(pb); + switch (tag) { + case MKTAG('r','e','c','t'): + projection = AV_SPHERICAL_RECTILINEAR; + break; + case MKTAG('e','q','u','i'): + projection = AV_SPHERICAL_EQUIRECTANGULAR; + break; + case MKTAG('h','e','q','u'): + projection = AV_SPHERICAL_HALF_EQUIRECTANGULAR; + break; + case MKTAG('f','i','s','h'): + projection = AV_SPHERICAL_FISHEYE; + break; + default: + av_log(c->fc, AV_LOG_ERROR, "Invalid projection type in prji box: 0x%08X\n", tag); + return AVERROR_INVALIDDATA; + } + + sc->spherical = av_spherical_alloc(&sc->spherical_size); + if (!sc->spherical) + return AVERROR(ENOMEM); + + sc->spherical->projection = projection; + + return 0; +} + +static int mov_read_eyes(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + AVStream *st; + MOVStreamContext *sc; + int size, flags = 0; + int64_t remaining; + uint32_t tag, baseline = 0; + enum AVStereo3DView view = AV_STEREO3D_VIEW_PACKED; + enum AVStereo3DPrimaryEye primary_eye = AV_PRIMARY_EYE_NONE; + int32_t horizontal_disparity_adjustment = 0; + + if (c->fc->nb_streams < 1) + return 0; + + st = c->fc->streams[c->fc->nb_streams - 1]; + sc = st->priv_data; + + remaining = atom.size; + while (remaining > 0) { + size = avio_rb32(pb); + if (size < 8 || size > remaining ) { + av_log(c->fc, AV_LOG_ERROR, "Invalid child size in eyes box\n"); + return AVERROR_INVALIDDATA; + } + + tag = avio_rl32(pb); + switch (tag) { + case MKTAG('s','t','r','i'): { + int has_right, has_left; + uint8_t tmp; + if (size != 13) { + av_log(c->fc, AV_LOG_ERROR, "Invalid size of stri box: %d\n", size); + return AVERROR_INVALIDDATA; + } + avio_skip(pb, 1); // version + avio_skip(pb, 3); // flags + + tmp = avio_r8(pb); + + // eye_views_reversed + if (tmp & 8) { + flags |= AV_STEREO3D_FLAG_INVERT; + } + // has_additional_views + if (tmp & 4) { + // skip... + } + + has_right = tmp & 2; // has_right_eye_view + has_left = tmp & 1; // has_left_eye_view + + if (has_left && has_right) + view = AV_STEREO3D_VIEW_PACKED; + else if (has_left) + view = AV_STEREO3D_VIEW_LEFT; + else if (has_right) + view = AV_STEREO3D_VIEW_RIGHT; + break; + } + case MKTAG('h','e','r','o'): { + int tmp; + if (size != 13) { + av_log(c->fc, AV_LOG_ERROR, "Invalid size of hero box: %d\n", size); + return AVERROR_INVALIDDATA; + } + avio_skip(pb, 1); // version + avio_skip(pb, 3); // flags + + tmp = avio_r8(pb); + if (tmp == 0) + primary_eye = AV_PRIMARY_EYE_NONE; + else if (tmp == 1) + primary_eye = AV_PRIMARY_EYE_LEFT; + else if (tmp == 2) + primary_eye = AV_PRIMARY_EYE_RIGHT; + else + av_log(c->fc, AV_LOG_WARNING, "Unknown hero eye type: %d\n", tmp); + + break; + } + case MKTAG('c','a','m','s'): { + uint32_t subtag; + int subsize; + if (size != 24) { + av_log(c->fc, AV_LOG_ERROR, "Invalid size of cams box: %d\n", size); + return AVERROR_INVALIDDATA; + } + + subsize = avio_rb32(pb); + if (subsize != 16) { + av_log(c->fc, AV_LOG_ERROR, "Invalid size of blin box: %d\n", size); + return AVERROR_INVALIDDATA; + } + + subtag = avio_rl32(pb); + if (subtag != MKTAG('b','l','i','n')) { + av_log(c->fc, AV_LOG_ERROR, "Expected blin box, got 0x%08X\n", subtag); + return AVERROR_INVALIDDATA; + } + + avio_skip(pb, 1); // version + avio_skip(pb, 3); // flags + + baseline = avio_rb32(pb); + + break; + } + case MKTAG('c','m','f','y'): { + uint32_t subtag; + int subsize; + if (size != 24) { + av_log(c->fc, AV_LOG_ERROR, "Invalid size of cmfy box: %d\n", size); + return AVERROR_INVALIDDATA; + } + + subsize = avio_rb32(pb); + if (subsize != 16) { + av_log(c->fc, AV_LOG_ERROR, "Invalid size of dadj box: %d\n", size); + return AVERROR_INVALIDDATA; + } + + subtag = avio_rl32(pb); + if (subtag != MKTAG('d','a','d','j')) { + av_log(c->fc, AV_LOG_ERROR, "Expected dadj box, got 0x%08X\n", subtag); + return AVERROR_INVALIDDATA; + } + + avio_skip(pb, 1); // version + avio_skip(pb, 3); // flags + + horizontal_disparity_adjustment = (int32_t) avio_rb32(pb); + + break; + } + default: + av_log(c->fc, AV_LOG_WARNING, "Unknown tag in eyes: 0x%08X\n", tag); + avio_skip(pb, size - 8); + break; + } + remaining -= size; + } + + if (remaining != 0) { + av_log(c->fc, AV_LOG_ERROR, "Broken eyes box\n"); + return AVERROR_INVALIDDATA; + } + + if (!sc->stereo3d) { + sc->stereo3d = av_stereo3d_alloc(); + if (!sc->stereo3d) + return AVERROR(ENOMEM); + } + + sc->stereo3d->flags = flags; + sc->stereo3d->view = view; + sc->stereo3d->primary_eye = primary_eye; + sc->stereo3d->baseline = baseline; + sc->stereo3d->horizontal_disparity_adjustment = horizontal_disparity_adjustment; + + return 0; +} + +static int mov_read_vexu(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + int size; + int64_t remaining; + uint32_t tag; + + if (c->fc->nb_streams < 1) + return 0; + + if (atom.size < 8) { + av_log(c->fc, AV_LOG_ERROR, "Empty video extension usage box\n"); + return AVERROR_INVALIDDATA; + } + + remaining = atom.size; + while (remaining > 0) { + size = avio_rb32(pb); + if (size < 8 || size > remaining ) { + av_log(c->fc, AV_LOG_ERROR, "Invalid child size in vexu box\n"); + return AVERROR_INVALIDDATA; + } + + tag = avio_rl32(pb); + switch (tag) { + case MKTAG('p','r','o','j'): { + MOVAtom proj = { tag, size - 8 }; + int ret = mov_read_vexu_proj(c, pb, proj); + if (ret < 0) + return ret; + break; + } + case MKTAG('e','y','e','s'): { + MOVAtom eyes = { tag, size - 8 }; + int ret = mov_read_eyes(c, pb, eyes); + if (ret < 0) + return ret; + break; + } + default: + av_log(c->fc, AV_LOG_WARNING, "Unknown tag in vexu: 0x%08X\n", tag); + avio_skip(pb, size - 8); + break; + } + remaining -= size; + } + + if (remaining != 0) { + av_log(c->fc, AV_LOG_ERROR, "Broken vexu box\n"); + return AVERROR_INVALIDDATA; + } + + return 0; +} + static int mov_parse_uuid_spherical(MOVStreamContext *sc, AVIOContext *pb, size_t len) { int ret = 0; @@ -8595,6 +8873,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('d','f','L','a'), mov_read_dfla }, { MKTAG('s','t','3','d'), mov_read_st3d }, /* stereoscopic 3D video box */ { MKTAG('s','v','3','d'), mov_read_sv3d }, /* spherical video box */ +{ MKTAG('v','e','x','u'), mov_read_vexu }, /* video extension usage */ { MKTAG('d','O','p','s'), mov_read_dops }, { MKTAG('d','m','l','p'), mov_read_dmlp }, { MKTAG('S','m','D','m'), mov_read_smdm }, From patchwork Mon Jun 17 13:41:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 49975 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9196:0:b0:460:55fa:d5ed with SMTP id s22csp1953157vqg; Mon, 17 Jun 2024 06:42:51 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUP2KYjVbEpmrXZH+NGzgsm1YfGAn6gWE4Aej2rvgw4tISfa5wiCd9LwqzzWVBCxXYfu8DcUSBaM4rdqmV/nvGkPcFts7h0SdUGCg== X-Google-Smtp-Source: AGHT+IFYMl2XpwivZy8Xji/DuhkpXul4diA6hrlox34t/P0/ER+N88Vd/REMTxtILRUMRue4GBiT X-Received: by 2002:a05:6402:1247:b0:57c:d3d4:bad2 with SMTP id 4fb4d7f45d1cf-57cd3d4bafbmr2784663a12.4.1718631770870; Mon, 17 Jun 2024 06:42:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1718631770; cv=none; d=google.com; s=arc-20160816; b=aMZVrK1SIYbvvvWfhC79eZ3wugUWWG574v1bymnar+Wo/Nx3Ta2ghmTO1SB9z7X0Tm 0Hi7MN7gjPSWFXLh5SQHo4XsaU1cz1nlrPMpO5g7Vx9spPDgVFxGKGTZcgpPbtEPppB5 kd24SScsixS1jpeukVIkc9hDS/MKgABp3+0svFeBDnSZV8irWgih2+rygSu5Vl5QEUoY JexQ9vxh5MFhnJXVJToJFJjsCgAovbFAPw7Jrimg2Ex4VTdsahaaygePYVLqZh60Gd9Y 9wyoGQ8ryRGBa/nP24MY0HLFzIxicYBkwWHkUoU6BfKXdAMUW36w17lfNYW3AU+mx6um rfSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=UYbfFutHhJjyL0jT1T4lnS1lGbgtozG+Zw+oa3w/Jpk=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=rWjq7a7mG94NdSmIUdQVQFjvFGocpkCKyVBlOOU6C2LkSoOJKEMzzYPFaNFnDsVTlo IOhLbH6+c8MJe06ba7V3poFossR7aJSFNyh94qBHc6L7hnKhJ09Ac/6iZOt0W8JORjXP Y6XtKmLMKxoZ2T9hLxiCHKkHRcGQ0Rms1OaOZb3H0X/2dX6otKXmvMAStKjlZEW7qgnu kbxTtxAEV+FcfEjA57XqXgtiq6fTOsitUUE0EX3wuJwYknLgi1foN6Qwsf5F23RE+li5 NHMo6/9GwosMlwF79onJjkXBKRXFLonl0EYhXCDSgJ+8GmOWreRNTzBphRcAgKDPk1ts LWlw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=dbvoCKnG; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-57cb72d6b49si4669132a12.75.2024.06.17.06.42.49; Mon, 17 Jun 2024 06:42:50 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=dbvoCKnG; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3849268D796; Mon, 17 Jun 2024 16:42:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9E61D68D76D for ; Mon, 17 Jun 2024 16:41:57 +0300 (EEST) Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4217d808034so38175235e9.3 for ; Mon, 17 Jun 2024 06:41:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718631716; x=1719236516; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=sOyWr0NQ8NVMunluntBog7eG4FXYiLZY3pjGphecwDI=; b=dbvoCKnGnIwdigcJSmnzMaOtzlYswv6/fkOw9eqwyvMzPHcOXAtmHZFmu/y20q+dkQ JSxIAo2I6WIPCjOZZu2nZ7ahZ0SGpbh42YEaoCtxvQ3kMPgEEl65cQ2UROGEVz8a3gaj w5ZMysj0LKoMZPgkcXNZOJmuQufG2Q0cMSz/Gh67vsoOjEIPDPvSVFFJv5a+S795/BrS C0n6iXMMrH1wCtX/baEO8Y3Gn0nZrenQtc9Y/lJXE2YxVDFoEl7ZxpDgTzlbAxVkyOPV SpWaCGVJNy2YCKj8gCQrqUYNkPLeIuWdC4Bbc2waqNmTca2DN0L8HQyjAvjIyQgegTEt 6G0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718631716; x=1719236516; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sOyWr0NQ8NVMunluntBog7eG4FXYiLZY3pjGphecwDI=; b=QS03r85H4Ptl8jjG7uhvxI+tUVnCA/HX5xDDoxmU1+lJOl2AeT47Yhh5Hl3R3+vzpf UG6utACou2AMIJ75tuafsoXyEmdVmgYBYaD+3abPaeglt0a9U8242csG+9t45ju8pIAQ Exg4+S9OQxOprL+QfxJaXUTYXER9FqNgTQtebAVi9Zs5KmPL22ypp8DmA1AXUNEVNP+L pvQ+rerkBvwIO6JXDBoboHns1CJKnh5yJwHtUu+Qoh0MqwwgiDQhdMrM2lHylFDmVQdw wytbLTT9jA0ttMQe2irIJ/h9Mt0YVM2uGWF4kk25lSNHUwjvNGKIF5NVRJt/9EARTOkx ItTw== X-Gm-Message-State: AOJu0YzdDNwTBiaOUQBa02oYFjK8ZdhYESBA91gbndADjJCOvZh9TQUh 5oUyS6Warm5UR7qbePIm9hbXPR3bTNxkG9cWgwT68u9BvLGHBzs3O96XZg== X-Received: by 2002:a05:600c:46ce:b0:421:81b7:49ef with SMTP id 5b1f17b1804b1-423048227a4mr73814045e9.8.1718631716492; Mon, 17 Jun 2024 06:41:56 -0700 (PDT) Received: from localhost.localdomain (0540dce9.skybroadband.com. [5.64.220.233]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3607509c790sm11915391f8f.38.2024.06.17.06.41.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 06:41:55 -0700 (PDT) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jun 2024 14:41:41 +0100 Message-ID: <20240617134141.224614-6-derek.buitenhuis@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240617134141.224614-1-derek.buitenhuis@gmail.com> References: <20240617134141.224614-1-derek.buitenhuis@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 5/5] avformat/mov: Add support for reading and exporting horizontal field of view X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oc0li6Arp3QP These boxes are created by the Apple Vision Pro and the iPhone 15+ when capture for the Vision Pro is enabled. Based off of the swift API: * https://developer.apple.com/documentation/coremedia/kcmformatdescriptionextension_horizontalfieldofview Signed-off-by: Derek Buitenhuis --- libavformat/mov.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index a7ca0b5a3c..391b11a4e1 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -6755,6 +6755,34 @@ static int mov_read_vexu(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_hfov(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + AVStream *st; + MOVStreamContext *sc; + + if (c->fc->nb_streams < 1) + return 0; + + st = c->fc->streams[c->fc->nb_streams - 1]; + sc = st->priv_data; + + if (atom.size != 4) { + av_log(c->fc, AV_LOG_ERROR, "Invalid size of hfov box: %"PRIu64"\n", atom.size); + return AVERROR_INVALIDDATA; + } + + + if (!sc->stereo3d) { + sc->stereo3d = av_stereo3d_alloc(); + if (!sc->stereo3d) + return AVERROR(ENOMEM); + } + + sc->stereo3d->horizontal_field_of_view = avio_rb32(pb); + + return 0; +} + static int mov_parse_uuid_spherical(MOVStreamContext *sc, AVIOContext *pb, size_t len) { int ret = 0; @@ -8874,6 +8902,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('s','t','3','d'), mov_read_st3d }, /* stereoscopic 3D video box */ { MKTAG('s','v','3','d'), mov_read_sv3d }, /* spherical video box */ { MKTAG('v','e','x','u'), mov_read_vexu }, /* video extension usage */ +{ MKTAG('h','f','o','v'), mov_read_hfov }, { MKTAG('d','O','p','s'), mov_read_dops }, { MKTAG('d','m','l','p'), mov_read_dmlp }, { MKTAG('S','m','D','m'), mov_read_smdm },