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 ED74048DBA for ; Fri, 26 Apr 2024 13:24:36 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3BF2F68D418; Fri, 26 Apr 2024 16:24:34 +0300 (EEST) Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 44B0C68D112 for ; Fri, 26 Apr 2024 16:24:27 +0300 (EEST) Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-56e78970853so5592095a12.0 for ; Fri, 26 Apr 2024 06:24:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714137866; x=1714742666; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ieOlStzSomH9t5U/Ln+v2Jxo6PAqtocsThFwunzZCAI=; b=WlX27txLiguKWe1Lw7Dyg9gkC7USHaQkiLbM95pPDQg+XZbypj3hQb82CO4QZx7hwy H2LObjFBvFnD2DBbBUI1ai0/QbMF7nSMPeaR15ZXEA/lW0sIFLAQVbzU00J3+JUWN+Lm NRr6sZ18AJHgxgi2pM5EzCkZZEswVkJkXCeVkS1/8soGZl6sK/8k/TBAYaLRuHzo6Vlj umuSePhtlhdXVnRUGTfCJnNt1DJSPcDzSr5VHjhi4EvE0BBedE+uWwNz/4je8wzVR/XH jOTxU9eUWOZvln1T/SZ2fCcU/6zGe9bBkh8m3/SBxS3mMqrtR7fd9nNjOQ9HjJeccoYE XIwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714137866; x=1714742666; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ieOlStzSomH9t5U/Ln+v2Jxo6PAqtocsThFwunzZCAI=; b=meVsX6PVnDZ3UztFztx+tikjTtvUFNhFBOWwgljJqDGvd9s/Ng//wi1wb7azvYxKyt o6ARO/Vlx2S0CV1MODSYXpFWBkDAifyKZ/mmkLICd6EjXCJNSOARf/EfQWSaR7z/bFan Tn8AL4D6TnGlcly1CCjcOBTgmuov3hv0fJagjPiQzx6joNYxelO+lDBFpZBn9gpgmH+6 g6PdMx2wDbwFOcqs4GlSPR1w+8Mtor14/WdHK36Cfw/2s/stCcVZ5457TkGXuDXmD/4C shlSciOWAlZXoEMP3IjHdGLqaaSwqzI/+TW7BqsRkfGWCcj1SoHyQyy6lpInLT/g/3w+ cLXA== X-Gm-Message-State: AOJu0YyVfS65O1vWxaxd/5f9Ixu//8Fcar6R9xO2VxXoikEIwaK+lBuK VM4cMoZ3Zlu1KltSumddKAUFmF+7Nq4gWFT9gvIdI00w8psxqUE/5CgXvg== X-Google-Smtp-Source: AGHT+IG5tjNHh1utIzz0GZRh5mZlrnO1EFCnh5h2Z6RO2yvflmlm4zxKU1fAGdYFp7jniz/0oPoHJg== X-Received: by 2002:a17:906:1950:b0:a58:9899:89ab with SMTP id b16-20020a170906195000b00a58989989abmr2314464eje.22.1714137866148; Fri, 26 Apr 2024 06:24:26 -0700 (PDT) Received: from [192.168.178.30] (dynamic-2a01-0c22-b00c-1500-105c-4ecd-6494-83c2.c22.pool.telefonica.de. [2a01:c22:b00c:1500:105c:4ecd:6494:83c2]) by smtp.gmail.com with ESMTPSA id h2-20020a170906398200b00a4df061728fsm10587969eje.83.2024.04.26.06.24.24 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 26 Apr 2024 06:24:25 -0700 (PDT) From: epirat07@gmail.com To: FFmpeg development discussions and patches Date: Fri, 26 Apr 2024 15:24:23 +0200 X-Mailer: MailMate (1.14r6022) Message-ID: <73429D3B-251E-4BE0-9ED0-5378027FC39D@gmail.com> In-Reply-To: <20240426122803.19967-1-ffmpeg@haasn.xyz> References: <20240426122803.19967-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH 1/6] avutil/frame: add av_frame_remove_side_data_changed 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 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: On 26 Apr 2024, at 14:27, Niklas Haas wrote: > From: Niklas Haas > > Many filters modify certain aspects of frame data, e.g. through resizing > (vf_*scale* family), color volume mapping (vf_lut*, vf_tonemap*), or > possibly others. > > When this happens, we should strip all frame side data that will no > longer be correct/relevant after the operation. For example, changing > the image size should invalidate AV_FRAME_DATA_PANSCAN because the crop > window (given in pixels) no longer corresponds to the actual image size. > For another example, tone-mapping filters (e.g. from HDR to SDR) should > strip all of the dynamic HDR related metadata. > > Since there are a lot of similar with basically similar operations, it > make sense to consolidate this stripping logic into a common helper > function. I decided to put it into libavutil as it may be useful for API > users as well, who often have their own internal processing and > filtering. > --- > doc/APIchanges | 3 +++ > libavutil/frame.c | 31 +++++++++++++++++++++++++++++++ > libavutil/frame.h | 14 ++++++++++++++ > libavutil/version.h | 2 +- > 4 files changed, 49 insertions(+), 1 deletion(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 0566fcdcc5..26af725528 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2024-03-07 > > API changes, most recent first: > > +2024-04-xx - xxxxxxxxxx - lavu 59.17.100 - frame.h > + Add av_frame_remove_side_data_changed(). > + > 2024-04-24 - 8616cfe0890 - lavu 59.16.100 - opt.h > Add AV_OPT_SERIALIZE_SEARCH_CHILDREN. > > diff --git a/libavutil/frame.c b/libavutil/frame.c > index 0775e2abd9..d5482c258e 100644 > --- a/libavutil/frame.c > +++ b/libavutil/frame.c > @@ -1015,6 +1015,37 @@ void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type) > remove_side_data(&frame->side_data, &frame->nb_side_data, type); > } > > +static const struct { > + enum AVFrameSideDataType type; > + int aspect; > +} side_data_aspects[] = { > + { AV_FRAME_DATA_PANSCAN, AV_FRAME_CHANGED_SIZE }, > + { AV_FRAME_DATA_MOTION_VECTORS, AV_FRAME_CHANGED_SIZE }, > + { AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_CHANGED_COLOR_VOLUME }, > + > + { AV_FRAME_DATA_SPHERICAL, AV_FRAME_CHANGED_SIZE }, > + { AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, AV_FRAME_CHANGED_COLOR_VOLUME }, > + { AV_FRAME_DATA_ICC_PROFILE, AV_FRAME_CHANGED_COLOR_VOLUME }, > + { AV_FRAME_DATA_DYNAMIC_HDR_PLUS, AV_FRAME_CHANGED_COLOR_VOLUME }, > + { AV_FRAME_DATA_REGIONS_OF_INTEREST, AV_FRAME_CHANGED_SIZE }, > + { AV_FRAME_DATA_DETECTION_BBOXES, AV_FRAME_CHANGED_SIZE }, > + { AV_FRAME_DATA_DOVI_RPU_BUFFER, AV_FRAME_CHANGED_COLOR_VOLUME }, > + { AV_FRAME_DATA_DOVI_METADATA, AV_FRAME_CHANGED_COLOR_VOLUME }, > + { AV_FRAME_DATA_DYNAMIC_HDR_VIVID, AV_FRAME_CHANGED_COLOR_VOLUME }, > + { AV_FRAME_DATA_VIDEO_HINT, AV_FRAME_CHANGED_SIZE }, > +}; > + > +void av_frame_remove_side_data_changed(AVFrame *frame, int changed_aspects) > +{ > + if (!changed_aspects) > + return; > + > + for (int i = 0; i < FF_ARRAY_ELEMS(side_data_aspects); i++) { > + if (changed_aspects & side_data_aspects[i].aspect) > + av_frame_remove_side_data(frame, side_data_aspects[i].type); > + } > +} > + > const AVSideDataDescriptor *av_frame_side_data_desc(enum AVFrameSideDataType type) > { > unsigned t = type; > diff --git a/libavutil/frame.h b/libavutil/frame.h > index 60bb966f8b..7e07ecf91f 100644 > --- a/libavutil/frame.h > +++ b/libavutil/frame.h > @@ -983,6 +983,20 @@ AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, > */ > void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); > > +/** > + * Flags for stripping side data based on changed aspects. > + */ > +enum { > + /* Video only */ > + AV_FRAME_CHANGED_SIZE = 1 << 0, ///< changed dimensions / crop > + AV_FRAME_CHANGED_COLOR_VOLUME = 1 << 1, ///< changed color volume > +}; Maybe give the enum a name so you can properly link to it in the docs? I guess using the enum type instead of int in the fuction parameter is not really allowed because it can be other values than the enum has, by combining flags, which I guess is not allowed by the C standard? > + > +/** > + * Remove all relevant side data after a corresponding change to the frame > + * data, based on the given bitset of frame aspects. > + */ > +void av_frame_remove_side_data_changed(AVFrame *frame, int changed_aspects); > > /** > * Flags for frame cropping. > diff --git a/libavutil/version.h b/libavutil/version.h > index ea289c406f..3b5a2e7aaa 100644 > --- a/libavutil/version.h > +++ b/libavutil/version.h > @@ -79,7 +79,7 @@ > */ > > #define LIBAVUTIL_VERSION_MAJOR 59 > -#define LIBAVUTIL_VERSION_MINOR 16 > +#define LIBAVUTIL_VERSION_MINOR 17 > #define LIBAVUTIL_VERSION_MICRO 100 > > #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ > -- > 2.44.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". _______________________________________________ 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".