From patchwork Sun Feb 4 11:16:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Stejerean X-Patchwork-Id: 46009 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:7b08:b0:19e:8a94:b663 with SMTP id s8csp173988pzh; Sun, 4 Feb 2024 03:17:13 -0800 (PST) X-Google-Smtp-Source: AGHT+IFvE4pIHbMqajPo0j8BWVXQZVUYUu6mC+a4kG5bA8qp2UHM2h3A2OQqrhM0fVGrTXi6XCSl X-Received: by 2002:a2e:7012:0:b0:2d0:a4c6:b523 with SMTP id l18-20020a2e7012000000b002d0a4c6b523mr880829ljc.45.1707045433466; Sun, 04 Feb 2024 03:17:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1707045433; cv=none; d=google.com; s=arc-20160816; b=bjIOguNSPMPJofKP7QTmu3cCb7cmFa6qnL2cmpN1yL0DVXfU67HLFLPU/Bt8/rlcXY vPOvYP65uLsG+R3fapD7llx36+C3UUYrQQb5klJx5lWbB6U1vZ9RPkAs8d87jJ3IAkw9 NocZ6s/vlkjiNnU2XyD5lqZezeAO4LOagrJZ8go9pcFClZLX4tjV4pLRZ7ZABMJ1y9HS F0UayVDuPaJ8dHIan3ebnyh88ZEfXj1WVW+Yib/Ay4BadDDCOGhjnH9y2xNpwggaFUPd mElMhE3FygyeVNqhMHwOmG2MA4v2zaVAqT3nM5Hprj/gNvnnPP+YTSyGPMZRjafLYWXl qhVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:feedback-id:message-id:thread-topic :thread-index:references:in-reply-to:mime-version:date:to :delivered-to; bh=IdPVVH3uuh8z7FMSmNcTixDm87zaQfGFtNC3OVAT7h0=; fh=QqeDQwJEZxX//ey+7X00KNJTtR7JhJroUK6PiHHiD54=; b=NEvMIyVHz3twJ+j2aeV/oI9adnIHgI+ywc7sB5Zgr8BgMqZaJhEKZ5h0P3CzBI3XfF UImjixQUwDlMp3x6XmiZ9yslwlcsydVm4maD+rW85wWamjRMOJ3MkvBxOfPd8Vd1iGhE g9Z/ESyJ145dQ8jrsbfDzJVOOlIreo+8DgdUn/PghxYZ5T1yA8UwwZCo0x4IPDhBX/my 2205B2YS6JzVlghmVN0l1AEGVRtoBivWDUEci+gHQv8vnrtiHIRrPWbEcyu0dUdEFvQ9 jMzl5hxVoIxizMIdkutqcLhryGrEUyo/XjJZYC+lod0wgd9jhDXxF/KNF0NvEww5qFMV qTdA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 X-Forwarded-Encrypted: i=0; AJvYcCUtTM/SNT3iyZb8anwNDLHHJw6vvP8MYii0U0IX0F7mCjp/3mvOgzZhKfS154Kh9k0fnRg+WQ0PxGS0G7VkTKcS690aqSTN5hzG2yLfowPZ9lUdp9qkYbFWvHjRe1/kG9auyU+8NqtfI1ZMmxivtoSh+e5XHO2mkrnfmzi4EKjJE8jN1C9FjQqIzDnb5bULmFEJjnS85JbwmjaN91dg8TcLMwedM4i85lyx+ZqhwgIJWCVAYi9cEvES5VuwUssCiKm2lqcK+blkCiUz1BkhgCGvfDZoQIR0eqKaKCvNgBM7RKZdMIWVy365GqQZ1yNWxkvDERzm8IQ+EkqIczDyqaW5Ps6h9H8QgCH6o2b2YPT2wJymUFKGvb3Xu8lpawhTD27zzsBdAdM5M2Cynlm9otVb9V1DpnyD/oCe0Gd72Zvcj0nQjVQvJ6J3ST5mXSd5gkbdagGqmy8aZeuiLn6WkNf0g52E55mXLhwY7WnCpxr1CVoym2t+ULYuRtqKCzWofyoJVD5g0fLNugNiP+KaR4HwZiqvt7YuAKyVf77+ikq+nlSgraKoTLQol+wAJVjxtVB9SOrKPGD5eo3VY7t7gm1KH3/GHCsXnVGUziETk1HnrM9A+Ruh+4gLnoo5bd4Cp1mbjw2zJ5lXcTUxd3aNnn0XvJ2eMdyh16gMkuYKbo4Jqsuer2+0U88eSsgXHEKbgOCy/vRmW8WoszNwy/q5adNWB6k/QhBpTkoAuNCR6OvuZwXtQNwaQ1SSaGIbIrHaPQIX9MKvUvtJMRg9i9EVYjMvKcvbgR5O9FBugTyYxZPey1syVdVLmyhrGbwSlhgyeqHWJ28gn3G6ZKrxzlBIZYI+z/DPUqYjOLYasYZJzC3/E0OqasF6RMLUMYvEgkm5E4hDRYfEm33xSKtY0B0pcclZUuIH9QEYAZPd5Gk5kB7IRJ/4iARl42pHMrlZdAaLVWw+zf 637k1AxZ9Y7qroCSO681Nmk4b+XrJYhPmnjmjNsbEXod3W3BIo9W+uNEa+15EXTZZ/jm4CitAKdiKE71DIFT1qTYzdyRs+pmJiFbSklWaS0MExKdmSZhg34JytTlZmRj4s9bJj8jTz2R/eTnRIlJfft46y5ApxTPwP9I5CaXj8DXjVGs6tndcJyF+u03b3Yz553hZIMnHbI/IMm7G28Hx42ug3Dh05vvVq9jT/bTTo9p0v7NY1h4IKnzH/2MQ4AXKUa8QFfFI1HmfnA+Nu/83SsXEIqtaNLL0YXMVdlqg1D+X/TbI9cOSSHKZsMO+QzPhVY0eTIzY+S+ssS57qyehOKnbknuocJH0fSgnEo52irwvWcYIk0OBDEl691nMXfrJ2TNHxgPX2sZtohAirspeYG9gONYyuhadtdGMibzTb2qQJyPeuKq1Lre7Ac6dHkKqjWkaRRr35+LuHh7j5ItHF//aGKV0wff9ObW4ynvl0WgovORag0l7/AI/qS9uIoWzfFlis5MOQSOnSngY0GoRgFMEbPDJJNWBcDs50SWEDu55B6HMrnyXzbLTgk7/7mkbtKcFNEq6bfQbIVYW81RmDZIQNgb1zsrIhzE6TGinnnTH/iMyntkXErPyI+4Bxiva6sWW20XidEZ4= Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id z8-20020a05640235c800b005597f92d6b4si2789270edc.325.2024.02.04.03.17.13; Sun, 04 Feb 2024 03:17:13 -0800 (PST) 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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BD42768D124; Sun, 4 Feb 2024 13:17:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a27-28.smtp-out.us-west-2.amazonses.com (a27-28.smtp-out.us-west-2.amazonses.com [54.240.27.28]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4360068D124 for ; Sun, 4 Feb 2024 13:16:56 +0200 (EET) To: =?utf-8?q?ffmpeg-devel=40ffmpeg=2Eorg?= Date: Sun, 4 Feb 2024 11:16:53 +0000 Mime-Version: 1.0 In-Reply-To: <20240204111648.76522-1-cosmin@cosmin.at> References: <20240204111648.76522-1-cosmin@cosmin.at> <20240204111648.76522-2-cosmin@cosmin.at> X-Mailer: Amazon WorkMail Thread-Index: AQHaV1umhAVS4Ql1QiKtkX3XbpMnvgAAAFD1 Thread-Topic: [PATCH v3 1/3] avcodec: add ambient viewing environment packet side data. X-Original-Mailer: git-send-email 2.42.1 X-Wm-Sent-Timestamp: 1707045412 Message-ID: <0101018d73d5e244-ce817aaf-1e13-4688-8c1b-c55869a78372-000000@us-west-2.amazonses.com> Feedback-ID: 1.us-west-2.An468LAV0jCjQDrDLvlZjeAthld7qrhZr+vow8irkvU=:AmazonSES X-SES-Outgoing: 2024.02.04-54.240.27.28 Subject: [FFmpeg-devel] [PATCH v3 1/3] avcodec: add ambient viewing environment packet 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: , X-Patchwork-Original-From: Cosmin Stejerean via ffmpeg-devel From: Cosmin Stejerean Reply-To: FFmpeg development discussions and patches Cc: =?utf-8?q?Cosmin_Stejerean?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2rGd6ZEh0kOx From: Damiano Galassi --- fftools/ffprobe.c | 3 +++ libavcodec/avpacket.c | 1 + libavcodec/decode.c | 1 + libavcodec/packet.h | 7 +++++++ 4 files changed, 12 insertions(+) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index f33e2471cb..aa1153e709 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -2392,6 +2392,9 @@ static void print_pkt_side_data(WriterContext *w, AVContentLightMetadata *metadata = (AVContentLightMetadata *)sd->data; print_int("max_content", metadata->MaxCLL); print_int("max_average", metadata->MaxFALL); + } else if (sd->type == AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT) { + print_ambient_viewing_environment( + w, (const AVAmbientViewingEnvironment *)sd->data); } else if (sd->type == AV_PKT_DATA_DYNAMIC_HDR10_PLUS) { AVDynamicHDRPlus *metadata = (AVDynamicHDRPlus *)sd->data; print_dynamic_hdr10_plus(w, metadata); diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 0f8c9b77ae..e118bbaad1 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -301,6 +301,7 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type) case AV_PKT_DATA_DOVI_CONF: return "DOVI configuration record"; case AV_PKT_DATA_S12M_TIMECODE: return "SMPTE ST 12-1:2014 timecode"; case AV_PKT_DATA_DYNAMIC_HDR10_PLUS: return "HDR10+ Dynamic Metadata (SMPTE 2094-40)"; + case AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT:return "Ambient viewing environment"; case AV_PKT_DATA_IAMF_MIX_GAIN_PARAM: return "IAMF Mix Gain Parameter Data"; case AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM: return "IAMF Demixing Info Parameter Data"; case AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM: return "IAMF Recon Gain Info Parameter Data"; diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 2cfb3fcf97..da6446d879 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -1434,6 +1434,7 @@ static const struct { { AV_PKT_DATA_CONTENT_LIGHT_LEVEL, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL }, { AV_PKT_DATA_ICC_PROFILE, AV_FRAME_DATA_ICC_PROFILE }, { AV_PKT_DATA_DYNAMIC_HDR10_PLUS, AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, + { AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT,AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT }, }; int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, diff --git a/libavcodec/packet.h b/libavcodec/packet.h index 2c57d262c6..215b1c9970 100644 --- a/libavcodec/packet.h +++ b/libavcodec/packet.h @@ -299,6 +299,13 @@ enum AVPacketSideDataType { */ AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + /** + * Ambient viewing environment metadata, as defined by H.274.. This metadata + * should be associated with a video stream and contains data in the form + * of the AVAmbientViewingEnvironment struct. + */ + AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT, + /** * IAMF Mix Gain Parameter Data associated with the audio frame. This metadata * is in the form of the AVIAMFParamDefinition struct and contains information From patchwork Sun Feb 4 11:16:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Stejerean X-Patchwork-Id: 46011 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:7b08:b0:19e:8a94:b663 with SMTP id s8csp174193pzh; Sun, 4 Feb 2024 03:17:50 -0800 (PST) X-Google-Smtp-Source: AGHT+IGAeFQ7QbPYHSbXLWKMa8P4EZ2pG6xCvgHmNVX/s/r5FYHg29kJBe+0+2Nzumi7PkIqbGiE X-Received: by 2002:a17:907:78d9:b0:a37:7fd:9a18 with SMTP id kv25-20020a17090778d900b00a3707fd9a18mr4811432ejc.10.1707045470427; Sun, 04 Feb 2024 03:17:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1707045470; cv=none; d=google.com; s=arc-20160816; b=aM0CW5xd7xcK0Y5lE50fTNJNzxhbd4uGUtx4LpoaOixzeSnCR6Kg69UFypXGMUNRT/ XCJ8dIAQ8He7wiEJ9/4aY1kZr1uyYJvUVlRliljzqjtYu1nhPOEl2xnMVkyygkqDebl1 H0E3hS5rzEag0j5CE+0B/i3fseD95t3arkJKWuuyN+fzQy6ZdO+ac83SyVeVLKo4pt8Z yFTGLnng3may37xL3DFFpipuraNV0B81UW3AbQoANZx2QJ3vgzTwMkKcQbGpqgN4n3wD 7TJhXiWxQKaa7mGpjlC/GRWvYAVFIpeX9RZdXA3K6e6lpNPywqooHO+M1TU1oonFMcAK fm1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:feedback-id:message-id:thread-topic :thread-index:references:in-reply-to:mime-version:date:to :delivered-to; bh=ztA4OttJA++GVVT1oRAgHqg6BoMLjnpi9p8x8BJAeMA=; fh=J5eG7wY/YzWJqC7LPMUSJzqRSMxYX5aFj2RM6J4JxbA=; b=FHdpmNKLjQH7oa3GjoVSMp/gwv8YR6fQTXYUbQM3WpIW81MzedEW6bspYC5PTV/dbi SHWp6z7fMaCp78mq10iq8WU3jXL6Xl/GFx8ikUkDfnM/pkEhrByXnD3MVRNmDBu9Bv1/ 2CZvjWfUfHFnZjZzNE5GKTs0p/SBptrBi89OI5TQ/ORXB8Ys8K5Om5hszdd3ULWzq/0B 7vqMyr8d84KmzM7zulox1xlAunrJLe7rT4B3o2142WTrcAv4oSEE8p8Te4KK65Te3dIi 2RCREgvB63Sh7rBkbX1lP+Q/+0p7sAORvrm1krToy88fxz/1SqVa9nSMBnZ545xcQFZd PaxA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 X-Forwarded-Encrypted: i=0; AJvYcCUAC+YBgsH0UFd8B6AenXIUYrTgHUWYo62IvbK2DtgEvn7hEAdvScRiiwm+4B2PRQYF0BAndk+jt8rOkAnG7EfYr5VeJSVNyRt44Pa3ex4QzMtttKKYrAt2wcSYIuUXJTBFKo1/g/gH3Q27sJ/GlHmXpHQF4bJvEGErWifaC2u/Vf+RIyJR3QDpZhIzyAcPqJkysl3y6Gqn7DlERqX6zGou+70QZbWbOpXg+xURJVe/4Ub7ZbGRipsa2TAKXyzMjdrX3g6H1yeiAEXL540RDjwyQXR/1D75+W5nsaQvi0dpjtUPNAQqCUwafkYl3U1ct57x55/QGjnMc4E+Z2P0FKUE/aSIhkOuWKnDb2j7XfDOm8ILQ52GYs1DBCIQZDSyebIqb86b9hQV3ph63mbLrjlP2Cdvjl1Qn6XVOo1WpYCwfmiK4yjY1xefyXmuVhIrRnnLHYr6v8ct6YX3r6B7ZBUh9s3mTJqypqPeqEJicu7fSiA4/xvanHfSynNhvT5PhumsIgl+Z3HIDeMfslBp+Stqm5vVOVYlyHsrZ1HmWg5JjHzs4NTmM5NJoMiSS9LMcUfSL3Re7eabY0LRkj00fSX9vQSgTEuQxqB9apagmXJ01nB5Sgdk+YKBx3IBxW0AxcjBdAEYKapf+9H8lfCe/enC1OYZ+pkvaT7UNH7CT8xgtRSD1gSRsYARqojQlAWncy26GqjGeZqsOyUK4d74IVkk84AAnfj3+K80qxxrZtoOz720WB2ru15e4Bbi1odtiVipbG54mRU8flz0bQn66uWlxQkVM1xT1UrLORsrIM8Yi1+BQuN4oE9YYDWVX5QdPp0rx56c3DmB1GvDXqat5e9sE1F6bgGQ9i1+e7Go6WvAlT7gVqZxkWTgD6KCsJICzpvLc2xfleRwQa+goUY7aYdZ6oYsANS2Wpw1u02Gb0wnsUH4vVZegjJG1oZQ0imIu4dQ+u SXvhTFqfwe84AO0Yw3EVLBs3tsKrYy0Ya33ul7cQYpS6WfH5qW6vfTgbtaZWIG8Kcxgm1hTIIftuWF5SNsecVhJFc0u2M7CzoAxmRZ4+m0YYAY4eX0f9uA0EM5UptkkUPuaDyf0zOovGQtB1k4p85RFljjNvZm4/y0U4Gs+nylz4/Um98Adt8CKJ2JWhuOKMpHTCkwYej2uc2lQLz8jz507a2dQZlnikZ8W8GfNNtTLOlBwT99AUXnm9mhHNZ5yhcvHXP1eUsA0/QurRgu3raig+ff61hPwGAgZSdfg9aUiFmvI3dhvpOLEcz/tl36wDDaLxA2vkHOGyMcyu0zjP8RL6085ydIlbUAUfb9E4i/mqDqmWnyTtMFqYJgSMVZj0YADlH9SseCk6b66GNjaVQqfjUe+HzYpd5skDGYV2uXW0K6je7iMKDKaJWjB6vMPO5pdOS6h8CcfiiXXxqxvQyBNU851fR4OO5n8BwjYqWIqaH7eHtpbKxv+g9WdMhz/lPDncLaWd20ybkW6TSRZo5GSFN0E5tHqcqmO+ZqYuJO9D6+u9FipHd6yHverjMGZHzzfEJFyPWOAMp06EHwjfxY2iy+llcMYxATkEPTDbzz Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j14-20020a170906830e00b00a368b89d19asi2761006ejx.315.2024.02.04.03.17.20; Sun, 04 Feb 2024 03:17:50 -0800 (PST) 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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9A59768D174; Sun, 4 Feb 2024 13:17:05 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a27-228.smtp-out.us-west-2.amazonses.com (a27-228.smtp-out.us-west-2.amazonses.com [54.240.27.228]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2653468D0B4 for ; Sun, 4 Feb 2024 13:16:57 +0200 (EET) To: =?utf-8?q?ffmpeg-devel=40ffmpeg=2Eorg?= Date: Sun, 4 Feb 2024 11:16:54 +0000 Mime-Version: 1.0 In-Reply-To: <20240204111648.76522-1-cosmin@cosmin.at> References: <20240204111648.76522-1-cosmin@cosmin.at> <20240204111648.76522-3-cosmin@cosmin.at> X-Mailer: Amazon WorkMail Thread-Index: AQHaV1umhAVS4Ql1QiKtkX3XbpMnvgAAAH+S Thread-Topic: [PATCH v3 2/3] avformat/mov: add support for 'amve' ambient viewing environment box. As defined in ISOBMFF (ISO/IEC 14496-12) document. X-Original-Mailer: git-send-email 2.42.1 X-Wm-Sent-Timestamp: 1707045413 Message-ID: <0101018d73d5e685-207b272c-3016-4e33-8be9-eb8af0469e93-000000@us-west-2.amazonses.com> Feedback-ID: 1.us-west-2.An468LAV0jCjQDrDLvlZjeAthld7qrhZr+vow8irkvU=:AmazonSES X-SES-Outgoing: 2024.02.04-54.240.27.228 Subject: [FFmpeg-devel] [PATCH v3 2/3] avformat/mov: add support for 'amve' ambient viewing environment box. As defined in ISOBMFF (ISO/IEC 14496-12) document. 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: , X-Patchwork-Original-From: Cosmin Stejerean via ffmpeg-devel From: Cosmin Stejerean Reply-To: FFmpeg development discussions and patches Cc: =?utf-8?q?Cosmin_Stejerean?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 62f3Z7d5rcOJ From: Damiano Galassi Co-Authored-By: Cosmin Stejerean --- libavformat/dump.c | 15 +++++++++++++++ libavformat/isom.h | 3 +++ libavformat/mov.c | 35 +++++++++++++++++++++++++++++++++++ libavformat/movenc.c | 30 ++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+) diff --git a/libavformat/dump.c b/libavformat/dump.c index aff51b43f6..add38914f2 100644 --- a/libavformat/dump.c +++ b/libavformat/dump.c @@ -28,6 +28,7 @@ #include "libavutil/intreadwrite.h" #include "libavutil/log.h" #include "libavutil/mastering_display_metadata.h" +#include "libavutil/ambient_viewing_environment.h" #include "libavutil/dovi_meta.h" #include "libavutil/mathematics.h" #include "libavutil/opt.h" @@ -379,6 +380,17 @@ static void dump_content_light_metadata(void *ctx, const AVPacketSideData *sd, metadata->MaxCLL, metadata->MaxFALL); } +static void dump_ambient_viewing_environment_metadata(void *ctx, const AVPacketSideData *sd) +{ + const AVAmbientViewingEnvironment *ambient = + (const AVAmbientViewingEnvironment *)sd->data; + av_log(ctx, AV_LOG_INFO, "Ambient Viewing Environment, " + "ambient_illuminance=%f, ambient_light_x=%f, ambient_light_y=%f", + av_q2d(ambient->ambient_illuminance), + av_q2d(ambient->ambient_light_x), + av_q2d(ambient->ambient_light_y)); +} + static void dump_spherical(void *ctx, const AVCodecParameters *par, const AVPacketSideData *sd, int log_level) { @@ -513,6 +525,9 @@ static void dump_sidedata(void *ctx, const AVStream *st, const char *indent, av_log(ctx, log_level, "SMPTE ST 12-1:2014: "); dump_s12m_timecode(ctx, st, sd, log_level); break; + case AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT: + dump_ambient_viewing_environment_metadata(ctx, sd); + break; default: av_log(ctx, log_level, "unknown side data type %d " "(%"SIZE_SPECIFIER" bytes)", sd->type, sd->size); diff --git a/libavformat/isom.h b/libavformat/isom.h index 77221d06e4..a4cca4c798 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -29,6 +29,7 @@ #include "libavutil/encryption_info.h" #include "libavutil/mastering_display_metadata.h" +#include "libavutil/ambient_viewing_environment.h" #include "libavutil/spherical.h" #include "libavutil/stereo3d.h" @@ -249,6 +250,8 @@ typedef struct MOVStreamContext { AVMasteringDisplayMetadata *mastering; AVContentLightMetadata *coll; size_t coll_size; + AVAmbientViewingEnvironment *ambient; + size_t ambient_size; uint32_t format; diff --git a/libavformat/mov.c b/libavformat/mov.c index 5fae777adb..42b0135987 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -6039,6 +6039,31 @@ static int mov_read_clli(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_amve(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + MOVStreamContext *sc; + const int illuminance_den = 10000; + const int ambient_den = 50000; + if (c->fc->nb_streams < 1) + return AVERROR_INVALIDDATA; + sc = c->fc->streams[c->fc->nb_streams - 1]->priv_data; + if (atom.size < 6) { + av_log(c->fc, AV_LOG_ERROR, "Empty Ambient Viewing Environment Info box\n"); + return AVERROR_INVALIDDATA; + } + if (sc->ambient){ + av_log(c->fc, AV_LOG_WARNING, "Ignoring duplicate AMVE\n"); + return 0; + } + sc->ambient = av_ambient_viewing_environment_alloc(&sc->ambient_size); + if (!sc->ambient) + return AVERROR(ENOMEM); + sc->ambient->ambient_illuminance = av_make_q(avio_rb32(pb), illuminance_den); + sc->ambient->ambient_light_x = av_make_q(avio_rb16(pb), ambient_den); + sc->ambient->ambient_light_y = av_make_q(avio_rb16(pb), ambient_den); + return 0; +} + static int mov_read_st3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; @@ -8215,6 +8240,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','m','v','e'), mov_read_amve }, /* ambient viewing environment box */ { 0, NULL } }; @@ -8680,6 +8706,7 @@ static void mov_free_stream_context(AVFormatContext *s, AVStream *st) av_freep(&sc->spherical); av_freep(&sc->mastering); av_freep(&sc->coll); + av_freep(&sc->ambient); } static int mov_read_close(AVFormatContext *s) @@ -9072,6 +9099,14 @@ static int mov_read_header(AVFormatContext *s) sc->coll = NULL; } + if (sc->ambient) { + if (!av_packet_side_data_add(&st->codecpar->coded_side_data, &st->codecpar->nb_coded_side_data, + AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT, + (uint8_t *) sc->ambient, sc->ambient_size, 0)) + return AVERROR(ENOMEM); + + sc->ambient = NULL; + } break; } } diff --git a/libavformat/movenc.c b/libavformat/movenc.c index b724bd5ebc..c2410e01ce 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -2244,6 +2244,35 @@ static int mov_write_mdcv_tag(AVIOContext *pb, MOVTrack *track) return 32; } +static int mov_write_amve_tag(AVIOContext *pb, MOVTrack *track) +{ + const int illuminance_den = 10000; + const int ambient_den = 50000; + const AVPacketSideData *side_data; + const AVAmbientViewingEnvironment *ambient; + + + side_data = av_packet_side_data_get(track->st->codecpar->coded_side_data, + track->st->codecpar->nb_coded_side_data, + AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT); + + if (!side_data || !side_data->data) { + return 0; + } + + ambient = (const AVAmbientViewingEnvironment*)side_data->data; + if (!ambient || !ambient->ambient_illuminance.num) { + return 0; + } + + avio_wb32(pb, 16); // size + ffio_wfourcc(pb, "amve"); + avio_wb32(pb, rescale_mdcv(ambient->ambient_illuminance, illuminance_den)); + avio_wb16(pb, rescale_mdcv(ambient->ambient_light_x, ambient_den)); + avio_wb16(pb, rescale_mdcv(ambient->ambient_light_y, ambient_den)); + return 16; +} + static void find_compressor(char * compressor_name, int len, MOVTrack *track) { AVDictionaryEntry *encoder; @@ -2457,6 +2486,7 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex if (track->mode == MODE_MOV || track->mode == MODE_MP4) { mov_write_clli_tag(pb, track); mov_write_mdcv_tag(pb, track); + mov_write_amve_tag(pb, track); } if (track->mode == MODE_MP4 && mov->fc->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) { From patchwork Sun Feb 4 11:16:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Stejerean X-Patchwork-Id: 46010 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:7b08:b0:19e:8a94:b663 with SMTP id s8csp174073pzh; Sun, 4 Feb 2024 03:17:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IG0VkTpNAu+DwmCsvvLgsuAU//x0T7uheLcf3OgRXmZ7QuTi6Un6OqzXx++a6JQazXXmMQq X-Received: by 2002:a17:906:f1d6:b0:a36:f345:22ed with SMTP id gx22-20020a170906f1d600b00a36f34522edmr5071126ejb.11.1707045448597; Sun, 04 Feb 2024 03:17:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1707045448; cv=none; d=google.com; s=arc-20160816; b=QGcx9wYGoLa/CWJwqdQu+6l3YnqX6IfQWYM5FBCLhF1BQePxOmxg42h7s8zm1Zwms4 pxl5NO0TGL4dvCJHg/m9i9BTe1h7gpcrazE1Koc31U5v8Cm4Tv8/AvaVgGug/mzTiBl4 2aA3SlqVnir68iuybTb5pRSNE3hiRCgUW5hU699ClebxToYtiW5lOZy/g0itbuuAnIa7 tQA0XqAQ/35fUOMR0r0FRPr1M0bpdjY0QrbHON+BmyWVC/JjzVM0DAKE9lLimrNENBo2 woIxk8d0TGpvbVgFxx0b15sffDaj0zKkntASHZ5569X+tJjcVLkY2IV96XKMp2JMNcrK Excg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:feedback-id:message-id:thread-topic :thread-index:references:in-reply-to:mime-version:date:to :delivered-to; bh=GQ972a7DMRqUZ/MIvWIvq3ogmMV0fUxMz/MB4HWxGPs=; fh=6TAAIJSrxu/KiYAcEjAOjO9qHNxsMQtSXqwtvZ6q8OI=; b=YzVZeb3eo4ZSWj4QSn+nH2aJaRLYYM37HfbdLni5fsqd/IkXTVOIuuGwZim9DNACPx A8MO6S5cjU+jTVrTXDy2uIQPTNJFmNTfn6zixf6pTmdHeePEs+9va7LnhLxJv/q6o7j1 JylwHwWiFL7QPHnod228wMQ4a0S9+qW52WIo1b7oqFJSLvdQPI4cvGguQwD6QFum61yp Up6h0mqP80YoBsMYSql/YS7iwNhTLQMiKj9BqoB9xBJCVpIucV6imHoKDGxy8FljGlXF 8lS1ch3ma0z149Kcth22i6M5qWbMRBdZw4mxbSzSzkpXxlXFBuQ8tN/6Hk+GFbmjaGQA wnhA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 X-Forwarded-Encrypted: i=0; AJvYcCX3C0GAKYs/2AfbWOeW7C+7azscy/BTlJZaD/KTrFdxyYQIXAz13GDTdn1xWQqZzpJAEdvISkF2AMhrUEMwx7ZTqTnEcu1lZqREFOZ1s191hwU2ekST7qrAsRT+S8hx/G13IqoJFx4lPHYRAxiLej5hkgYhaKFcDZPJ4KOC2A+DhVwiLEV0sufCf45wvuBdK+0Uvxt35j436VEvLePpLc8/ZKQMsgN1km6CSeVgXOpzo1lMLepfEnRPlbJehd//t3+UXpb7oesMnd5aoqbK2V8WA5VqVE+fx8ly1BPe2UiBRt8qdsAYb2XSw+WPZy2twdAfngr59QErQz8d6noVcP/M67Wd0Eot+TFXr5zHbFQX8M1eYFcTlgGfS8zUCmVRpX2SJbwBipB1D8X3XJqgz0nU0UI573YplD2c0QGnrj3X7mOffTfUQodBlhcsEeN3TGF/gxBolC8mXIn30w5tyAbxLzlUr7UWMeKNUtP4nSXL5CXZ8wtkf6re+xilcol4FqF7+stfOAXEg4Hq/Zv6G9BgsP+auh+hDzg4cJ2BWNnjbd8pVhBsicM9vzqD+K4OO8lrBop5wo/RmO7vuZRNuTB25Szk0MJxjgdom5kk3IXaU2BXNMAZfssG3t/gQ8zAfp/qV1T5qj2Ac63rVTKjZWfLvOJ6o96zbvxgxn9aJr2O0p97J0XsXcWFAzvDSrbUpkPC7JbfJhRgqsm1Hu/jUy1iCdjY7s1nK9Of7ao5jeUv7TuTiPNWrSehav3pvSRaWr7qLPU5395KQDsVbSxLRKpvqkIdV5qWZnKDyfbPaG4GkXznQpPIPul3Vcq1umM/D2hoaNKDvqGuRWgMhqaFTtLhP251o5r7sSDDhx1Q7mkImz/3EZz6BjDkhar18K5pfkcYMukxolxD1K1l5gFCgt9JIvC4eIM78IS7wHwJCtTYRr/lDYZ5xspjzOX4jDQvA69yqx ai5Ahar/MqxF4Z4GhaE79i2Uxz/wjVllNJNshH4PjubvlxcXwUC6nIaiPr9yBThiUzVQfsoglR1ER35ikLn9TfSVHzABl1JLGN0bbwnomhE2OTj/5QXnOIXkPlY6Q5zsmeU7RGVLRrNpBArhuz+UB5SsLXucgoG6dveGct7+ZGGKChrS1vSWQIgqZLaScK9fAeCK/fSUyjp+ymy6rWVopICW/jFqv2NH5m04vGij89+eFrQl57avN/U6Ygvccty+fHe0riRDnSRir9I41mXhLnNv+wikriqVdGpmOOLgmxvtw6v2gLHFEnAoPhQlUD1c/LqrdoalX1PckffF00fkHyWJukNEslZtdHc2NADpnk6ls+Uu6yfz48DObHIw5s7VeY8HvYWGwZ3aryEaEN6aR9qg411dIrZ/+6CAooeNIliRUEQZVaymsm0lhuj5u0vM8NoCvFL5FRgbtkNjxlSv6upB9mx7dSPT/DjrUYbWR8H3e4Kx3g/dnE5sD+f/9OvleQ29vLzsZdow7/mb42WYfKokolf1sfO/kKubnPqFIGaIdzbZyV5MOAYEAMqE/7L4W4fueIgiAIy8uLAIwei7HMEezIzxf33+76Gkn2/xBSLb3Nmxveq3aHdHgv4EQX9Wf8tyeiaFolMwez+4mphg== Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j2-20020a170906474200b00a379063d993si568340ejs.645.2024.02.04.03.17.28; Sun, 04 Feb 2024 03:17:28 -0800 (PST) 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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8F63668D177; Sun, 4 Feb 2024 13:17:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a27-128.smtp-out.us-west-2.amazonses.com (a27-128.smtp-out.us-west-2.amazonses.com [54.240.27.128]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 85DE968D14E for ; Sun, 4 Feb 2024 13:16:58 +0200 (EET) To: =?utf-8?q?ffmpeg-devel=40ffmpeg=2Eorg?= Date: Sun, 4 Feb 2024 11:16:55 +0000 Mime-Version: 1.0 In-Reply-To: <20240204111648.76522-1-cosmin@cosmin.at> References: <20240204111648.76522-1-cosmin@cosmin.at> <20240204111648.76522-4-cosmin@cosmin.at> X-Mailer: Amazon WorkMail Thread-Index: AQHaV1umhAVS4Ql1QiKtkX3XbpMnvgAAAK17 Thread-Topic: [PATCH v3 3/3] tests/fate/mov: add a test for reading and writing amve box X-Original-Mailer: git-send-email 2.42.1 X-Wm-Sent-Timestamp: 1707045415 Message-ID: <0101018d73d5eba5-6fbdb71f-6991-43f5-be1e-247fc3187d57-000000@us-west-2.amazonses.com> Feedback-ID: 1.us-west-2.An468LAV0jCjQDrDLvlZjeAthld7qrhZr+vow8irkvU=:AmazonSES X-SES-Outgoing: 2024.02.04-54.240.27.128 Subject: [FFmpeg-devel] [PATCH v3 3/3] tests/fate/mov: add a test for reading and writing amve 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: , X-Patchwork-Original-From: Cosmin Stejerean via ffmpeg-devel From: Cosmin Stejerean Reply-To: FFmpeg development discussions and patches Cc: =?utf-8?q?Cosmin_Stejerean?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: SBFckypf/QUw From: Cosmin Stejerean --- tests/fate/mov.mak | 5 +++++ tests/ref/fate/mov-read-amve | 8 ++++++++ tests/ref/fate/mov-write-amve | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 tests/ref/fate/mov-read-amve create mode 100644 tests/ref/fate/mov-write-amve diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak index f202f36d96..ebad6ff2f4 100644 --- a/tests/fate/mov.mak +++ b/tests/fate/mov.mak @@ -9,6 +9,7 @@ FATE_MOV = fate-mov-3elist \ fate-mov-frag-encrypted \ fate-mov-tenc-only-encrypted \ fate-mov-invalid-elst-entry-count \ + fate-mov-write-amve \ fate-mov-gpmf-remux \ fate-mov-440hz-10ms \ fate-mov-ibi-elst-starts-b \ @@ -25,6 +26,7 @@ FATE_MOV_FFPROBE = fate-mov-neg-firstpts-discard \ fate-mov-zombie \ fate-mov-init-nonkeyframe \ fate-mov-displaymatrix \ + fate-mov-read-amve \ fate-mov-spherical-mono \ fate-mov-guess-delay-1 \ fate-mov-guess-delay-2 \ @@ -109,6 +111,9 @@ fate-mov-init-nonkeyframe: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_packets - fate-mov-displaymatrix: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entries stream=display_aspect_ratio,sample_aspect_ratio:stream_side_data_list -select_streams v -v 0 $(TARGET_SAMPLES)/mov/displaymatrix.mov +fate-mov-read-amve: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entries stream_side_data_list -select_streams v -v 0 $(TARGET_SAMPLES)/mov/amve.mov +fate-mov-write-amve: CMD = transcode mov $(TARGET_SAMPLES)/mov/amve.mov mp4 "-c copy" "-c copy -t 0.5" "-show_entries stream_side_data_list" + fate-mov-spherical-mono: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entries stream_side_data_list -select_streams v -v 0 $(TARGET_SAMPLES)/mov/spherical.mov fate-mov-gpmf-remux: CMD = md5 -i $(TARGET_SAMPLES)/mov/fake-gp-media-with-real-gpmf.mp4 -map 0 -c copy -fflags +bitexact -f mp4 diff --git a/tests/ref/fate/mov-read-amve b/tests/ref/fate/mov-read-amve new file mode 100644 index 0000000000..91d34d94dd --- /dev/null +++ b/tests/ref/fate/mov-read-amve @@ -0,0 +1,8 @@ +[STREAM] +[SIDE_DATA] +side_data_type=Ambient viewing environment +ambient_illuminance=3140000/10000 +ambient_light_x=15635/50000 +ambient_light_y=16450/50000 +[/SIDE_DATA] +[/STREAM] diff --git a/tests/ref/fate/mov-write-amve b/tests/ref/fate/mov-write-amve new file mode 100644 index 0000000000..115cdbd9f0 --- /dev/null +++ b/tests/ref/fate/mov-write-amve @@ -0,0 +1,33 @@ +850c56be1114aa21a2e41bd4ea3da144 *tests/data/fate/mov-write-amve.mp4 +23677 tests/data/fate/mov-write-amve.mp4 +#extradata 0: 49, 0x7f8d1145 +#tb 0: 1/15360 +#media_type 0: video +#codec_id 0: h264 +#dimensions 0: 640x360 +#sar 0: 0/1 +0, -1024, 0, 512, 11849, 0xf21aa1d0 +0, -512, 2048, 512, 1572, 0xf0c41b68, F=0x0 +0, 0, 1024, 512, 347, 0x9b8daabf, F=0x0 +0, 512, 512, 512, 195, 0x557e58db, F=0x0 +0, 1024, 1536, 512, 134, 0x423541b4, F=0x0 +0, 1536, 3072, 512, 1454, 0xe5a2cdad, F=0x0 +0, 2048, 2560, 512, 168, 0xd0ef5402, F=0x0 +0, 2560, 5120, 512, 1395, 0x603eb602, F=0x0 +0, 3072, 4096, 512, 304, 0x69cc92a6, F=0x0 +0, 3584, 3584, 512, 145, 0x3f1a4462, F=0x0 +0, 4096, 4608, 512, 154, 0x953851d1, F=0x0 +0, 4608, 5632, 512, 876, 0xad65ace7, F=0x0 +0, 5120, 7680, 512, 742, 0x6b6d689f, F=0x0 +0, 5632, 6656, 512, 177, 0xa4f2573b, F=0x0 +0, 6144, 6144, 512, 101, 0xb0722d2b, F=0x0 +0, 6656, 7168, 512, 105, 0x1f6033ed, F=0x0 +0, 7168, 9728, 512, 589, 0xcd912063, F=0x0 +[STREAM] +[SIDE_DATA] +side_data_type=Ambient viewing environment +ambient_illuminance=3140000/10000 +ambient_light_x=15635/50000 +ambient_light_y=16450/50000 +[/SIDE_DATA] +[/STREAM]