From patchwork Wed Jan 11 18:57:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 39968 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp4979184pzb; Wed, 11 Jan 2023 10:57:25 -0800 (PST) X-Google-Smtp-Source: AMrXdXuB4WoMM2x6u/XZs+weY8lPp8LkSejqKgp6I+t3SjhZWLHWD8LuocTY/lxaf19op49EiBQ3 X-Received: by 2002:a17:907:c011:b0:7c0:e5ca:411c with SMTP id ss17-20020a170907c01100b007c0e5ca411cmr61018365ejc.17.1673463444879; Wed, 11 Jan 2023 10:57:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673463444; cv=none; d=google.com; s=arc-20160816; b=oIWcj4ccaGkiJ0928UT+rpgt0H6eoumdLQQnfwTa04abmx2kShF9/lpRLKtpDBy4oK zTgQDF2qGNS8oiWg8cDNwCZKy/xB+akdA48UMw7cg0RuY3SPt1eekLuCML5k9Y0+7uSv 8zFvucTvr5MeWVP+mbm5pccg7YZD0N6x2o82B2GyHt9RgoKKs8GR1ts/XTcVAEDKCjxR R6ji3LbL69nKGoHK14rUY+AgJWG8PRsz0rbET7p1cmwMvi9Bb9mKcyli11ypqTuNqG6w 3LgUJfr3A1W3ijGLCisodfeq0aCbqz7hYHLxWnpolgb/68u4iWTv1xIklSVEyjhicKkZ Wwog== 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=E+D4M6LnNGMgQydinUEX9e5e8UhWa2KSBhfbTAVLln4=; b=KW3XSQElD5eXwCkcGUghTk1Hkc1t6aNoePOL+ULuv3Gxptboy6gUb/z4yLi05eVqon MrCbzi+KZ9l/FQ0LDJQVMv0hO8J+3aa7+t6Kg3NbGhCJcFVCuowbVi15gKZbcM7FrwRl TIBn8bIy2rAiDZLJAurW/QpeXhqi3Y0mnXUro+6h9VT1jVdxbNGO0H53pGqJoBI8gnaG 0lPQCzf5W/CQl9ZrOpqsnlxLCYM4YpQimC9SFvmcsZdgV6bab6B6UBoLDzKME7DMzzyI 1yeES/F1g1JDy24x3LnTW2ZrkN9iKFpZjFYdSEDSlYUJAYN4i6i3gBtD21Yr9c7fxKzj DvGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=aqdQgXPI; 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 ht13-20020a170907608d00b007ba713e241dsi17258221ejc.894.2023.01.11.10.57.23; Wed, 11 Jan 2023 10:57:24 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=aqdQgXPI; 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 C556F68BCE8; Wed, 11 Jan 2023 20:57:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5E30D68BC64 for ; Wed, 11 Jan 2023 20:57:14 +0200 (EET) Received: by mail-lf1-f47.google.com with SMTP id j17so24988122lfr.3 for ; Wed, 11 Jan 2023 10:57:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=9A3Ufglc5t9rENPtlXdms5MqDCUoU1+sX3glo/yQzWY=; b=aqdQgXPI/U+JC/6p2/krDWon8869xl5M/mnTaoTlSEW8mIHakvJQiUzreGZqf4Xg8q KOMbPt1LgFqpg+1D/jEQSm/bzy37QGRomnD+9FRkwGMtgLpJZkui9yMO80EO1k2WVxov DbUDzmIiql8LS2ywroNSgnhzDctYRHqLB1CH3RAqEgnG52OQ/+EQNpc9KHfFGc6B0Cca SXCncAD0nNtUphukU9NXN2gzxIkOAl3T1V5AHTRkEakU/qlWBAw+y1Pq/XOBjeF9MUBc pcSCtzrlmyaH+g0JjGKYIrZFTLtdcfqdOuSmAqBIqcwdgufJsSfY3lSpOMOqGrSfGo80 my0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=9A3Ufglc5t9rENPtlXdms5MqDCUoU1+sX3glo/yQzWY=; b=4BOVqPDfEzVEH4gfWco/+hlPzd2txdBuqIy5I73Y5NAO1ESZoi0sPwbjQqwfTj8Z+S IGmBo34pqf16yFFxEnCaL2RE/Ph0OICAqjlCyfIjGqks3HctlAVMhcM5yfkcuE8tVFzI bYxI66+3PbmUK/Xwn2vnA6okNbtZ9yMHitGE1GGdsLmYnVJpsCqCgQKVnWTgxobhj4l/ vGTAwJicUb+P/cVBodf11ePrlJ0VpNyMSLF+ePOdutU5hpPODT98IGcgGTwQxvK3NNFa H6sFrDMpWUDLOlzJ7ps7PEHUtJgOYtF1fUuSd+RB0jIiHysgl+QSdyvfwLwpGp+4kxXx KC8w== X-Gm-Message-State: AFqh2kpoiphsn6dOBXQrQH2DJPy2s+7JSKcQdljkTejnK+zsX1Ihx1yh Cf+joqoiui4abEX2Cw9QzCwUUlVyTOg= X-Received: by 2002:ac2:43b5:0:b0:4cb:40ba:4ae8 with SMTP id t21-20020ac243b5000000b004cb40ba4ae8mr7731184lfl.34.1673463433611; Wed, 11 Jan 2023 10:57:13 -0800 (PST) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id j5-20020a05651231c500b004b5480edf67sm2842017lfe.36.2023.01.11.10.57.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jan 2023 10:57:12 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 11 Jan 2023 20:57:04 +0200 Message-Id: <20230111185707.22132-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230110211949.8195-1-jeebjp@gmail.com> References: <20230110211949.8195-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/4] avcodec/cbs_{h2645, sei}: add support for Ambient Viewing Environment SEI 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: QdXbSFO/kull Defined by H.274, this SEI message is utilized by iPhones to save the nominal ambient viewing environment for the display of recorded HDR content. --- libavcodec/cbs_h2645.c | 6 ++++++ libavcodec/cbs_sei.h | 6 ++++++ libavcodec/cbs_sei_syntax_template.c | 17 +++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index 4ee06003c3..80e48829af 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -1500,6 +1500,12 @@ static const SEIMessageTypeDescriptor cbs_sei_common_types[] = { sizeof(SEIRawAlternativeTransferCharacteristics), SEI_MESSAGE_RW(sei, alternative_transfer_characteristics), }, + { + SEI_TYPE_AMBIENT_VIEWING_ENVIRONMENT, + 1, 0, + sizeof(SEIRawAmbientViewingEnvironment), + SEI_MESSAGE_RW(sei, ambient_viewing_environment), + }, SEI_MESSAGE_TYPE_END, }; diff --git a/libavcodec/cbs_sei.h b/libavcodec/cbs_sei.h index c7a7a95be0..1c327a4689 100644 --- a/libavcodec/cbs_sei.h +++ b/libavcodec/cbs_sei.h @@ -65,6 +65,12 @@ typedef struct SEIRawAlternativeTransferCharacteristics { uint8_t preferred_transfer_characteristics; } SEIRawAlternativeTransferCharacteristics; +typedef struct SEIRawAmbientViewingEnvironment { + uint32_t ambient_illuminance; + uint16_t ambient_light_x; + uint16_t ambient_light_y; +} SEIRawAmbientViewingEnvironment; + typedef struct SEIRawMessage { uint32_t payload_type; uint32_t payload_size; diff --git a/libavcodec/cbs_sei_syntax_template.c b/libavcodec/cbs_sei_syntax_template.c index 0ef7b42ed9..6a7cc36dda 100644 --- a/libavcodec/cbs_sei_syntax_template.c +++ b/libavcodec/cbs_sei_syntax_template.c @@ -144,6 +144,23 @@ static int FUNC(alternative_transfer_characteristics) return 0; } +static int FUNC(ambient_viewing_environment) + (CodedBitstreamContext *ctx, RWContext *rw, + SEIRawAmbientViewingEnvironment *current, + SEIMessageState *state) +{ + static const uint16_t max_ambient_light_value = 50000; + int err; + + HEADER("Ambient Viewing Environment"); + + u(32, ambient_illuminance, 1, MAX_UINT_BITS(32)); + u(16, ambient_light_x, 0, max_ambient_light_value); + u(16, ambient_light_y, 0, max_ambient_light_value); + + return 0; +} + static int FUNC(message)(CodedBitstreamContext *ctx, RWContext *rw, SEIRawMessage *current) { From patchwork Wed Jan 11 18:57:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 39969 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp4979261pzb; Wed, 11 Jan 2023 10:57:33 -0800 (PST) X-Google-Smtp-Source: AMrXdXtsTg9ASn8ZNem56M4YqIv4Ydb0SWj7AN7MBpEtKxKNp6PNx7DjJ5G/ty3ZbdmraU5vrkf0 X-Received: by 2002:a17:906:685:b0:856:6884:675f with SMTP id u5-20020a170906068500b008566884675fmr6537364ejb.52.1673463453086; Wed, 11 Jan 2023 10:57:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673463453; cv=none; d=google.com; s=arc-20160816; b=vIk39kuERQQeuoyASBfmRdv/q6xxxpvp00iGImzyGEkrNzWbPkMuHOJvxi0TqrX57B VHiCD72WmnkMALY7RQvN3oNdU7AOYRt4692bbD8F2+1MwxrD/ixGs78ayZGeGn96cl/M ECGxnjZeiyw6E9saV4q0EZcYKqxBnUp6z1Tn3OpPDhO92s+eDzc8pavZRtq/sFwqlsM8 gzqy8S8nf5Kb+tM/vRwMU+MfYjS1etEyoK6SdAi/oD2XPhcRJ/vq6UD4sVLS7XSgEQjS buJrdoEkk5GHs6bn4iMZiz+lYysTVQKKPTVFFJgyXttp4xeVTv4WXXdetUk6LblJbDvL yiqQ== 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=nGjZVSPaJ9D+TMMePg15WO5zOpu/fn5G9pwgTNOJu+g=; b=e+Ks2F6BFWv54BUYRRKGed8f4i2lSmYQbBQnOr/95S4j5FJNz2DE1S38y1a1w0nbzk 8P5LgJElq93bgA/zqpBb8x9Ank8ODMonCsCT/hQLb8KlgnkSq0T0ySOsgHSweKDR7Emh bxhU/UnuFcaSR2NBxeTbFzyeCNIyvKojMV1NmmApkEOPZnjFAYE9oSK4H6qD2LSDIYcS DfQT/wawLrRRWa4MDpsn178+36knaqZDFK8ockMBMTrgx2W2ffsdiVs16WnwLLHbHzh7 cpQi5HCFtUCfvavLauHu0Vqxk/hPERzJnIltnDdViLnBuC8RVMqqzkFnV83sll41oYwu 1/kQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ezgUm6ZW; 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 dr13-20020a170907720d00b007be1d7d1c22si16065314ejc.32.2023.01.11.10.57.32; Wed, 11 Jan 2023 10:57:33 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ezgUm6ZW; 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 BBC7668BCF7; Wed, 11 Jan 2023 20:57:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0E80A68BC64 for ; Wed, 11 Jan 2023 20:57:15 +0200 (EET) Received: by mail-lf1-f45.google.com with SMTP id bf43so24976804lfb.6 for ; Wed, 11 Jan 2023 10:57:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=29whK7zxyVFWU3tjjipP7WJrJpJqKxxEylC8ym61xr8=; b=ezgUm6ZWk1TFj9DYRIlo51SNxnRHDMJiPZAnMPnlwiR0uidDCC5AEJOoQ7MUS8tTIh Nig3TyJzsIodKn86Fvj3oV6iihvb3rsojiUHNDVmwBIR3fL0hSM6KDZRt07X2h0T/pCr X/5+FHMzp2yJ03ZR8vwhF0twIxHhnmYtM/glB0szNFQjTZPVz/iMg6QPkQuu18t8inOK xgZ7qCXa1XxuhZklZFHvYDzTOWvt7azNFtpA4cgQ09cWQ2nISvXP8fKDxaeNKujCjLSq rvfImw4IVvfdN4/rk3RejvRrkPdRrtSSworZpeXcuwYjoVAQuo/LMCUSRvgHR8WrtRmZ 5Y5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=29whK7zxyVFWU3tjjipP7WJrJpJqKxxEylC8ym61xr8=; b=7TeILDobBpVtJQWkWPchMPD4YJ16Qi09jTP7yayI4C0wKcvEs5X2+fC/tD1eC8rKa4 RzIjRtLwH+t7FFGE+H3dq3xu70m8jXPQeuoiMF12mGNT/fZ/TZZn/M+kQOIkDuZ33+yT dKA/CjtrEAmZcvDN3fOvDXDmeCLP2Eo9/s0j1YDl4MWmzNcumSgo3qW1nxXHZe3pCnnh EMl5F6ttHc7QMsrvzDwONdIrN5LwonYh/5kWnMoxQphlt3NiQHtL2xZkkTKMEMYyv3Wt 4gQCw5cDmTwMJU7PMW9E0I95Vcntplt4CWjNjLT54YsMhI8l4a4tniKS6RCVN7oUgtCx q9KA== X-Gm-Message-State: AFqh2kr+G2TxdQSjQgZ/nFLOS1IOK4KG5+GF9DBbATwNA5CCyeHBYLX0 TQXhTuEdjHHBnLpSVWetZzL1Z9xizQI= X-Received: by 2002:a05:6512:70a:b0:4c0:4214:cd2c with SMTP id b10-20020a056512070a00b004c04214cd2cmr18109138lfs.43.1673463434318; Wed, 11 Jan 2023 10:57:14 -0800 (PST) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id j5-20020a05651231c500b004b5480edf67sm2842017lfe.36.2023.01.11.10.57.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jan 2023 10:57:13 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 11 Jan 2023 20:57:05 +0200 Message-Id: <20230111185707.22132-2-jeebjp@gmail.com> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230111185707.22132-1-jeebjp@gmail.com> References: <20230110211949.8195-1-jeebjp@gmail.com> <20230111185707.22132-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/4] avutil: introduce AVAmbientViewingEnvironment 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: tz33qy9Ot0TT This enables exposing H.274 Ambient Viewing Environment metadata in the framework. --- doc/APIchanges | 6 +++ libavutil/Makefile | 2 + libavutil/ambient_viewing_environment.c | 49 +++++++++++++++++ libavutil/ambient_viewing_environment.h | 72 +++++++++++++++++++++++++ libavutil/frame.c | 1 + libavutil/frame.h | 5 ++ libavutil/version.h | 2 +- 7 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 libavutil/ambient_viewing_environment.c create mode 100644 libavutil/ambient_viewing_environment.h diff --git a/doc/APIchanges b/doc/APIchanges index 328028f293..4356f8bbd5 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,12 @@ libavutil: 2021-04-27 API changes, most recent first: +2023-01-10 - xxxxxxxxxx - lavu 57.44.100 - ambient_viewing_environment.h frame.h + Adds a new structure for holding H.274 Ambient Viewing Environment metadata, + AVAmbientViewingEnvironment. + Adds a new AVFrameSideDataType entry AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT + for it. + 2022-12-xx - xxxxxxxxxx - lavc 59.55.100 - avcodec.h Add AV_HWACCEL_FLAG_UNSAFE_OUTPUT. diff --git a/libavutil/Makefile b/libavutil/Makefile index 3d9c07aea8..29b06665f5 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -4,6 +4,7 @@ DESC = FFmpeg utility library HEADERS = adler32.h \ aes.h \ aes_ctr.h \ + ambient_viewing_environment.h \ attributes.h \ audio_fifo.h \ avassert.h \ @@ -102,6 +103,7 @@ BUILT_HEADERS = avconfig.h \ OBJS = adler32.o \ aes.o \ aes_ctr.o \ + ambient_viewing_environment.o \ audio_fifo.o \ avstring.o \ avsscanf.o \ diff --git a/libavutil/ambient_viewing_environment.c b/libavutil/ambient_viewing_environment.c new file mode 100644 index 0000000000..c47458cfa8 --- /dev/null +++ b/libavutil/ambient_viewing_environment.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023 Jan Ekström + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "ambient_viewing_environment.h" +#include "mem.h" + +AVAmbientViewingEnvironment *av_ambient_viewing_environment_alloc(size_t *size) +{ + AVAmbientViewingEnvironment *env = + av_mallocz(sizeof(AVAmbientViewingEnvironment)); + if (!env) + return NULL; + + if (size) + *size = sizeof(*env); + + return env; +} + +AVAmbientViewingEnvironment *av_ambient_viewing_environment_create_side_data(AVFrame *frame) +{ + AVFrameSideData *side_data = + av_frame_new_side_data(frame, + AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, + sizeof(AVAmbientViewingEnvironment)); + if (!side_data) + return NULL; + + memset(side_data->data, 0, side_data->size); + + return (AVAmbientViewingEnvironment *)side_data->data; +} diff --git a/libavutil/ambient_viewing_environment.h b/libavutil/ambient_viewing_environment.h new file mode 100644 index 0000000000..e5e4ac2173 --- /dev/null +++ b/libavutil/ambient_viewing_environment.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023 Jan Ekström + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H +#define AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H + +#include +#include "frame.h" +#include "rational.h" + +/** + * Ambient viewing environment metadata as defined by H.274. The values are + * saved in AVRationals so that they keep their exactness, while allowing for + * easy access to a double value with f.ex. av_q2d. + * + * @note sizeof(AVAmbientViewingEnvironment) is not part of the public ABI, and + * it must be allocated using av_ambient_viewing_environment_alloc. + */ +typedef struct AVAmbientViewingEnvironment { + /** + * Environmental illuminance of the ambient viewing environment in lux. + */ + AVRational ambient_illuminance; + + /** + * Normalized x chromaticity coordinate of the environmental ambient light + * in the nominal viewing environment according to the CIE 1931 definition + * of x and y as specified in ISO/CIE 11664-1. + */ + AVRational ambient_light_x; + + /** + * Normalized y chromaticity coordinate of the environmental ambient light + * in the nominal viewing environment according to the CIE 1931 definition + * of x and y as specified in ISO/CIE 11664-1. + */ + AVRational ambient_light_y; +} AVAmbientViewingEnvironment; + +/** + * Allocate an AVAmbientViewingEnvironment structure. + * + * @return the newly allocated struct or NULL on failure + */ +AVAmbientViewingEnvironment *av_ambient_viewing_environment_alloc(size_t *size); + +/** + * Allocate and add an AVAmbientViewingEnvironment structure to an existing + * AVFrame as side data. + * + * @return the newly allocated struct, or NULL on failure + */ +AVAmbientViewingEnvironment *av_ambient_viewing_environment_create_side_data(AVFrame *frame); + +#endif /* AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H */ diff --git a/libavutil/frame.c b/libavutil/frame.c index de4ad1f94d..fa9b11aa54 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -831,6 +831,7 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type) case AV_FRAME_DATA_DETECTION_BBOXES: return "Bounding boxes for object detection and classification"; case AV_FRAME_DATA_DOVI_RPU_BUFFER: return "Dolby Vision RPU Data"; case AV_FRAME_DATA_DOVI_METADATA: return "Dolby Vision Metadata"; + case AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT: return "Ambient viewing environment"; } return NULL; } diff --git a/libavutil/frame.h b/libavutil/frame.h index e60a82f6c0..bbe909ee2d 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -209,6 +209,11 @@ enum AVFrameSideDataType { * volume transform - CUVA 005.1-2021. */ AV_FRAME_DATA_DYNAMIC_HDR_VIVID, + + /** + * Ambient viewing environment metadata, as defined by H.274. + */ + AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, }; enum AVActiveFormatDescription { diff --git a/libavutil/version.h b/libavutil/version.h index 3b616ea489..60f96af5df 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 57 -#define LIBAVUTIL_VERSION_MINOR 43 +#define LIBAVUTIL_VERSION_MINOR 44 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Wed Jan 11 18:57:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 39970 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp4979315pzb; Wed, 11 Jan 2023 10:57:40 -0800 (PST) X-Google-Smtp-Source: AMrXdXsld1kCae3Iq8f3MoA9cFQe8YqEhFWGBev41uD5FFquE0fAs2iWmJPD2LSuT9/tktQzbxcw X-Received: by 2002:a17:906:79d2:b0:7ae:987d:d7f9 with SMTP id m18-20020a17090679d200b007ae987dd7f9mr57660371ejo.17.1673463460678; Wed, 11 Jan 2023 10:57:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673463460; cv=none; d=google.com; s=arc-20160816; b=vqsPKUy3OltLQ90mRBfBfnqjqEU0mRm+oJHXoPAY9r7dwsW6I3M2uK6AbihxXsl9Of ft4YvevlKgqcy88+vwSB4FRPTJOu44PYr4aJGTUPHaNTbRoVMg3reQRBwgGdCZ+br/Lv wDDsi1HKavN0DvRyJfVg3DZsmNkH0u0ufuPMbNSMbr9LAxdZPqK4n/N4EwQbsJWiaMjf EnZptlyrz2rGfuMEB7JugVZk7pgxCYUrw7/SiXa6PaMhNNxBDv9CwCL84Tl4ZKwC4MPa 2avp7Zi19v/kSL6CNKQcfZb4+8DNARsXgEESs2fQu7WsW/jjA04EaLug51m8EN64XcnU 9/kA== 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=N1l1QKVGGDbXP0di1G0VIGKum5xer/UcpFdy3CIC9+A=; b=IHcmaNZmvPt5fmbk9nLMlGVNOCzp1QbWN4IDAVk4k2Ym4Gfqm2vngDaQ8yTzCFZ2Sp pQtvYuj/qzWKFnvgaIlNV/pvDWTlIgcoTXROC5/7/EwuJAeWyWs684FX/7wtpPT/PoIg ADXK18PZVQ6pBdEGOtH0MiAZVq+jhlYi6OH7uNZ5XeotKzARwWHPJF4eUFLZx9mUWR7i q5f6bxKmw0Uam8Q/GVDVNxrZXIj5hgJca6Zjq/tuKNArMauwbsI65KAM1uZoIJEvrNiE x/Qxjv4Rf+6fVR4G1KsLXATd0rPnveCK4wymvGyZ8TE8uOQG+2SwpX41aHzl6GwGciiU 6pcA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=EPBBBT9t; 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 dm10-20020a170907948a00b007c144e9f270si17700996ejc.708.2023.01.11.10.57.40; Wed, 11 Jan 2023 10:57:40 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=EPBBBT9t; 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 C1FF068BD16; Wed, 11 Jan 2023 20:57:23 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f53.google.com (mail-lf1-f53.google.com [209.85.167.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ACFDC68BCDA for ; Wed, 11 Jan 2023 20:57:15 +0200 (EET) Received: by mail-lf1-f53.google.com with SMTP id j17so24988201lfr.3 for ; Wed, 11 Jan 2023 10:57:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=DPN0Mb7+Cdavf4rA+xkmoQkauHClVf3wffjeIGp8u94=; b=EPBBBT9tKq15JrpC66XOXusOq/EDYGfLssjblZi+VnXPPUFurPMoo9eb55pnnk63sD biIvJbMclOcRK8rgrUfmeNcgPTf8UlZs+/u6hI4i7qZ4AdCg5L6crmQVzmAk6pZBi7fd uPVrMiKY9WZULVQNhs9WgMzbgw5nq8/x08pvLEFyKR4bzD0LtTv/mL9h8xH378jwIsVI CvwZXlH2R+DJYK0mJDSM+UKNqSorTiIBtu/mix3ZsKHPHg/5YXqIKRxTUB1y/q9/MchD Qgg7h2WcC82IbJF5BzRc2Hc/K3kX+ZEgqXS+f1yEfzAP8UFG+gxeno5p9mr3SeTEMdG4 981g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=DPN0Mb7+Cdavf4rA+xkmoQkauHClVf3wffjeIGp8u94=; b=BLDpuEqK5XUrY5LbKgXRkUNLImJS+L6zsEAhHFJp1wcN0ZptjDAMhPv+k8P4xIdQXl u3/rbCYEryvNXlDRAsq0lGB0efEoQg4MhDDKIdIO7L8mrj51uRZcI0eV4tnYulnnJAcd 7ohshwCwOpn7gOKWfPvyoodbUrzD4cBqDSQaKrn4U4+PysM3aLFCXUMXngA5sGqHvfyD 0Btdf0qoT+b99w9rZ3FRfCU+BKjUibf1YHEooM40kf/nP7bfookCQC47iWMXb4Ia2quO gaDAJFbRa1wQKTysAeOTwq1GoNuvJoPQEino9PNxiF26AoelZ8AtJSdf2Yy5wceDHd0t VAIw== X-Gm-Message-State: AFqh2kpCfrCEWMjbhrXgvynX0A2ybTLuWt9ED7i1yR9/y6H18nqoKxEL IY7wT+f5N3uJvx/98qgHQIJI3Du7mQ0= X-Received: by 2002:a05:6512:10c3:b0:4b6:e64c:aec6 with SMTP id k3-20020a05651210c300b004b6e64caec6mr25108553lfg.63.1673463435019; Wed, 11 Jan 2023 10:57:15 -0800 (PST) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id j5-20020a05651231c500b004b5480edf67sm2842017lfe.36.2023.01.11.10.57.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jan 2023 10:57:14 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 11 Jan 2023 20:57:06 +0200 Message-Id: <20230111185707.22132-3-jeebjp@gmail.com> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230111185707.22132-1-jeebjp@gmail.com> References: <20230110211949.8195-1-jeebjp@gmail.com> <20230111185707.22132-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/4] ffprobe: expose AVAmbientViewingEnvironment side data in AVFrames 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: GJ0hRV3GSvB8 --- fftools/ffprobe.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index c18aee9846..b9310a2d25 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -33,6 +33,7 @@ #include "libavformat/version.h" #include "libavcodec/avcodec.h" #include "libavcodec/version.h" +#include "libavutil/ambient_viewing_environment.h" #include "libavutil/avassert.h" #include "libavutil/avstring.h" #include "libavutil/bprint.h" @@ -2268,6 +2269,17 @@ static void print_dynamic_hdr_vivid(WriterContext *w, const AVDynamicHDRVivid *m } } +static void print_ambient_viewing_environment(WriterContext *w, + const AVAmbientViewingEnvironment *env) +{ + if (!env) + return; + + print_q("ambient_illuminance", env->ambient_illuminance, '/'); + print_q("ambient_light_x", env->ambient_light_x, '/'); + print_q("ambient_light_y", env->ambient_light_y, '/'); +} + static void print_pkt_side_data(WriterContext *w, AVCodecParameters *par, const AVPacketSideData *side_data, @@ -2704,6 +2716,9 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream, } else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID) { AVDynamicHDRVivid *metadata = (AVDynamicHDRVivid *)sd->data; print_dynamic_hdr_vivid(w, metadata); + } else if (sd->type == AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT) { + print_ambient_viewing_environment( + w, (const AVAmbientViewingEnvironment *)sd->data); } writer_print_section_footer(w); } From patchwork Wed Jan 11 18:57:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 39971 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp4979394pzb; Wed, 11 Jan 2023 10:57:48 -0800 (PST) X-Google-Smtp-Source: AMrXdXu+yscc+Y2D2WHjxmHh9aUY/o5t0Ilh2mjPu+/0SvIQ3kChcbQUD50al1GpW2DPj0dBf0uQ X-Received: by 2002:a17:907:c68a:b0:84c:e9c4:5751 with SMTP id ue10-20020a170907c68a00b0084ce9c45751mr3535859ejc.74.1673463468797; Wed, 11 Jan 2023 10:57:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673463468; cv=none; d=google.com; s=arc-20160816; b=ZFuDqbpUHPyU6uW2LPvyAQIpI0+qowdnLuhF/8xBf40nVmt/1q5qUL/ltAyDgeAPhm BL9rKIeCc/rSYA+i0di34mVhpOCb1/uOeRcCfvq1FBUj/Jbqa34EHuxBvrjp738DJRCx xcMKxIFzOuGoesXDuLGNpSxaw+WgEPsgLRyKPSn4xiFgrMgDPhFoXNB7Zi73So+UlG57 cOiQPAegdsU2ldxSMxxYmeOeUr9RFN3+V/+aGYexyJVlKagK1X854Qj0Nap7d7NiI2/3 5PKFKquGmEWGeAKb5cqVAKyw+jqvtLiV1/CRnnAIG66icBMippPgEpNu3duGn0WLkbfZ w3og== 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=hpUbCI8RLTQwG7j13sYC0xx4HvjiqlQzspMwjtNP5eM=; b=pMBksvGMYdfPIxvD14+SWb6ZRpDEUJ1OCqAFwr/htycX5DUAeXNXFweRpUE5VWFL+E aMLOT99DL9ku/8kW+6ewUcNiDjhbvGU4qamX+839T+4X4UUzf1nJQ0LJ848FzHV6RcXP 1D946QkkCe9hHn1ZZw4OiSvnUbLxSftv14VkwEcnad2xYD+x0F5AxRZu6AO4fmLgtjlP odzjfVRefNh0lFMpufYHSVSdm3bWEwtwroaoZv2Wq/EwGKEqNA4pzKpGrTy8bS5fQ5ZA 9iig1USWSRtJ8ifWMR+OkNR9iijVPiqN40D7OkyGgblYcFgRI5zMC8Q4mg/yIdqKD4EU YQDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Oojo5PT8; 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 he31-20020a1709073d9f00b0084d46a9b47bsi10283691ejc.725.2023.01.11.10.57.48; Wed, 11 Jan 2023 10:57:48 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Oojo5PT8; 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 DCCF268BD24; Wed, 11 Jan 2023 20:57:24 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4809868BC64 for ; Wed, 11 Jan 2023 20:57:16 +0200 (EET) Received: by mail-lf1-f48.google.com with SMTP id d30so20062562lfv.8 for ; Wed, 11 Jan 2023 10:57:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=PEaRvRxnlWcNYkQHMoT7rJxIqbT+x0EW8mOkhq7T6Yw=; b=Oojo5PT8wv+Z1N3teyyIJ0ArT1wJlptyPoabB7aVPHwHFM5TqjoeXGBuXLeeM+eh01 KOM8SmDvbyEIyRtVC1mfpYLtbpAJN9JTSBlSePuDCL47nFfZvRInhvTUaDBvqhaKIpGl 3LHdIZcXGMY+TkQX3cu+h0QFzaDL5d0V/MtSIza+pdncg7bWj1+aMA9Lz1GTr4+gG39O nfVtpHtOA6RVvAcANIrlY5aPMhbX/ZAvB1zgWQAExgUyMn1xBof9QVFoHHK5A8iVTHFJ iTyukYEexxRAU6hBz9Z6ixqI4r0cAOlJMHJ4VGsb7L8m60+RQlFlsnKWD5bMtAze3vbk N2gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=PEaRvRxnlWcNYkQHMoT7rJxIqbT+x0EW8mOkhq7T6Yw=; b=mperEU/yF/wwjGGCu0Ga1HVcNbnEyiN3bGWicP3aMMK/JLYCxu4dTMnN/zYiodsAqE eIXW9pRJYzY1LbHvgu/6C4iCLLjcY3Vudq2VEF5ymWJVL4gxSTgRDV3ubkc8i8vlLs5A X+ZwgMxjfjyDDYpuLQo9xUAbJfoXQ6T6y3jZ7hBjPSHzhHkU7yfmKtp/g/S5x1wxXJnP NN/DcZNNjKMn5/TaOZ+KefmvceugVoOi1Ib4U5vkRBo1sLXiOTzd8Uvxf0C1YgyoK59y jsfJASsUgFtbo118amcsALK1vuFjZydnaSHYjCn2iP3rHAgNWO4IW4uHjFXFBl+SLsDj keaA== X-Gm-Message-State: AFqh2krQEHUL5N64uUHBeDpVkeHavNel9xIDzoD2XQLWYhfODBw2Wsd6 Jf26QwupBvrvKUL0u8/fkob3o70BOrU= X-Received: by 2002:a05:6512:3048:b0:4b5:8421:587a with SMTP id b8-20020a056512304800b004b58421587amr24625439lfb.44.1673463435622; Wed, 11 Jan 2023 10:57:15 -0800 (PST) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id j5-20020a05651231c500b004b5480edf67sm2842017lfe.36.2023.01.11.10.57.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jan 2023 10:57:15 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 11 Jan 2023 20:57:07 +0200 Message-Id: <20230111185707.22132-4-jeebjp@gmail.com> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230111185707.22132-1-jeebjp@gmail.com> References: <20230110211949.8195-1-jeebjp@gmail.com> <20230111185707.22132-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 4/4] avcodec/h2645_sei: add support for Ambient Viewing Environment SEI 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: vuDgxHtbJyh6 Defined by H.274, this SEI message is utilized by iPhones to save the nominal ambient viewing environment for the display of recorded HDR content. The contents of the message are exposed to API users as AVFrame side data containing AVAmbientViewingEnvironment. As the DV RPU test sample is from an iPhone and includes Ambient Viewing Environment SEI messages, its test result gets updated. --- libavcodec/h2645_sei.c | 45 ++++++++++++++++++++++++++++++++++++++ libavcodec/h2645_sei.h | 8 +++++++ tests/ref/fate/hevc-dv-rpu | 12 ++++++++++ 3 files changed, 65 insertions(+) diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c index 3ff89e4fdd..6e4a9a1af2 100644 --- a/libavcodec/h2645_sei.c +++ b/libavcodec/h2645_sei.c @@ -25,6 +25,7 @@ #include "config_components.h" +#include "libavutil/ambient_viewing_environment.h" #include "libavutil/display.h" #include "libavutil/film_grain_params.h" #include "libavutil/pixdesc.h" @@ -320,6 +321,31 @@ static int decode_alternative_transfer(H2645SEIAlternativeTransfer *s, return 0; } +static int decode_ambient_viewing_environment(H2645SEIAmbientViewingEnvironment *s, + GetByteContext *gb) +{ + static const uint16_t max_ambient_light_value = 50000; + + if (bytestream2_get_bytes_left(gb) < 8) + return AVERROR_INVALIDDATA; + + s->ambient_illuminance = bytestream2_get_be32u(gb); + if (!s->ambient_illuminance) + return AVERROR_INVALIDDATA; + + s->ambient_light_x = bytestream2_get_be16u(gb); + if (s->ambient_light_x > max_ambient_light_value) + return AVERROR_INVALIDDATA; + + s->ambient_light_y = bytestream2_get_be16u(gb); + if (s->ambient_light_y > max_ambient_light_value) + return AVERROR_INVALIDDATA; + + s->present = 1; + + return 0; +} + static int decode_film_grain_characteristics(H2645SEIFilmGrainCharacteristics *h, enum AVCodecID codec_id, GetBitContext *gb) { @@ -383,6 +409,9 @@ int ff_h2645_sei_message_decode(H2645SEI *h, enum SEIType type, return decode_frame_packing_arrangement(&h->frame_packing, gb, codec_id); case SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS: return decode_alternative_transfer(&h->alternative_transfer, gbyte); + case SEI_TYPE_AMBIENT_VIEWING_ENVIRONMENT: + return decode_ambient_viewing_environment(&h->ambient_viewing_environment, + gbyte); default: return FF_H2645_SEI_MESSAGE_UNHANDLED; } @@ -609,6 +638,20 @@ int ff_h2645_sei_to_frame(AVFrame *frame, H2645SEI *sei, avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN; } + if (sei->ambient_viewing_environment.present) { + H2645SEIAmbientViewingEnvironment *env = + &sei->ambient_viewing_environment; + + AVAmbientViewingEnvironment *dst_env = + av_ambient_viewing_environment_create_side_data(frame); + if (!dst_env) + return AVERROR(ENOMEM); + + dst_env->ambient_illuminance = av_make_q(env->ambient_illuminance, 10000); + dst_env->ambient_light_x = av_make_q(env->ambient_light_x, 50000); + dst_env->ambient_light_y = av_make_q(env->ambient_light_y, 50000); + } + return 0; } @@ -622,4 +665,6 @@ void ff_h2645_sei_reset(H2645SEI *s) av_freep(&s->unregistered.buf_ref); av_buffer_unref(&s->dynamic_hdr_plus.info); av_buffer_unref(&s->dynamic_hdr_vivid.info); + + s->ambient_viewing_environment.present = 0; } diff --git a/libavcodec/h2645_sei.h b/libavcodec/h2645_sei.h index f3ee9af524..e07ae10376 100644 --- a/libavcodec/h2645_sei.h +++ b/libavcodec/h2645_sei.h @@ -76,6 +76,13 @@ typedef struct H2645SEIAlternativeTransfer { int preferred_transfer_characteristics; } H2645SEIAlternativeTransfer; +typedef struct H2645SEIAmbientViewingEnvironment { + int present; + uint32_t ambient_illuminance; + uint16_t ambient_light_x; + uint16_t ambient_light_y; +} H2645SEIAmbientViewingEnvironment; + typedef struct H2645SEIFilmGrainCharacteristics { int present; int model_id; @@ -108,6 +115,7 @@ typedef struct H2645SEI { H2645SEIDisplayOrientation display_orientation; H2645SEIAlternativeTransfer alternative_transfer; H2645SEIFilmGrainCharacteristics film_grain_characteristics; + H2645SEIAmbientViewingEnvironment ambient_viewing_environment; } H2645SEI; enum { diff --git a/tests/ref/fate/hevc-dv-rpu b/tests/ref/fate/hevc-dv-rpu index 1980ab13ea..aaf0223eab 100644 --- a/tests/ref/fate/hevc-dv-rpu +++ b/tests/ref/fate/hevc-dv-rpu @@ -3,6 +3,12 @@ side_data_type=H.26[45] User Data Unregistered SEI message [/SIDE_DATA] [SIDE_DATA] +side_data_type=Ambient viewing environment +ambient_illuminance=3140000/10000 +ambient_light_x=15635/50000 +ambient_light_y=16450/50000 +[/SIDE_DATA] +[SIDE_DATA] side_data_type=Dolby Vision RPU Data [/SIDE_DATA] [SIDE_DATA] @@ -120,6 +126,12 @@ source_diagonal=42 [/FRAME] [FRAME] [SIDE_DATA] +side_data_type=Ambient viewing environment +ambient_illuminance=3140000/10000 +ambient_light_x=15635/50000 +ambient_light_y=16450/50000 +[/SIDE_DATA] +[SIDE_DATA] side_data_type=Dolby Vision RPU Data [/SIDE_DATA] [SIDE_DATA]