From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id D69A645173 for ; Tue, 10 Jan 2023 21:20:31 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 901ED68BD60; Tue, 10 Jan 2023 23:20:07 +0200 (EET) 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-Google-Smtp-Source: AMrXdXtHUYjd6PjCYHK63Ge6r5klq9KQgfiVLWuEv8txT/qE3Iwwuhyj6aVW+iE1sRLhNujnchrp0w== 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=20Ekstr=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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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] -- 2.39.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".