From patchwork Wed Sep 25 22:52:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 51856 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b66f:0:b0:48e:c0f8:d0de with SMTP id o15csp148260vqw; Wed, 25 Sep 2024 22:59:20 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX6zcHL5sjEQKDi68hqmFBU0nJXCWZzack8e+2BJYoqe1QGhmOfy1zjC3O1rGklvWbhjytjJkvJMKhPjHtx+U30@gmail.com X-Google-Smtp-Source: AGHT+IHFoHJMMDUVKFmd1My7r+owaLQcNI/ayrOh0KPByTDj56janoF0mKVju8fCSSBsIwEamf/e X-Received: by 2002:a17:907:3f9d:b0:a8a:6e35:31ef with SMTP id a640c23a62f3a-a93a0617d04mr497580766b.49.1727330360197; Wed, 25 Sep 2024 22:59:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727330360; cv=none; d=google.com; s=arc-20240605; b=IpBXqUqcMjjPJGP/NWbVcl7rzahpf+I2TmDUcoeDNRDTMfUQfdtKzW5PFGsgxu7GpP uWInsNgZxTayoIvp3GW28+o6X5WGLNMFB/tl3I+S4vFbCE9apYXDpT3JePpWcl30KTN5 /daRJObgw1/O0sYr7LFJmcccOzDDgr4mfxTQoI8Lose+R1yUVvO2B741FXj8PeeIpRaZ ZjQtPPPXoBGOyItKMlzcLnbD/YRm6+aGtjRviD3PBzNYbI0eXeqDB3d+V5i+7RgtziWQ qfTBRKM/j2+u12XhnAG1WdXuMacGuU/mKVut+RJ/zhcmlFzHpn6rScM5jwo6ppXgeBza TJSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:message-id:date:to:from :dkim-signature:delivered-to; bh=NEO7PDCOH4rS0bX1XGlYS4axMLl5HpHYAS2XaX5h4QY=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=ctQonCynJCryFzwB19tQMmSM8idi8S2h1t7IoUwnob8aaIeVeRFmab6gFjL8vl+swa 1WS0Pjnl8sodg8tGajxVcA/+H49roJ9sJxqib4nYQaQ8z4RKEM2GNFiE9KDnxzQPXAvD 2b25rpysE/3GXuo73NIIGzwOvbEr18B8/Aqy9guoFvmv5ZAohypvdfekOhocvlQ980xC cKjbCDw2io9DX1GfzQgC9Y3DvppL2KJq+/m9oNIxBW1iB9F0JedEaAZLQzehb4XJF/V+ YYtoCfGOZIC1qC44YvhLDAyi+CIRZp54tphSjDJNLxX9WC0I7drB1nzxMlsiCPEjKATY 9Q3Q==; 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=C3F0AdhT; 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; dara=fail header.i=@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-a9392f2ba7dsi339304066b.24.2024.09.25.22.59.19; Wed, 25 Sep 2024 22:59:20 -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=C3F0AdhT; 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; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6A77A68DADA; Thu, 26 Sep 2024 01:52:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-vs1-f48.google.com (mail-vs1-f48.google.com [209.85.217.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A9B6F68DA44 for ; Thu, 26 Sep 2024 01:52:13 +0300 (EEST) Received: by mail-vs1-f48.google.com with SMTP id ada2fe7eead31-49bddfd1edeso150872137.0 for ; Wed, 25 Sep 2024 15:52:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727304732; x=1727909532; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=kueDz1dF+wGxPMW5GUVcYmEub3wqxP5lck+gwlU+ilc=; b=C3F0AdhTb87C1v9j0D99HTAm7bGLJ6O9bLy0DGpodQgUhNAtpJuIMLujh9HB8AP1MJ bFCy53NTR6ql/8CH5jVZHU3fNI37SqRsByxKnXQatdlF7b8UgMXB4m3L/4ZUtA5FlhvD FldCzD1Ca8NOeaUS81lr2lfFf7gOSzzMXnM4GKp17TTaFm3g1V7XgTQs6mR/O6sG3Iak 5oevkD2Rij/t8N5h964YLLa/lwo45ZQ366jqC8SEtV/oaiSEMz+0WLaqb2+Zl9lU8xWr usBldNL41vK+WvdBe698YE/p3O2l/PdTh4wyha9PjXLVxff7PQM7lqvxogWaJIqHA52c IFNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727304732; x=1727909532; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kueDz1dF+wGxPMW5GUVcYmEub3wqxP5lck+gwlU+ilc=; b=NqCmI1xdIgKVRUfTyU8BnPSNPiOi056shhH167qEGcDs3OCVLmzq+pqJZ/tFacTnQ+ yXsUtcBVOKfoQrhhIx7nQQmQ1hxB1LG/wDEOwVNnKHY9eZu8xbQ0XoPqBQWzktb4BX28 L1Tca/OgyaLBb9MIFdyb30AEYq0Phug7KCxv8wK3BFCthl1YoMamXXaYXUESURKT5Ktj HITfQ7AdeZ288UqxfwyfDbE/o3/ZK19OI253c8UE8Lh3GdOOoyqts6IX7qXl4AFwTLg8 T/f14HmOVcCCSEoUrqvpwjXrRa69cCBlMzY8XohZsbRAakHQe3mLiAjlKh5LSg8WDwTJ qcbg== X-Gm-Message-State: AOJu0YyLtITOXB7XOw70eZWyf6Bc1/5vJNjxyIZQmtvuxyBLiHP4IPF5 WgfIjq5JohI7kXBPjo/AtDmQatZBayqaXlfiIk67YP1O+P7udqTdBARVJg== X-Received: by 2002:a05:6102:32c5:b0:493:c3b2:b5ba with SMTP id ada2fe7eead31-4a15dc656c2mr5067182137.6.1727304731618; Wed, 25 Sep 2024 15:52:11 -0700 (PDT) Received: from localhost.localdomain ([181.92.233.116]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4a1517c0e44sm2848945137.16.2024.09.25.15.52.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Sep 2024 15:52:10 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Sep 2024 19:52:16 -0300 Message-ID: <20240925225219.3060-1-jamrial@gmail.com> X-Mailer: git-send-email 2.46.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/4] avformat/avformat: add a new disposition to signal the stream is an HDR gainmap 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: +rC4g1LVT2c2 HDR images photos taken by certain cameras split this as a separate image. Signed-off-by: James Almer --- libavformat/avformat.h | 5 +++++ libavformat/dump.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 56c1c80289..6d9f5c4399 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -718,6 +718,11 @@ typedef struct AVIndexEntry { * Annex G/H, or HEVC Annex F). */ #define AV_DISPOSITION_MULTILAYER (1 << 21) +/** + * The video stream contains an HDR gainmap. Only ever used with + * AV_DISPOSITION_DEPENDENT. + */ +#define AV_DISPOSITION_GAINMAP (1 << 22) /** * @return The AV_DISPOSITION_* flag corresponding to disp or a negative error diff --git a/libavformat/dump.c b/libavformat/dump.c index f20c2c4953..5178f19685 100644 --- a/libavformat/dump.c +++ b/libavformat/dump.c @@ -589,6 +589,8 @@ static void dump_disposition(int disposition, int log_level) av_log(NULL, log_level, " (non-diegetic)"); if (disposition & AV_DISPOSITION_MULTILAYER) av_log(NULL, log_level, " (multilayer)"); + if (disposition & AV_DISPOSITION_GAINMAP) + av_log(NULL, log_level, " (hdr gainmap)"); } /* "user interface" functions */ From patchwork Wed Sep 25 22:52:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 51857 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b66f:0:b0:48e:c0f8:d0de with SMTP id o15csp148271vqw; Wed, 25 Sep 2024 22:59:22 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUA5ir8rLVeUn0G53p35aXli8Tym3oQxNei8Byb7a1NawJEI1RTWZOl2hMqbciuc5GOlwf1B2C8vCbTWxkxPGAk@gmail.com X-Google-Smtp-Source: AGHT+IEHS+k/2s4LqueMJ/RQ9jdJGb0clQjTRKs+jgc8HivmbvXrYsHnUpdQLwgDDruwqk+NXAtN X-Received: by 2002:a05:6512:3d93:b0:536:553f:a6e7 with SMTP id 2adb3069b0e04-53877530d66mr4550420e87.32.1727330361922; Wed, 25 Sep 2024 22:59:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727330361; cv=none; d=google.com; s=arc-20240605; b=ClRV6dEW3vgaZxDMUz+uC2NWxRN4VQcoRpe6FX8GnGe4pXv1yxLo/SIUKHgB/kA+Vp JY3Ju9G2pE/JY8AGQYtma8n7t+g33ZQY13gSaA4sQSCkFsOyzxP0M0UsMVEbm1fsgTXa q6HAHsaBpVbAH5WlTFWzic7jhz2CodVgCYX4zaHZj8mBRPjp2Id7A7DRh3PZwB0K7N3T GoLnDJ8pcljwTOghehWpMo+rMwW7FA2rH+0OFmcSecce82dn6oyw7s3J6iAcP4/gDK6Y cIh8zlkyTEgY6CwizDF+tt4muqwEj/yPKpMy0OJTJxeuq2kRJf5f7YlhQvGfUQBHfIS/ GIDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=/h3MVwI1HEFBiI0RupoFehRQPUfJdlsge1825Nj1rzc=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=bMYtbLNxMw6t3e7Pv3BJMhSOdeePWShpM68U0xAbUMVt38DMjokFC2AfayZConNReU oz05oYMFeE1osn9hF/I/ln7JVKe7NgTqw71D29P/YZJwxqH6Hbjrvp7Q8SYsJXIypAd7 5cBVXFeGT4YlR9eUOnwSpqICNNy7StLnsL5/CK4R9tmeYRnxcvX4uoqDAY1Fp1DM5JMV O/BH38S4WeSfRRBKvN+dikO/roLBbOWB6gWbWLoWRiWhGsmuq8ypjfNAKZQTaoEgiuKR eomQKqmg5aP+WGGCss0nYDcEvkLFVFAqJiv9jwhTUf0P9LKxiL8g9e9FoJxN2r+O2UXc oZeg==; 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=TbqcsnE3; 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; dara=fail header.i=@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 2adb3069b0e04-537a85e0c25si1547091e87.12.2024.09.25.22.59.21; Wed, 25 Sep 2024 22:59:21 -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=TbqcsnE3; 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; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D8C6D68DB65; Thu, 26 Sep 2024 01:52:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ua1-f48.google.com (mail-ua1-f48.google.com [209.85.222.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 12F9C68D9D9 for ; Thu, 26 Sep 2024 01:52:16 +0300 (EEST) Received: by mail-ua1-f48.google.com with SMTP id a1e0cc1a2514c-846bcf3677dso127951241.1 for ; Wed, 25 Sep 2024 15:52:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727304733; x=1727909533; 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=HLpiy3l/Th9pry4+BE0mFi+7fuAFEbjOUN73VvyPHl8=; b=TbqcsnE3urYP6peOqvqt+XZvzqT35JP176MfBYQFsL0GlY6czJ9pLapd+UUEYuaOi7 2SHmfrVXmmp9NzkT3MFBSY/4Cr6wnjBW574r52z92fMznFSCNrkF3Kg2a9X9SkcEcwPZ +ytBfccMXTB6WS/ggwucQth6T2r4fqL5a/PTXj5XoYOSTnU0pPuf84ksqsqU1YSqtqRM KzXP/dEvH4fqUFwaftpHDliMgP6jCBOBr6gQ6vcsbhZh+it8aPs/NwJvt8LH5JC5xRVN jMYv//yz2o3pZI5jMJ9mlJgNVtGgz5st7a9+hSLzeV9B6fWDl+KHurrjx3mAIX8GSlEK J2Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727304733; x=1727909533; 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=HLpiy3l/Th9pry4+BE0mFi+7fuAFEbjOUN73VvyPHl8=; b=glBCmav8Fq2dXjNJSKjR8Uflz7K6YY/FaF9RTs0qkhuAZdue6Sh55GuLqjsPyLqccA TIaouc0yBPgz90bQpoEJnAgc14g3wqMnxhEDH4cE8LDb81IDSK7IyF8WjIW4ps5QCyoG +QzOVo6bw5LMwxdnzSJz0oZd7WQ1+qr7aSLB8UST56Q/xnl1kMEB2yOfjqcTc5KH+MBl wVqkUX4l2Qa4RjoF7PUEQ5pTmuzWhefl8d092Jk82wKMep2SE+Fay4TGRA2/jEHJLtPi LjaUbA2PdaznBntiWUueH8KnhX3JZkQGpRvpQI5qiUYYYFe3cJCb54c3d+jrqnsCS47r 6wdA== X-Gm-Message-State: AOJu0Yxj5tuaCg5tvrANdnV3WC4y3YPp6GAsOYiY0ByaVkai+p/LVbQt cSMdTWuDA9aAmdzpL/o6vzocZUhFCzeJj7HNOqbUAu06cAuEW0mWMcK3AQ== X-Received: by 2002:a05:6102:2acd:b0:493:c092:ea15 with SMTP id ada2fe7eead31-4a15dd237bbmr4632901137.22.1727304733552; Wed, 25 Sep 2024 15:52:13 -0700 (PDT) Received: from localhost.localdomain ([181.92.233.116]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4a1517c0e44sm2848945137.16.2024.09.25.15.52.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Sep 2024 15:52:13 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Sep 2024 19:52:17 -0300 Message-ID: <20240925225219.3060-2-jamrial@gmail.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240925225219.3060-1-jamrial@gmail.com> References: <20240925225219.3060-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/4] avformat/mov: add support for auxC box 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: PqhvFW7sGQ7A It's used to signal an item is an auxiliary image. Signed-off-by: James Almer --- libavformat/isom.h | 1 + libavformat/mov.c | 47 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/libavformat/isom.h b/libavformat/isom.h index 4723397048..5076bc5da7 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -285,6 +285,7 @@ typedef struct HEIFItem { int height; int type; int is_idat_relative; + char *aux_type; } HEIFItem; typedef struct HEIFGrid { diff --git a/libavformat/mov.c b/libavformat/mov.c index a2333ac1fd..bd502d489a 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -8929,6 +8929,43 @@ static int mov_read_ispe(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_auxc(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + AVBPrint bp; + int64_t size = atom.size; + char *aux_type; + int ret; + + avio_r8(pb); /* version */ + avio_rb24(pb); /* flags */ + size -= 4; + + av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED); + ret = ff_read_string_to_bprint_overwrite(pb, &bp, size); + if (ret < 0) { + av_bprint_finalize(&bp, NULL); + return ret; + } + + size -= ret + 1; + if (size > 0) + avio_skip(pb, size); + + if (ret) + av_bprint_finalize(&bp, &aux_type); + + av_log(c->fc, AV_LOG_TRACE, "auxC: aux_type %s\n", aux_type); + + for (int i = 0; i < c->nb_heif_item; i++) { + if (c->heif_item[i].item_id == c->cur_item_id) { + c->heif_item[i].aux_type = aux_type; + break; + } + } + + return 0; +} + static int mov_read_iprp(MOVContext *c, AVIOContext *pb, MOVAtom atom) { typedef struct MOVAtoms { @@ -9157,6 +9194,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('i','s','p','e'), mov_read_ispe }, { MKTAG('i','p','r','p'), mov_read_iprp }, { MKTAG('i','i','n','f'), mov_read_iinf }, +{ MKTAG('a','u','x','C'), mov_read_auxc }, { MKTAG('a','m','v','e'), mov_read_amve }, /* ambient viewing environment box */ { MKTAG('l','h','v','C'), mov_read_lhvc }, { MKTAG('l','v','c','C'), mov_read_glbl }, @@ -9677,8 +9715,10 @@ static int mov_read_close(AVFormatContext *s) av_freep(&mov->aes_decrypt); av_freep(&mov->chapter_tracks); - for (i = 0; i < mov->nb_heif_item; i++) + for (i = 0; i < mov->nb_heif_item; i++) { av_freep(&mov->heif_item[i].name); + av_freep(&mov->heif_item[i].aux_type); + } av_freep(&mov->heif_item); for (i = 0; i < mov->nb_heif_grid; i++) { av_freep(&mov->heif_grid[i].tile_id_list); @@ -10149,6 +10189,11 @@ static int mov_read_header(AVFormatContext *s) if (item->item_id == mov->primary_item_id) st->disposition |= AV_DISPOSITION_DEFAULT; + if (item->aux_type && + !memcmp(item->aux_type, "urn:com:apple:photo:2020:aux:hdrgainmap", + strlen(item->aux_type))) + st->disposition |= (AV_DISPOSITION_GAINMAP | AV_DISPOSITION_DEPENDENT); + mov_build_index(mov, st); } From patchwork Wed Sep 25 22:52:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 51855 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b66f:0:b0:48e:c0f8:d0de with SMTP id o15csp107415vqw; Wed, 25 Sep 2024 20:39:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWnJpP4OhNUSYogytQFz/h2necgUnJ1qGLmF4TusEqPkiKRF7DyPw2JjPiNzStlqxeO8cCrs+2cokEmziIWb3vP@gmail.com X-Google-Smtp-Source: AGHT+IHgHuaG1zZ4Dri/JCW5ORSGIHO33QStWnxZA0xpAFDxI8a9vjom1Xii0qpanuCBSh9DKz5Y X-Received: by 2002:a17:907:3f26:b0:a8d:481a:563a with SMTP id a640c23a62f3a-a93b165ddd5mr158924866b.25.1727321959601; Wed, 25 Sep 2024 20:39:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727321959; cv=none; d=google.com; s=arc-20240605; b=iNY1YcleABGBuKURsau+muHhs1khuWujrfIv8Yd2dj2C2XZANYZrVpPzorfzMjuGL3 VT9A0wnPcpfplNdTWq4Tpx4ztcM/NUTMV4brqycuLUcXzUxEq2aAZt2kjduPYdZpJkRG ZAzrCZ4kFV6faaOhcz1uG3m3wRP80hSFsFzeidPNtyFX19GLnitudqXQO9LEXa5Blhdy v05h40cQyY7X6Yg95Psxor4muLsZJcMxuL5gQ6VH25NQBNA5tKYML84r0yUsoQoj2S5G ZduFXS4bMYPSryhLar0l9f8HCBeHRFej240j59EHJ+7W5ybgtSxvxi/k+ETvrZe7KrSN xw7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=6f08AfIZm/jCFFP9URqj3f8Hp2T7g1CNJ6G/w0VumP4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=h/7uZM2R9uibE6qWvZAXRbUAvg8QuU2tOgyfAekvrlYEhl6GRt0is2XQc24A8eDk9x i663UjQxowILWeBkg+kDdrU57/b3Y0NCsYfLJrxnj5XyN1rQxFgyNaXmrAYNbXMpiuF0 TgKVb/YOkduRrLEqoAzUHzu6EgTHui6MNrQMDJk6r6QJ+r4lmODWgTNZypcDykjoNAtx 9pZ0TLbuTTrmATvXAS2fjrbU0X/zNJsLPW3bQtITdkeV65fh3inhNYpYSrNDKbcF890C AicEcfUZB/MBHtosqB+rObSt65bhzESYRvtsbakiwh9LNwD3C6NRjNKTt58Rg91znYt3 AG5A==; 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=gg4EfAlj; 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; dara=fail header.i=@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-a939315babdsi346067466b.966.2024.09.25.20.39.19; Wed, 25 Sep 2024 20:39:19 -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=gg4EfAlj; 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; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1966B68DB2B; Thu, 26 Sep 2024 01:52:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ua1-f47.google.com (mail-ua1-f47.google.com [209.85.222.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A608368DB2B for ; Thu, 26 Sep 2024 01:52:18 +0300 (EEST) Received: by mail-ua1-f47.google.com with SMTP id a1e0cc1a2514c-84e8ca005caso222263241.1 for ; Wed, 25 Sep 2024 15:52:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727304736; x=1727909536; 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=GY9W73S1WpPYe4IklXrFPwQ6nW/nv5XIA9DU6R0x+dk=; b=gg4EfAljaW91r9qiAM2dA8hWNY4jrXWrEkNy6urs8YRK36Nc4NEvi5wqFwmNNhhhLi z2Y4ncKIuzDIYzkBXzsnHJwU0e2/Y49VZLK5C8CtDzYQTXMI6lmSCuXDsW4LMCBkDR9Q Uca3e1jSMtnFyRVzVL1A4umMk8TnsjUqFzHX0V3ZdITHbl/3woL2wWnp8GEXpa/NQ9Pz QkrOF52K4n2q433xMkyshs2EkPRAdxkSUgtD3oxYmkDXUed8+wD+jJD+zgle5eAfFIAA DzaRI9vRqcPdkxmRTmnNomGHZw+Myvcx2NWqRqS6wJv2uQj+EoUA6VFkPf3dAVlTde67 E9Eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727304736; x=1727909536; 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=GY9W73S1WpPYe4IklXrFPwQ6nW/nv5XIA9DU6R0x+dk=; b=X0FfS9zFMsnyqr6CMw/MuNjKYPhBoWLPE8Nor1upmZZoe9Sju3LhgaOmDWWjhgfjRQ sGCxVFdJBC3wsi0OOoRsjTzCO82B42Y7KHC8LUKTTO6AQxvdrV/CLSLhGMBOHyWvpbNb 1Hgz3/eufvT7YjTPRNiMHrplrgvlQKT2IY/vrkTnHayT33J1araNA/5j+PxkJ86E8FS5 HxgEHBUxwxfEjdAu+l9utm0bheC7wR+TUoChQ6FPDGHVyYPmbzt3JDcp3RxnmeNOlKo2 QESWVEydegkGs14oZ1CAH4G1rgLneyWdnF6S8WOAedZN9l0QROsWvnyVdBVsKyn7f4wX aHCg== X-Gm-Message-State: AOJu0YwG0YGR/FADDtMb2zz/gfzP/tlYhtQGzZy8JMqq+Lzx2H/ze5rT OSlEVkWgbJIml7ZZkHnW0HgXGL7M0cc/4+CMSFH0If5ZK5TGniV+XEyuRQ== X-Received: by 2002:a05:6102:2910:b0:49c:455:8c69 with SMTP id ada2fe7eead31-4a1771ed348mr1529943137.6.1727304736260; Wed, 25 Sep 2024 15:52:16 -0700 (PDT) Received: from localhost.localdomain ([181.92.233.116]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4a1517c0e44sm2848945137.16.2024.09.25.15.52.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Sep 2024 15:52:15 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Sep 2024 19:52:18 -0300 Message-ID: <20240925225219.3060-3-jamrial@gmail.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240925225219.3060-1-jamrial@gmail.com> References: <20240925225219.3060-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] avformat/mov: add referenced thumbnail streams to tile stream groups 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: F6F1ofv9gr2h Signed-off-by: James Almer --- libavformat/dump.c | 9 ++++-- libavformat/isom.h | 3 +- libavformat/mov.c | 71 +++++++++++++++++++++++++++++++++++----------- 3 files changed, 64 insertions(+), 19 deletions(-) diff --git a/libavformat/dump.c b/libavformat/dump.c index 5178f19685..ba30b92aaf 100644 --- a/libavformat/dump.c +++ b/libavformat/dump.c @@ -784,11 +784,16 @@ static void dump_stream_group(const AVFormatContext *ic, uint8_t *printed, dump_disposition(stg->disposition, AV_LOG_INFO); av_log(NULL, AV_LOG_INFO, "\n"); dump_metadata(NULL, stg->metadata, " ", AV_LOG_INFO); - for (int i = 0; i < stg->nb_streams; i++) { - const AVStream *st = stg->streams[i]; + for (int i = 0; i < tile_grid->nb_tiles; i++) { + const AVStream *st = stg->streams[tile_grid->offsets[i].idx]; dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE); printed[st->index] = 1; } + for (int i = 0; i < stg->nb_streams; i++) { + const AVStream *st = stg->streams[i]; + if (!printed[st->index]) + dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE); + } break; } case AV_STREAM_GROUP_PARAMS_LCEVC: { diff --git a/libavformat/isom.h b/libavformat/isom.h index 5076bc5da7..1cf69ed042 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -279,6 +279,8 @@ typedef struct HEIFItem { AVStream *st; char *name; int item_id; + struct HEIFItem **ref_item_list; + int nb_ref_item_list; int64_t extent_length; int64_t extent_offset; int width; @@ -360,7 +362,6 @@ typedef struct MOVContext { int nb_heif_item; HEIFGrid *heif_grid; int nb_heif_grid; - int thmb_item_id; int64_t idat_offset; int interleaved_read; } MOVContext; diff --git a/libavformat/mov.c b/libavformat/mov.c index bd502d489a..8a257ba535 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -8844,23 +8844,55 @@ static int mov_read_iref_dimg(MOVContext *c, AVIOContext *pb, int version) return 0; } +static int mov_add_ref_to_item(MOVContext *c, AVIOContext *pb, int version, + HEIFItem *from_item) +{ + HEIFItem **ref_item_list, *to_item = NULL; + int to_item_id = version ? avio_rb32(pb) : avio_rb16(pb); + + for (int j = 0; j < c->nb_heif_item; j++) { + if (c->heif_item[j].item_id != to_item_id) + continue; + to_item = &c->heif_item[j]; + } + if (!to_item) { + av_log(c->fc, AV_LOG_ERROR, "thmb in iref references a non-existent item\n"); + return AVERROR_INVALIDDATA; + } + + ref_item_list = av_realloc_array(to_item->ref_item_list, to_item->nb_ref_item_list + 1U, + sizeof(*to_item->ref_item_list)); + if (!ref_item_list) + return AVERROR(ENOMEM); + to_item->ref_item_list = ref_item_list; + to_item->ref_item_list[to_item->nb_ref_item_list++] = from_item; + + return 0; +} + static int mov_read_iref_thmb(MOVContext *c, AVIOContext *pb, int version) { + HEIFItem *from_item = NULL; int entries; - int to_item_id, from_item_id = version ? avio_rb32(pb) : avio_rb16(pb); + int from_item_id = version ? avio_rb32(pb) : avio_rb16(pb); - entries = avio_rb16(pb); - if (entries > 1) { - avpriv_request_sample(c->fc, "thmb in iref referencing several items"); - return AVERROR_PATCHWELCOME; + for (int i = 0; i < c->nb_heif_item; i++) { + if (c->heif_item[i].item_id != from_item_id) + continue; + from_item = &c->heif_item[i]; + } + if (!from_item) { + av_log(c->fc, AV_LOG_ERROR, "thmb in iref references a non-existent item\n"); + return AVERROR_INVALIDDATA; } - /* 'to' item ids */ - to_item_id = version ? avio_rb32(pb) : avio_rb16(pb); - - if (to_item_id != c->primary_item_id) - return 0; - c->thmb_item_id = from_item_id; + entries = avio_rb16(pb); + /* 'to' item ids */ + for (int i = 0; i < entries; i++) { + int ret = mov_add_ref_to_item(c, pb, version, from_item); + if (ret < 0) + return ret; + } av_log(c->fc, AV_LOG_TRACE, "thmb: from_item_id %d, entries %d\n", from_item_id, entries); @@ -9718,6 +9750,7 @@ static int mov_read_close(AVFormatContext *s) for (i = 0; i < mov->nb_heif_item; i++) { av_freep(&mov->heif_item[i].name); av_freep(&mov->heif_item[i].aux_type); + av_freep(&mov->heif_item[i].ref_item_list); } av_freep(&mov->heif_item); for (i = 0; i < mov->nb_heif_grid; i++) { @@ -10074,6 +10107,17 @@ static int mov_parse_tiles(AVFormatContext *s) if (!loop) continue; + for (int j = 0; j < grid->item->nb_ref_item_list; j++) { + AVStream *st = grid->item->ref_item_list[j]->st; + + if (!st) + continue; + + err = avformat_stream_group_add_stream(stg, st); + if (err < 0 && err != AVERROR(EEXIST)) + return err; + } + switch (grid->item->type) { case MKTAG('g','r','i','d'): err = read_image_grid(s, grid, tile_grid); @@ -10128,7 +10172,6 @@ static int mov_read_header(AVFormatContext *s) mov->fc = s; mov->trak_index = -1; - mov->thmb_item_id = -1; mov->primary_item_id = -1; mov->cur_item_id = -1; /* .mov and .mp4 aren't streamable anyway (only progressive download if moov is before mdat) */ @@ -10161,10 +10204,6 @@ static int mov_read_header(AVFormatContext *s) int64_t offset = 0; if (!item->st) { - if (item->item_id == mov->thmb_item_id) { - av_log(s, AV_LOG_ERROR, "HEIF thumbnail doesn't reference a stream\n"); - return AVERROR_INVALIDDATA; - } continue; } if (item->is_idat_relative) { From patchwork Wed Sep 25 22:52:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 51858 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b66f:0:b0:48e:c0f8:d0de with SMTP id o15csp346584vqw; Thu, 26 Sep 2024 05:59:22 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWgbxGnUURNWMBLwJO+lS09Z3/vZ5eMrr70g+7Iw5C5MkiN/giu2+d106ZBCgwV6kbTHFRnJgXT4re+l5CkPeHJ@gmail.com X-Google-Smtp-Source: AGHT+IEQ7qRp54Eo99qveXCGT+RNFkHB4KOjZgKKNIt94YpITDF85kvHUZKADrGb+I9wZiL4tPom X-Received: by 2002:a05:6512:3b92:b0:535:6a83:86f9 with SMTP id 2adb3069b0e04-538804c7028mr3547540e87.60.1727355562371; Thu, 26 Sep 2024 05:59:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727355562; cv=none; d=google.com; s=arc-20240605; b=UCQVeGz0gLeRH8+AocBEqzr/yEqFpOcw8E25VI3mz/1nz0OfUKOInM67iHKaRdfR9z qQsmTqvnP5IXjydEggBjV4/K3Bdkoy7E9+79rwdrGeKZIIY2xU/YrhJxlkenz0xOGSr4 eQD+5oUjVZtGWKNCrw97REPWKt4xG/++oqcaEF7Q+e9aXHgEaA6qLuWTdSHlvFx1ZxRp rLhkNVQgTpPzFrZ4Dx27W/dR4gwqP8MQykUVUAfM9QUzAuN5GPJSeMM96txTIdbsPPsB WWXk2BHN3lI6eqD8l1+yltu6ivDHWZQ/rtO/DS3jOUBhQ0MsKauXhw26m/Oi343S61JU 017A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=6Gob0wLgd6AwmfMMYgqjS5dAutWrrLFDKZRTimNBv3I=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=JDST+5iixmVX4FTnCW4LHjKSb5qiC+7a9O7MFVhdox3BE0eacqgMdjOrCVQsWzddnr PmeTvAU5MhtzwnzAmceTHwVw2JKRi75xTi1lAGWS6XI2VZcWYMbl38KHsGbqWm/7yekF z3FfUvu+yTS5G7QlRWTYbRKGTkfbpqst26MlcvdbX+Sd+LC4/f47hk/G+MLwVrYoJKc3 Ejovv2uT4Nw1Bv2tqZJNy4pS0jQ+ypnpr5mSIKpk+7p2F3Hrteoen5rt9xE2xb38Gd9w epJOLbPt9M4gfKYieOyJsuvByNJ+TSTaVd6oL1GYEYQAsc9S0IYjtqpjz/Dn/REvbJZZ xIpg==; 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=NWU+kJzB; 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; dara=fail header.i=@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-a93930be2b5si392652166b.405.2024.09.26.05.59.21; Thu, 26 Sep 2024 05:59:22 -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=NWU+kJzB; 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; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8B62E68DBC7; Thu, 26 Sep 2024 01:52:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ua1-f47.google.com (mail-ua1-f47.google.com [209.85.222.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 36D0968DB97 for ; Thu, 26 Sep 2024 01:52:21 +0300 (EEST) Received: by mail-ua1-f47.google.com with SMTP id a1e0cc1a2514c-846bc787856so105225241.0 for ; Wed, 25 Sep 2024 15:52:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727304739; x=1727909539; 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=XNORT+6w/dmNu/lfVpJ+L63fu6iS+y6Cj6vn/5fAUcA=; b=NWU+kJzBav0mXa/mryfa6eF/SzweIxO2sOlAvcXQae0KetvlXYMRkJwahaFumICK+U 6yp+yNUcgPCvdiW3D0Xuri2sKnoyOTE/S0stKDBSpbp2ampqyYGrC7xU55SjcvP3X1rk rUxBKsllJny5tYb4yMiSl2Zor6NIUyedyUZ1cpzXufM0mu6a+5iGijiAmQtMdUtOzUiw 3uPfBH7vLrxYmWMzBB3LtsRgpmTKRQNM1zJuNzDkGSv7I8y4QFAhv2bqNP7nb1jZV1Gn 6dhGtLhrJLCNNoJ1ErnOkX4bSCLhfjc6qMYaos9GuTWcv7QVGrT7JBStgGQRuWFNeJpp w5hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727304739; x=1727909539; 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=XNORT+6w/dmNu/lfVpJ+L63fu6iS+y6Cj6vn/5fAUcA=; b=n4lW2T/L1XVj5c0hG9bcyuiFhwBjgXtD6GYTOgTw8mJgS7NwCUFJgCQIouhm3/u2aT 8Vaj/q+sliXSiiCYC4GY0OJFzieJQ3ezmPmW7XxDd6amHJvfJ2wIMpd0lSQkOTLJhTl0 cxfdC9+0KKUL6HLBK3Nb6iSZj4/j/HWCKRoj8nHqLVQ7GxkUKUpV4/JKz6+RXOVCU4Lp 8sHaHY/WkT63hGKqy5Af323Tv42LWV/8EWVKkCkvDUVDyx6ecSxj1vqI+ciaRRR1jiIF jpJitTqpDI5fuAjNdNY3f6Qnotn3nY7plDAnbqisTqWxjzoB3aE6qAH8wijNFQQ2I9Qm A+yQ== X-Gm-Message-State: AOJu0YwgUPAiaBaAaixeFzmAQYjwxxKB0g839e2wSHUI13jHZL6JIZkf JNGKN4wFQ89vYrHGJnBOw8kJy9e1h/Ku43c/3i0BnVsjEEvUjiSrB1xB7g== X-Received: by 2002:a05:6102:4188:b0:498:cdb0:1d03 with SMTP id ada2fe7eead31-4a15dd245dcmr4772021137.23.1727304739019; Wed, 25 Sep 2024 15:52:19 -0700 (PDT) Received: from localhost.localdomain ([181.92.233.116]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4a1517c0e44sm2848945137.16.2024.09.25.15.52.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Sep 2024 15:52:17 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Sep 2024 19:52:19 -0300 Message-ID: <20240925225219.3060-4-jamrial@gmail.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240925225219.3060-1-jamrial@gmail.com> References: <20240925225219.3060-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/4] avformat/mov: support parsing auxl iref type 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: K9qOV0x+k8+o Signed-off-by: James Almer --- libavformat/mov.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 8a257ba535..f1274392f3 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -8844,8 +8844,8 @@ static int mov_read_iref_dimg(MOVContext *c, AVIOContext *pb, int version) return 0; } -static int mov_add_ref_to_item(MOVContext *c, AVIOContext *pb, int version, - HEIFItem *from_item) +static int mov_add_ref_to_item(MOVContext *c, AVIOContext *pb, uint32_t type, + int version, HEIFItem *from_item) { HEIFItem **ref_item_list, *to_item = NULL; int to_item_id = version ? avio_rb32(pb) : avio_rb16(pb); @@ -8856,7 +8856,8 @@ static int mov_add_ref_to_item(MOVContext *c, AVIOContext *pb, int version, to_item = &c->heif_item[j]; } if (!to_item) { - av_log(c->fc, AV_LOG_ERROR, "thmb in iref references a non-existent item\n"); + av_log(c->fc, AV_LOG_ERROR, "%s in iref references a non-existent item\n", + av_fourcc2str(type)); return AVERROR_INVALIDDATA; } @@ -8870,7 +8871,8 @@ static int mov_add_ref_to_item(MOVContext *c, AVIOContext *pb, int version, return 0; } -static int mov_read_iref_thmb(MOVContext *c, AVIOContext *pb, int version) +static int mov_read_iref_generic(MOVContext *c, AVIOContext *pb, uint32_t type, + int version) { HEIFItem *from_item = NULL; int entries; @@ -8882,20 +8884,21 @@ static int mov_read_iref_thmb(MOVContext *c, AVIOContext *pb, int version) from_item = &c->heif_item[i]; } if (!from_item) { - av_log(c->fc, AV_LOG_ERROR, "thmb in iref references a non-existent item\n"); + av_log(c->fc, AV_LOG_ERROR, "%s in iref references a non-existent item\n", + av_fourcc2str(type)); return AVERROR_INVALIDDATA; } entries = avio_rb16(pb); /* 'to' item ids */ for (int i = 0; i < entries; i++) { - int ret = mov_add_ref_to_item(c, pb, version, from_item); + int ret = mov_add_ref_to_item(c, pb, type, version, from_item); if (ret < 0) return ret; } - av_log(c->fc, AV_LOG_TRACE, "thmb: from_item_id %d, entries %d\n", - from_item_id, entries); + av_log(c->fc, AV_LOG_TRACE, "%s: from_item_id %d, entries %d\n", + av_fourcc2str(type), from_item_id, entries); return 0; } @@ -8924,8 +8927,9 @@ static int mov_read_iref(MOVContext *c, AVIOContext *pb, MOVAtom atom) case MKTAG('d','i','m','g'): mov_read_iref_dimg(c, pb, version); break; + case MKTAG('a','u','x','l'): case MKTAG('t','h','m','b'): - mov_read_iref_thmb(c, pb, version); + mov_read_iref_generic(c, pb, type, version); break; default: av_log(c->fc, AV_LOG_DEBUG, "Unknown iref type %s size %"PRIu32"\n",