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]