From patchwork Tue Jan 10 21:19:46 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: 39955 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp4271031pzb; Tue, 10 Jan 2023 13:20:08 -0800 (PST) X-Google-Smtp-Source: AMrXdXvm8NguiFGjDtc1K/oknnwqUxm212Z2/qn2j14+OAbIBggMQL4y6T+gPjYS9mUwoL9dQfkR X-Received: by 2002:a17:907:d410:b0:7c1:fbea:c5ce with SMTP id vi16-20020a170907d41000b007c1fbeac5cemr61169087ejc.7.1673385608460; Tue, 10 Jan 2023 13:20:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673385608; cv=none; d=google.com; s=arc-20160816; b=ipf+P2xMfr6KF4+cWijWHBa1XOgkVVUOqSlmCUKFe/0+47aKIy34dYf65rqpUoMJ1r P4jZc1EOYzPrvzUm44qtw7IUsfW8kdGqhxqfEgtU4gPVnI6AIJ4vbwIrFo3Yy4eZKV4r IdbHoK3dBDLoBS4FJYg6GjFHmte9HUfEaIUY7y9bXcgfcBw3uIM+1QgLwNQyXxYy50PR XwPvXkjAR9v1yB2cQRq/vbLDj1eIbfdsVJsY+LS2R6AyhDRQjH0gfCClG+4lJRTKsSV9 G34TsUALTDJUjZ2RZFfnDgU8SIS7IQxJUHvb1YarRrCZeATjONPJGA0EzQknRxSYic/z RghA== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=E+D4M6LnNGMgQydinUEX9e5e8UhWa2KSBhfbTAVLln4=; b=aesj7l3xGY+T0lTxOKNddDyg6naQf2OHQs/7y4K4lYpJHLwWHXoXtTTS/Jd6dyvnn7 Bh46h11loLADVr8PEXx50pUdHakxEiYFN4ARKO335uRZsSDm60o/KlQv4M3mQakQYece QvONLfbqUvF0jM075KektSbpOl+WjndXYZ1FTntjFLUooGjRyAPb73DLyJ1nDzxh73qw /y71R/X5JIQeU+bYmkxl8apUY5XU+fWunF0cXdItasTw55jhAJVKRF/H7ZBytPSwMw/Q uIMkuBP5Lttgrqxn/9NH564r55J6TA31tzC2fSqEswnBeOmLTUqo8miVsSd7t3F8acSY GE4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Z3e12k21; 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 gn2-20020a1709070d0200b00829e391ba00si13426831ejc.80.2023.01.10.13.20.07; Tue, 10 Jan 2023 13:20:08 -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=Z3e12k21; 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 A9B3068BD19; Tue, 10 Jan 2023 23:20:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f181.google.com (mail-lj1-f181.google.com [209.85.208.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2072E68BB59 for ; Tue, 10 Jan 2023 23:19:57 +0200 (EET) Received: by mail-lj1-f181.google.com with SMTP id p25so7762234ljn.12 for ; Tue, 10 Jan 2023 13:19:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=9A3Ufglc5t9rENPtlXdms5MqDCUoU1+sX3glo/yQzWY=; b=Z3e12k21S5UYonMBDM6/xQTmNJdeBgmbrBZEI8+rcHQHFQAzcA6VzaXbFv4gSz+xAi hQe9RrvHRuDV1WMlekbpfZxLc8J+dYzZr6mNiaSoUULhgF6dX3wkuvsK/9CZVx9ETZhB YZdEoL70++MCErhwJmqQHppeI9KWoVzjRoSxrVrPsyFCdPTjHxxrVX5PMJdr+npFTh9v AAE5iN1OtHuO+gnO5e/kaOP+DppoVH0Rbto9Zse+gBAIJz8Lcj08Te4y4uk4o4fSkhSI 2gB+dLqNDy+PZXUMeSJSHvR5p89ZoGfgQqkRBoePyoOW6W6hgKErmqOVQJP9GIk1JaZ/ R8Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=9A3Ufglc5t9rENPtlXdms5MqDCUoU1+sX3glo/yQzWY=; b=uoNG5HSxzzVVv+Y7mmnu21bvA29bhDb2K3XhIOUq+3jIxgXImKDvdLWPYRd3PnEzri YU0Hpjb4frnefbiXs2kLqoSlxWpiwuaHXIGflAD9l90wy9/lZTzM09fIPpr8bDuLfn73 Dcy0QgbdIybjKzKAZ8//zBWhIXPvjE7gZqFgulE3lbrw1vqwaxj3AXvG5riW3vwLU5K8 82ssMEZlpyWyHWOaGTcnocA2AHpFl7XvLo47/+hy2yht4MrPlAUTCejKM5NnUK8Ek61z kJTrzqmJ5KzDubTKO6Fs1WdDmIn4CREYSNjsKpORPJL+EFeepci4NxODvhOETW5OYq45 tNMA== X-Gm-Message-State: AFqh2kq2X4frjFynv34C9sNIvXfWkiclbtrHWvlxMvuW9o1MI87zcvHa oQmTztGqnL7cGyxVa95r1mGFEa+EY6Y= X-Received: by 2002:a2e:aa93:0:b0:284:254a:9d5a with SMTP id bj19-20020a2eaa93000000b00284254a9d5amr2752472ljb.39.1673385596342; Tue, 10 Jan 2023 13:19:56 -0800 (PST) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id r4-20020a2e8e24000000b00283ad9caa59sm1142240ljk.140.2023.01.10.13.19.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jan 2023 13:19:55 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Jan 2023 23:19:46 +0200 Message-Id: <20230110211949.8195-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.39.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 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: elWTcR/fQeOx 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 Tue Jan 10 21:19:47 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: 39956 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp4271107pzb; Tue, 10 Jan 2023 13:20:17 -0800 (PST) X-Google-Smtp-Source: AMrXdXtczG4diw6RoMMzRXe9bts3UyxAkkQuePI+JqCqvr918ABPt10l+yY6HloyjMufxgTbERg9 X-Received: by 2002:a17:906:2854:b0:7c0:e30a:d3e5 with SMTP id s20-20020a170906285400b007c0e30ad3e5mr56330098ejc.18.1673385617042; Tue, 10 Jan 2023 13:20:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673385617; cv=none; d=google.com; s=arc-20160816; b=lR54SD4/tcG9Z9h8cMkGsjPuS5NxhTgSOOCpWzc0Uh3yX1rV7yoV8jyeRLK+Df/5Rq LCJUC3Y5qRkSLMKyRIQyzgO1nZdClbQDoSfYfyPOnrPRPpId5u/H6oiBEO40yMU/qHme ZCxEP0r7QZkgGDqGxU7V1Ne38JbZyIxISCxrlMCa/PyeaI8LESF+Dq3sEsFvOFWNS4xe BwgzpGDFZpXDksGa5Q5jNyxNZopMdiLB7GVJUKcaZ2XQPgkP5IRU7TMsdpkk4L1WsrvK VvcTJkWP49K5KHGoR4196PopUQPXby07sqdtpuDggzEUqxQ17tv34FsHZqoMA9jkti/k mNhw== 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=zuBwfLOe9v/Ow6aOfUMlSLNuYHzBkAqdwKxBl4v+Isk=; b=YH4A7clKltuvL0Fgo9e6YkOTjJOHbZ+DJFIZrXvPcy6lOIGzxreeUrVqGVWRQPNsrv NSfyOlFodkUYQl+3HAGCf+BCokaPimK9tIpNst873kCnPkbfxtXSRpezgJqLpSpxS/Ck WzpdHwaROLUrbcgPhc4UDknFH4ecOVX41NaBDcnru8DEXg+ThpgzTNoFg93LcicYUije dZkIU05ZEkWKY1QiWsmSGUJZkcH/2lLb9FiLJJfwfy0Rz/XKrFzVUxirlnori7XsaXaS Mzw/GImuELHaMfOcNYM1bn+sFcqIKMTK8DacoHzTYNFXDdtSoHQ8DPvYclWwAzetm8/W wF+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="D//bTMKQ"; 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 ht17-20020a170907609100b007adfe2889efsi12948603ejc.607.2023.01.10.13.20.16; Tue, 10 Jan 2023 13:20:17 -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="D//bTMKQ"; 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 B0DB968BD26; Tue, 10 Jan 2023 23:20:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E588C68B103 for ; Tue, 10 Jan 2023 23:19:57 +0200 (EET) Received: by mail-lf1-f46.google.com with SMTP id bf43so20486869lfb.6 for ; Tue, 10 Jan 2023 13:19:57 -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=xsnfvb8XJD/QoCFWFABRGhBqUQeS3QUN6hRD2w0+WNU=; b=D//bTMKQhMuGZ576IF/uUg9446h1ttBVvuouy1DuwtGhC+rykYEqjCeI8ettnZ4L2J burz5w5eugcdKmbrTesQ2M6ooLnIN6Z8Ex5J/a2aBmevdt+Q4cTeKAlSKUHtgFpdJYjs 6FyvVRxwLnPJf9PAiK+Qxxnvxz5xnXBwvxdMlxol17hIC04OLzhdEhs4PwN+/MLDWyqv RO5IeORwd3ltmOjsrU53dRrltc2Rvtv0xabjj2xDBkty1lXDQjE5l+zyO2kmEEFfosy9 jxIkTT3vSqg6Ehf0Z3275/bFV2dJPLNyVXqw6Jg5AEKylexzmAlk625QpFkz/hYRzhp6 PK0g== 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=xsnfvb8XJD/QoCFWFABRGhBqUQeS3QUN6hRD2w0+WNU=; b=oVNjDi3ldIcVRcbi7i7QeBxK5MoCU6vTe5sVqspWhJ3ElMKYsiXk8FJO7tBhBKGhdy GU72ebpCMD7xhp5l6Zan/LOx2lEtBpCRJZXmhpGanRUjdODthm8QxgZPxIRO2esvjHzA LHPKanfUaxNWkrYsSKIENhIhWp8rNGwmvl8YmjtgRmTCGxz1sqCYMlXP4oFZiDpt7Pdo SkMkNuCw+KWoTSl9Vtieh9pLO9EcvNxuzD/5m/T5jWPbDOlvnok2ibGEMu0D/EiT+erG 28rT4TWQys5W34CAQwfqE5QeDMyekqpFHFxvhcGiqvMGgDt/62+uzcQ+OR2dtxmpvflm qp1g== X-Gm-Message-State: AFqh2kqkAT3h8a7X+aPXfb5TbJRdkZbEyFh+d53kxyTRb1Jq8DinvcSE 48rqBKKboJehRnooEs8kqNQsKgQ3xTM= X-Received: by 2002:a05:6512:2102:b0:4ca:f9bd:3390 with SMTP id q2-20020a056512210200b004caf9bd3390mr15880963lfr.31.1673385597107; Tue, 10 Jan 2023 13:19:57 -0800 (PST) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id r4-20020a2e8e24000000b00283ad9caa59sm1142240ljk.140.2023.01.10.13.19.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jan 2023 13:19:56 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Jan 2023 23:19:47 +0200 Message-Id: <20230110211949.8195-2-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 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: Zkv97zyw/Tri This enables exposing H.274 Ambient Viewing Environment metadata in the framework. --- doc/APIchanges | 6 +++ libavutil/Makefile | 2 + libavutil/ambient_viewing_environment.c | 51 ++++++++++++++++++ libavutil/ambient_viewing_environment.h | 72 +++++++++++++++++++++++++ libavutil/frame.c | 1 + libavutil/frame.h | 5 ++ libavutil/version.h | 2 +- 7 files changed, 138 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..f13b4f1149 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 + 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..e7d150796e --- /dev/null +++ b/libavutil/ambient_viewing_environment.c @@ -0,0 +1,51 @@ +/* + * 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 +#include "ambient_viewing_environment.h" +#include "frame.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 Tue Jan 10 21:19:48 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: 39957 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp4271175pzb; Tue, 10 Jan 2023 13:20:25 -0800 (PST) X-Google-Smtp-Source: AMrXdXszyOTJbQCzlfg+goHCbij+ybVq5uDwOmYcsOznhDjDFm/mQ08TaHvCduf+djyW6FyAxAa6 X-Received: by 2002:a17:906:39a:b0:7c1:1444:da41 with SMTP id b26-20020a170906039a00b007c11444da41mr64055528eja.40.1673385625568; Tue, 10 Jan 2023 13:20:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673385625; cv=none; d=google.com; s=arc-20160816; b=AxMwz/VtE62i+Ssgu8bLVpeZUzv7qwZrgbwn3qyx2VLQPNTXMEQs3WmggL65wylQZu FWjnBrIsKU1Ah7uUgdYNNknBW+MQGZOQ3nhAbVLMU7lQP0A+iWEKV9+MrP0ICHgXigVf WqDcgx5x/0Pi/swoXTkDpr4mtWOgSv+F5isrPaLb3/ch8MUeCyTTofcN19X9ubn/WE3b OpmzP5goGDHJyjYDzjPMsjHSptjjNTqBSfLPruMUvmc5Fx9x5rPICwRUpfGoiKrPYd2/ 9V243+p8tTBSrHTIMV8lgKnL/RXeQBLv5fSOGR1V/+LA5r2D0IouCH4T18RWATCWhyd2 35Xw== 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=by4XjmnRtlftFWUnpZYwFtrvWCdsQ8bAfebh2FEEQHU=; b=axPq+i4SvNa62NW1XP5Q3hqdy+zRvFV/CplblCCeDxDN1PKfm0W3NEGeFqSDOP02iu TPO0aiQLE0Bm4yqaKjMi2OcCqmMCTwHuon/hgfGYvF47TmMOanLzLpn7z29n3+rhw5A6 crxl3sqRBlfd1dxBwBnrWAoK0iDc/wNLcb3i8723mLZIyRgFAWUIkp2hqeXy5kgXWhwj PCnYq9T70p1dhUbRAwBVQaHedu0pJuYr1vAbvuCF4XrTWIl27U51YmvdrEMUGqxByl/O TYGZp11/sX4AVvcJxHZDD8uVzMOZ/c2EKZjebPWYq0gKZORMg+9adnPUswM0nTNaeJ0z tv+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=kv8uJa2t; 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 qb28-20020a1709077e9c00b007c080a3f372si11838199ejc.363.2023.01.10.13.20.25; Tue, 10 Jan 2023 13:20:25 -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=kv8uJa2t; 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 B92B568BD58; Tue, 10 Jan 2023 23:20:05 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f181.google.com (mail-lj1-f181.google.com [209.85.208.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8426968BD19 for ; Tue, 10 Jan 2023 23:19:58 +0200 (EET) Received: by mail-lj1-f181.google.com with SMTP id x37so13962236ljq.1 for ; Tue, 10 Jan 2023 13:19:58 -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=e02djb+h4C8g5QFK6mrUfJJj7CZTei5zZd03xdBOGU4=; b=kv8uJa2tgyxIowpflZcmChhdcMfYtOMRj3e5TzUbsseGM+vzzpRjwJFEYMcXxOI9p3 2d2Wtieh6W7TCDmDWfcJ9EdoG2a2YaBjMlssnnB2xEoHYJSDZ2KyNG7HUwv65lYxjnw9 b6L8wTBmhxkJD1yhB94PRqTvu3VOtp9uHdXaoYGS6qfz6dt7Cor6SyNpf7AhsdjLSd5J VmmcOZc6mtvdSdiGNXTpFA35Dlz2/euottnLJq37lOkgmVPPLo0wk/1mML6vGBI8KzXu jFh/ir35tdLpdgy8LO/9WoxaIMFiY+l22+NxDSZvrpULMKdrCRCchyF6iLjOrmuUGoo1 Xo+A== 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=e02djb+h4C8g5QFK6mrUfJJj7CZTei5zZd03xdBOGU4=; b=FW5WtV+xusTvPLMHNDP3CiSz38AmcbnzXtdk4lCDifbEd0zNkvLCwm7wwYVzvjEZCO nEDBSRNuCbJuQy9mah3shuzHmQvsOb6uvpO2JK89OVRlFzfzhaCsFrifuoe2do9ZjPTb LgoVTXAvLPKfJi3Fm7jKO9i16hQvtbaEhkFxeDTa1Rp2Y2uI4g3xFEr/4lWQpk434Sb+ 1+snY54MFSzRFDzbos88UIko7/CFEKxDdlvfGmE1N4fujewJ5h37TbdsHde1gxbvssr6 X4ky40a7AKHI8+FlWSZkRHa3m5+jn3WqHqwNH5vTGDIL20Qrq9wWjHlsrJ+PQuAHOZOU +LUg== X-Gm-Message-State: AFqh2koJrU8NID3Q5uo5iAcgADpiAnLAjgz5GvjDjjl6kFC6AMlmF+sQ pQu5/L2jmJVbnsVpbJ1as/uX7xBC2lU= X-Received: by 2002:a05:651c:1a1e:b0:277:22d1:ca92 with SMTP id by30-20020a05651c1a1e00b0027722d1ca92mr25919836ljb.32.1673385597907; Tue, 10 Jan 2023 13:19:57 -0800 (PST) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id r4-20020a2e8e24000000b00283ad9caa59sm1142240ljk.140.2023.01.10.13.19.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jan 2023 13:19:57 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Jan 2023 23:19:48 +0200 Message-Id: <20230110211949.8195-3-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 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: +py4KAUyvoE4 --- fftools/ffprobe.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index d2f126d9d6..15c61e1c7c 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 Tue Jan 10 21:19:49 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: 39958 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp4271256pzb; Tue, 10 Jan 2023 13:20:34 -0800 (PST) X-Google-Smtp-Source: AMrXdXuteClSCWIzGhH/TaExwASHIG+e6CLBAcMlRBqo77PFPuGB2U6bk/whQ9P1L2vQJu6Wvase X-Received: by 2002:a17:906:eda2:b0:84d:4712:9c42 with SMTP id sa2-20020a170906eda200b0084d47129c42mr8534926ejb.56.1673385634272; Tue, 10 Jan 2023 13:20:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673385634; cv=none; d=google.com; s=arc-20160816; b=cZ4w7GZHEj0zMz5EZkaoXjG2PhAh39a3HQMgnxNywTKgBg9vX4KsY/j4pTdmeQaipP 7LGrUNWTFyed0HH6hWR6CNpAVynFS9rMfARDvzUTGi4KYvuSzKOZ8oNDa1kNWJqAeTVf G+k9cTPTJd3f7vD1tZ4QJEPPI1m3zH4jSFn+jRIofebUES/apSomXGQcKosVj9RdP8jR hpxlmq7T1SJyeOA8A1Xzo6GeNGEqbUC5MfThhVi5hfVpA8s3CO+u8Fj2myx7Hv1ArpuS UmkbkcD1UUq0BHd+dkHhsxTsiqKS71F/cW1N3DQyP/VR7CIuhME7IWkhYgs26L5OfGfA Ch5w== 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=8g8pAWh/CZxL3Hx+dDuXhQvWKeZGhExA5osEzcMO2ec=; b=puIY2IXjPsCS2I+5BvlMss27YGIISNP1a2JPEXwAjwzYrs/8zwOVQWZlNR2TuFpYcj +0qQDSleWs2yUN2ZwU3i+aScEb2Dqyj2MtVjY9W80SbwkLq2cRBz4m3GFc5GV9ge2Ei7 JfytToP02byThbA6cZIc4kToDGqsqLtAAWw2wtIZ5F+agnnW+Gd7HR4vmAvs7WZ/NhmD 9HMKwxy0MMU9xx6ExfTL6uaoxJ7HMlVFElkihl3VGxbxvJKiHXl3Djp3uprGL1JlkPdf KLiM3WRZNKP4GgEwkGZJ5bT+dsXUNK5k5SQ7d7gHn6f3aZQoKa3cmdF2vQhn8xSqE8BJ tPvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=BY7Gc35l; 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 hv12-20020a17090760cc00b0084d4733f92bsi6323040ejc.1006.2023.01.10.13.20.33; Tue, 10 Jan 2023 13:20:34 -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=BY7Gc35l; 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 CC21668BCBD; Tue, 10 Jan 2023 23:20:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 772DA68BD26 for ; Tue, 10 Jan 2023 23:19:59 +0200 (EET) Received: by mail-lj1-f174.google.com with SMTP id bn6so13930319ljb.13 for ; Tue, 10 Jan 2023 13:19:59 -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=RdrQaQG9eKOtRdgrwP3jiovz7OqKRLv5CdDJeazlFcg=; b=BY7Gc35lxuwhS6KamsY8MWh5pKG2k9QoMqcxjswWUryGj6F7Xxy1D/iJnRp4/8XCtA QUj1VPDtaWk6h2DQ2atoM4dHF1B/uMqqm/lKNkKdR9A2Dhc+P2YPJgnIFIFrEEYV3crM /9c9My1/+GOAx6ddSWTJ9+00FyZRNJQ1NsyKTmcZKrMdbor5n1ForZ2EgidjZTjDM7Fs FnjOZmwsHI7WLHJcR/LBklBP5tGdN2tkXuoLAmohAHsDwGWdPPtxmzSFRphTs6YlXNjx VsKxeR1OiJOxfkORTfPfnV5YK99BalF17pAZdWwZe8jtZ5LKKr6/Zi5c0GMFwfYispTc GG7A== 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=RdrQaQG9eKOtRdgrwP3jiovz7OqKRLv5CdDJeazlFcg=; b=pUV90HCqJ1bdNtYgOQKx+I2dTpJut+kP8keF8Oo+6ieW1RhSmkp3O6H2JzZfLQZImd bN+tz9nPrP6SY22gF9A0/UkQBR7fQYc/pRc9TNhILPixgKSzRFQ47HYDKDEA1JqJ4dKX XHEM5C0DqWOOMsP4yMPchIKlWUCVaQXoAX0AXYv1hsby+f1N6202PT5nT+xj1mpdU91V 0ICZoH7Lf3hrDqgFebDvAjZfq+9ItYuuZsUbu8nymj5ael9Z08D8X8tzIqhtnyCrPTiw gVtdJPUrefxks6fclrYAtX+8KijA0VHlcO0uY2W4X79pzWdJnOx/y9JeeOHd48ibVvUG Iesg== X-Gm-Message-State: AFqh2kppuElHNezndaLHijC1fNArgIwbTfutAhnLx/GGFk7s1UBfrc/2 erbE0p/vePX2CwTWmg8mO2P49ZoX4t8= X-Received: by 2002:a2e:544c:0:b0:286:372f:dcd8 with SMTP id y12-20020a2e544c000000b00286372fdcd8mr1666167ljd.12.1673385598687; Tue, 10 Jan 2023 13:19:58 -0800 (PST) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id r4-20020a2e8e24000000b00283ad9caa59sm1142240ljk.140.2023.01.10.13.19.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Jan 2023 13:19:58 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Jan 2023 23:19:49 +0200 Message-Id: <20230110211949.8195-4-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 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: Vq58iJVVa7cM 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 | 47 ++++++++++++++++++++++++++++++++++++++ libavcodec/h2645_sei.h | 8 +++++++ tests/ref/fate/hevc-dv-rpu | 12 ++++++++++ 3 files changed, 67 insertions(+) diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c index 3ff89e4fdd..5083079cb1 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,8 @@ 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 = (H2645SEIAmbientViewingEnvironment){ + .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]