From patchwork Mon Feb 26 14:35:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 46544 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c51b:b0:19e:cdac:8cce with SMTP id gm27csp1404599pzb; Mon, 26 Feb 2024 06:35:56 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXtyIAOvI/RCxg1ZImhR09d5cuLiEJtiOt1pi3+bEmgyuXG07JzlOYbaHjVKsTdvcAj5LFCiNqJu79oqsQE9l0W4BAaR6Xf6Ev3+A== X-Google-Smtp-Source: AGHT+IEzsxdlIEoIAv5VbOOz7TzTEJXXZx4Y5rHwdjq66U06BFRazC0LM7muMeZkxipFDuc1qO8f X-Received: by 2002:a17:906:3685:b0:a3f:ac54:eb68 with SMTP id a5-20020a170906368500b00a3fac54eb68mr4619966ejc.69.1708958156241; Mon, 26 Feb 2024 06:35:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708958156; cv=none; d=google.com; s=arc-20160816; b=EGleMfqFZyv8oj0cOIVKk8FDNJngC5zagobQiDreUYp/QFx76Lgsv7puFyPEPZcXlo 7UTDkn7WQ7S6uad1Q53aBiIL+ZCjwDbH4eOJRL/RJ0bMPvWoN61ForCg+ly9KueWi+Sm 9lkyNqC0OOl9RYlB9o5bnNBh/GwlCazM3SoVjd8vsJznEKfW3NaneGLDujp3uQKplsfd ZrYdBYOEA6o8voaWHX+3mOtxBSLX8mK9rp3Q9fhCxw5e9P9yR990go6oTy9hz0ToBXOb 4zrDzq42EYgQvjszxlZVEVRLhyUSHD6eQZSV6AkTfcvsjomWOJ4o1IT8XJQDzB2qk6Lh 7Uhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :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=maYPRkxpaOI9ZwexhBhyajRyKuuNc5ISouXGHroCKj8=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=tJWglmGVQU5WegSZnOSnKyXAQFyv6UAEvsOuqBaQYhU8iEixfdfOLoKQ1DtkDL9cil XAUMInZqYZqpkchpcZoHcqjT1RPRBIyRKqCK/s5lOD6cuDaa97UjR+3eu58+32Qyq8QI PWuDCj2atOQIVP99Ab8Akvl6udRUJbOoGrgCD9geSE0pWfYLH4FmrjBSxYyrTy1FREmh DdsieDkJ4f1bRMVFBvATgkOR4T6ndlKLCTVUqm4O0QSWUtRY5EkFVbhssbRcxJoFUkwU d8uq7pnzWv+bfw4eUMJcYnq47SFbxMHzNaeYd6SFpUgv+MUx3Rb2VEosg/f1X0NEdoGT fX7Q==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b="aC2mN/YP"; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id mj11-20020a170906af8b00b00a3d991c4f5dsi2237030ejb.954.2024.02.26.06.35.55; Mon, 26 Feb 2024 06:35:56 -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=@haasn.xyz header.s=mail header.b="aC2mN/YP"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3E8C068C865; Mon, 26 Feb 2024 16:35:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A7A7A68BF54 for ; Mon, 26 Feb 2024 16:35:25 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1708958125; bh=o9B0fctl2uj3U1bWjnJvXB4HGm5yF5rA2pmc4piUJvA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aC2mN/YPN4ApSCOyyY5rhIOgUMA5GSD9Ucn8MIzTn0iJWrJvCYRiFwv5b5z0WV1PW KV52RUkI07uMYONnNWi+C3Qi1o/oHdhZ6NH8m4sOxzeCr3PCuzgxAzs/p7P5rldL+l d2TS67LMbA4IaKybKc5+I7CmbIwYfOMPh/kuvd/M= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 687984105D; Mon, 26 Feb 2024 15:35:25 +0100 (CET) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 26 Feb 2024 15:35:13 +0100 Message-ID: <20240226143521.57913-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240226143521.57913-1-ffmpeg@haasn.xyz> References: <20240226143521.57913-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] avcodec/h2645_sei: decode AFGS1 T.35 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 Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 8WlTMarbOGDp From: Niklas Haas I restricted this SEI to HEVC for now, until I see a H.264 sample. --- libavcodec/Makefile | 2 +- libavcodec/h2645_sei.c | 38 ++++++++++++++++++++++++++++++++++++++ libavcodec/h2645_sei.h | 3 +++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 09ae5270b38..d86b4018405 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -107,7 +107,7 @@ OBJS-$(CONFIG_H264_SEI) += h264_sei.o h2645_sei.o OBJS-$(CONFIG_HEVCPARSE) += hevc_parse.o hevc_ps.o hevc_data.o \ h2645data.o h2645_parse.o h2645_vui.o OBJS-$(CONFIG_HEVC_SEI) += hevc_sei.o h2645_sei.o \ - dynamic_hdr_vivid.o + dynamic_hdr_vivid.o aom_film_grain.o OBJS-$(CONFIG_HPELDSP) += hpeldsp.o OBJS-$(CONFIG_HUFFMAN) += huffman.o OBJS-$(CONFIG_HUFFYUVDSP) += huffyuvdsp.o diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c index cb6be0594b4..2a03ebf928c 100644 --- a/libavcodec/h2645_sei.c +++ b/libavcodec/h2645_sei.c @@ -208,6 +208,24 @@ static int decode_registered_user_data(H2645SEI *h, GetByteContext *gb, } break; } + case 0x5890: { // aom_provider_code + const uint16_t aom_grain_provider_oriented_code = 0x0001; + uint16_t provider_oriented_code; + + if (!IS_HEVC(codec_id)) + goto unsupported_provider_code; + + if (bytestream2_get_bytes_left(gb) < 2) + return AVERROR_INVALIDDATA; + + provider_oriented_code = bytestream2_get_be16u(gb); + if (provider_oriented_code == aom_grain_provider_oriented_code) { + return ff_aom_parse_film_grain_sets(&h->aom_film_grain, + gb->buffer, + bytestream2_get_bytes_left(gb)); + } + break; + } unsupported_provider_code: #endif default: @@ -690,6 +708,25 @@ int ff_h2645_sei_to_frame(AVFrame *frame, H2645SEI *sei, avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN; } +#if CONFIG_HEVC_SEI + if (sei->aom_film_grain.enable) { + const AVFilmGrainAOMParamSet *fgps; + fgps = ff_aom_select_film_grain_set(&sei->aom_film_grain, frame); + if (fgps && fgps->apply_grain) { + AVFilmGrainParams *fgp = av_film_grain_params_create_side_data(frame); + if (!fgp) + return AVERROR(ENOMEM); + + fgp->type = AV_FILM_GRAIN_PARAMS_AV1; + fgp->seed = fgps->grain_seed; + fgp->codec.aom = fgps->params; + + if (avctx) + avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN; + } + } +#endif + if (sei->ambient_viewing_environment.present) { H2645SEIAmbientViewingEnvironment *env = &sei->ambient_viewing_environment; @@ -779,4 +816,5 @@ void ff_h2645_sei_reset(H2645SEI *s) s->ambient_viewing_environment.present = 0; s->mastering_display.present = 0; s->content_light.present = 0; + s->aom_film_grain.enable = 0; } diff --git a/libavcodec/h2645_sei.h b/libavcodec/h2645_sei.h index 0ebf48011af..e5fcfd4e0c2 100644 --- a/libavcodec/h2645_sei.h +++ b/libavcodec/h2645_sei.h @@ -23,7 +23,9 @@ #include "libavutil/buffer.h" #include "libavutil/frame.h" +#include "libavutil/film_grain_params.h" +#include "aom_film_grain.h" #include "avcodec.h" #include "bytestream.h" #include "codec_id.h" @@ -132,6 +134,7 @@ typedef struct H2645SEI { H2645SEIAmbientViewingEnvironment ambient_viewing_environment; H2645SEIMasteringDisplay mastering_display; H2645SEIContentLight content_light; + AVFilmGrainAOMParamSets aom_film_grain; } H2645SEI; enum {