From patchwork Mon Mar 18 16:54:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47189 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:958e:b0:1a3:31a3:7958 with SMTP id iu14csp1140178pzb; Mon, 18 Mar 2024 09:58:38 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWY9A4zBd86XDW1u/jONAovK+6IoDzSrxT/mMiKVAKE4H2H1ky43dABITiXBZwdLIJgZGZI3nZpq3DAhP1OnGpbJkpuAgsigV8jLg== X-Google-Smtp-Source: AGHT+IEYSuEYciJZ7x8nhEm+tlMdG9W2y+FiWbHRHtVo6SRVnfsOR+6p2s0UqSxb47QES8sfRziY X-Received: by 2002:a05:6402:f14:b0:569:efc7:f4c0 with SMTP id i20-20020a0564020f1400b00569efc7f4c0mr67763eda.9.1710781118686; Mon, 18 Mar 2024 09:58:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710781118; cv=none; d=google.com; s=arc-20160816; b=PJIrBTsFkSHoC9qiEkyxGojAvcVKYy/sL+MEyHBis4I5SmrmnVdkqGxSl+ii6gpbn0 eUuzg80g4THGI5rM8HOgPnfETJumS4n0vGq4JCuFRiM9e47lSOi3jPyCI3SYn22T6RsT fR/0tkI6g0FFYWrYFpYSUWAfmlNu3zixe1PPB/fRKVwU9vWBt1OAWwGIONvqrhiRjbcO dMkFVWAnZ6thEWoANC6MIn+5W6wSnJxh6LJp8NKG8KWhNuyFf70Lu+ZmrG8BvnXr57kj cMnD1nWqFjjkasolhFsqwGvIEaYwKVUUTW8LJ+uObA+GuZG3OkmPKJDNbspli+UVOwJe 7JFg== 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=ZdRCxmcml0hGwPDypBMju9eS+iZLhOLZ1tdXk5ZKhgA=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=bIZ8ixcdMOdaAnQT3gCc+QzIipZ0wRcXjHMBlE/macPsPHjWzVNdfRtnd/gtdBn9pT iaaUZjh4hMynJwXXrExc1ICFU3H/M3opnw4rGCjH8XBu9vcBVdRvIuBL0iCJSbTJvW7u wN7RuOfFfXuQu020YscZAWqnfqN0f6yHWkK/p3vQzLXWWwY1WPUpZiYidrwtOJ9MQ2zq +KnDcVoQtwTF6npB1pnO9FuCscgfoT5keQ8dZfGGj0O/6KLW2McdSjNKzNweC2BHl+to qnHMjhMeuRoaHUZzvUfv4IwlTQ998yF4NVj7uQ11dtz3o91127yQcf7R8zM3YDpq2RvG k0qw==; 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=p3RGFvqa; 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 h12-20020a0564020e0c00b0056864e7a9d7si4722542edh.519.2024.03.18.09.58.38; Mon, 18 Mar 2024 09:58:38 -0700 (PDT) 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=p3RGFvqa; 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 F366468D390; Mon, 18 Mar 2024 18:57:15 +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 1920D68D33F for ; Mon, 18 Mar 2024 18:57:03 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1710781020; bh=RgojIXrRcagtre+PHqnhohY0+oh56iWS+Phj+YWA+zI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=p3RGFvqaBVhzUal+DEwVMTF7qifOTg+T2mj40hiB81crNKX6hkOnexu9AgHDoKrXq 1Y0Zh1UW+b5wRQ4TkkcI3gzD8OA19vOheGvJvJIC39UiFepxshor8d2OqRt8969Cd3 9aKuCiNjyMkDIJq5zK+kpA/yhEK0Zdk5bxcxlTqg= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 33A6946F57; Mon, 18 Mar 2024 17:57:00 +0100 (CET) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 18 Mar 2024 17:54:20 +0100 Message-ID: <20240318165651.75520-13-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240318165651.75520-1-ffmpeg@haasn.xyz> References: <20240318165651.75520-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 12/13] 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: x2FHxOStUlOG 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 | 25 +++++++++++++++++++++++++ libavcodec/h2645_sei.h | 3 +++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 708434ac76c..824845276ae 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -105,7 +105,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 73f894436fd..ea6d596ba39 100644 --- a/libavcodec/h2645_sei.c +++ b/libavcodec/h2645_sei.c @@ -209,6 +209,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_byteu(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: @@ -702,6 +720,12 @@ FF_ENABLE_DEPRECATION_WARNINGS avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN; } +#if CONFIG_HEVC_SEI + ret = ff_aom_attach_film_grain_sets(&sei->aom_film_grain, frame); + if (ret < 0) + return ret; +#endif + if (sei->ambient_viewing_environment.present) { H2645SEIAmbientViewingEnvironment *env = &sei->ambient_viewing_environment; @@ -798,4 +822,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..b9a6c7587b1 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; + AVFilmGrainAFGS1Params aom_film_grain; } H2645SEI; enum {