From patchwork Fri Mar 15 11:59:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47106 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8c91:b0:1a3:31a3:7958 with SMTP id k17csp194499pzh; Fri, 15 Mar 2024 05:06:25 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWF2yf5MspyX/v9DFskJFZLYdVREbjB76BX2lfW8zc2rw5YOMJC3vfaVvoCOWclFbEBu/L9IS9SqW5WybZCiLmB9kLrG9ueHG978A== X-Google-Smtp-Source: AGHT+IHP1NoZU9hi8YcCqc+75iGWFBhpr2smLfTgu+LOxDGL6A7WZTalpBwmZ96JwhOVEsgCSUwz X-Received: by 2002:a05:6402:380b:b0:568:9b13:77fc with SMTP id es11-20020a056402380b00b005689b1377fcmr2463635edb.36.1710504385612; Fri, 15 Mar 2024 05:06:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710504385; cv=none; d=google.com; s=arc-20160816; b=O2wwOtxFjjiGhTQfrwkDVEODT5XRplb8oEpfaWuHai7jIf2dVd/6K+RAOqdgqpxt15 R/HoDFRYlDuQEtkpOjkjR7ICl4jfjvJJ8jMCuFOQQWSTUtf2Z/3j+oPQQLRG70ObK00s +uzZ36Q2dV9WBJE9b613SAzxxYeQoRtaPL+XHxIMWo9oA55WXVTuVWmdPoxTOjmMZkvK PlCDjxnKCHlQs3wuT4w08s5UsWrAZM5JV9yNqTUDclRo/yB0xz5z7pxrsIOE24wYJo4m yVGTWVCmuoXT63rH3iESBtdyFq6h2WyVixHsqHYQm857K3fQDNWUm93iJFzHpUKRp5Ce RojA== 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=RKozTO2tYKD3y75ruqnvaRa6+NC3JKXhl0y5HYgVd7w=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=I2ltPbnwtOUOEkcvZ0arITMS80v/Q0dDI6U/8qXyJIfq5txflpPM3bfXr5U/XidlVF JmqwkhZP9wSRWtr2d5qgELOtvN9BN//oiHRWq1QBC5Ehb4k3n07Uupq9p7bgm/xtOFiX wGZbTzH3ST8DKYwe6w3ytOKcTGx8QItacTR3CzguvFnrRajb1Wd+yDDUl4u7O2KUIcsE XXh4ysQ4LDFwGMekosFIy2A5CRhkE1QfVLF26XQoIeTmcoYZ0vhJ2OLV8OQwwn8JyhvH YnDa+6M5z6sZhEnjmKrbQsTFiDrX0FypGowjFxPJa3GAaiiyIyO6AqpY5LGpzgaafcAg znVg==; 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=finyzGAQ; 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 r17-20020a05640251d100b0056869ae4414si1719101edd.55.2024.03.15.05.06.25; Fri, 15 Mar 2024 05:06:25 -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=finyzGAQ; 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 36E6668D1CD; Fri, 15 Mar 2024 14:05:02 +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 C571A68D171 for ; Fri, 15 Mar 2024 14:04:51 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1710504288; bh=gkDZKZ+Msg9vVA2YIzUC6pmquae0OqLBh/b3c8bm6Xc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=finyzGAQQyzksOa2UVJv6TX8WG7ZhxhBkwDrLNMHlZWaYgPq9OGTmEYXC0UY2sigr KpT9Kwgb+2iv8Z5F0gaN4IAh7sQEYuGlYhrl5TtHtFuXZZCTz9oZEGM7NYMRpSnYCb s2PaAeWHcFzgx3ObRNZQhgNZSlUGa9ZMm1Aw8Wj8= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id EB35842A98; Fri, 15 Mar 2024 13:04:47 +0100 (CET) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Mar 2024 12:59:01 +0100 Message-ID: <20240315120442.73754-9-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240315120442.73754-1-ffmpeg@haasn.xyz> References: <20240315120442.73754-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 8/9] 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: IJZoRsviajsN 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 e60606f43f9..2e79b9ea78b 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: @@ -692,6 +710,12 @@ int ff_h2645_sei_to_frame(AVFrame *frame, H2645SEI *sei, 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; @@ -788,4 +812,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 {