From patchwork Fri Apr 26 12:27:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48269 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1509:b0:1a9:af23:56c1 with SMTP id nq9csp333456pzb; Fri, 26 Apr 2024 05:28:17 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW7QVKjGeLtRakaHmX6Rd7E5WGIii7NiOO1Y7pz1lUJd4tt020XlIjohK+/jSe7ymJ4sol6u6CZgAzB2KaJocv9eY88CKK4nfNY2A== X-Google-Smtp-Source: AGHT+IHzcVVIve4fR2kqoMnHkIIIINrSZsO9uTa6LG+NtliUHFKNvZx/l2QtfOju2dhL8I5QuyMq X-Received: by 2002:a17:906:f199:b0:a51:d7f3:324b with SMTP id gs25-20020a170906f19900b00a51d7f3324bmr1857782ejb.66.1714134497398; Fri, 26 Apr 2024 05:28:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1714134497; cv=none; d=google.com; s=arc-20160816; b=s1JAKVm9K2N2yO1FvsH/foY1M2qDPyMEtfdJq1au7MqmZm1PaAe9JVBoBZQyg7BUdi i4nZuw1rBCUVRlSqGJIkj4aJvqCJBhuYKxe6QHnz45R2ZBL9GDuE/miVuVjDwnlxeU5O Zf3X2+vAuxQ3KmHtxun0udPGY+3uLrJEFM3j3Gg9R5eOahihMcH6qrJAWCIy8YcswTLc qgI12ZAI7bEfeo5yC0rnw6Ph+i6I3cNvGwRA/UHMFyj5GUb1+Cgeay9GWzbJylW6D5ZZ MDYRBoju7dWJLWxsVhwRMu5730wU51viIHuKoGH3YyKOOY4mINuTi9BBgWAVYAyHdwlo rVFw== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=Ni8nG7+FFLYgh+UVnTDs+S2qwj5+rMq8fb8KdSjGJ3o=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=LHGLPZJs6Dd3fXBEoRzNIhBCB8VX+NFCGi53uK+7abNp3r2RuX2SypkvSHGuqXJa0q 0qhzcKsISppLbg3XstZzgVMfU72z270cTPQa3BnQkK5Hrp0T2fqzsj5Ux5c3P9bqhtyY wRMlZUJGtKNzQ70IRvb7iWX9/ZdzCOrLF9N4N3bZ+U7Eu3jcXhPsGi26btSCamngZDfY d6jBvxiKxla7OB5joLk7Qu5E+/l0GlIwdtQE2tdjkdhLAlNuNWaEBlfDsguAivzAR26J IzRKRMKSvUA6dKqMrKxHw7xouc/ltLni169V4KvrrXcg231dXyUzMLX5UbOGCkEWyhbv ipwQ==; 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=odyi6+5k; 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 me22-20020a170906aed600b00a5250f9fcf4si10973339ejb.898.2024.04.26.05.28.16; Fri, 26 Apr 2024 05:28:17 -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=odyi6+5k; 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 8600B68D438; Fri, 26 Apr 2024 15:28:13 +0300 (EEST) 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 C8BCD68D281 for ; Fri, 26 Apr 2024 15:28:06 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1714134486; bh=ZYpM89APXSnj87yfUIJLCykmsQAYo84naHBe5SSwCeE=; h=From:To:Cc:Subject:Date:From; b=odyi6+5kWtJ3as4L2BVDERV4h+RmYhse6D9ZdCAYtT31xhlHZCI8v87p9S7nxfUfq 7ggw7Qp37e8hmOoDFrSQ/MNFHvnMso0EMmXo5EyBFhAWFDg3KxiX/3B38HzPV8alPc RURZX16fEwTpSbJW+/ePnk735wVcX76m9gydNFEk= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 3212340044; Fri, 26 Apr 2024 14:28:06 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 Apr 2024 14:27:58 +0200 Message-ID: <20240426122803.19967-1-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 MIME-Version: 1.0 Subject: [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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: y27Ddu4aSmmY 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 +}; + +/** + * 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, \ From patchwork Fri Apr 26 12:27:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48270 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1509:b0:1a9:af23:56c1 with SMTP id nq9csp333523pzb; Fri, 26 Apr 2024 05:28:27 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVgEjG2iOU3k8F3xaZMYJuT95FQZ7UnnzM8zDVlwGIbI9A4/qXyEni06JsD2EW5i6dmSRFtoO0MD+sbFNue7sYCz5Hrbs909gUUQA== X-Google-Smtp-Source: AGHT+IHbUJ91toTxVrUZevUs1vWS239Eqp8OvrF0uQL0zRlJI4nGMU0S4DudXpUOI9Vd47lEYKku X-Received: by 2002:a19:381a:0:b0:51c:7a01:6ea2 with SMTP id f26-20020a19381a000000b0051c7a016ea2mr1511369lfa.6.1714134507090; Fri, 26 Apr 2024 05:28:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1714134507; cv=none; d=google.com; s=arc-20160816; b=c3clmCgrlFiX1gkX3fYbQH8iDdRUl3WoMFCi4NmFn7Z0bixxUAoq4MlK4Qm0QxUjm8 7Njt1egqLewhThyIPjcf8VUhpNEKSgR15sDO/BxlS4BdfsDKPFYMHILvpkOOhHJhzxo9 Q/tF5vPGRMZ1HIuQbMnRteV3TvLeNxs0Pgj5ZcjfzTEVYMtVovJPVbu16O6o8umFKlj1 nLzoKxNl/POvVUv14Tx/AiOhiq3jW3X8EpxEIoX4SfjmaIUW16E5+B/OtyVZV1VQVBc9 jEnyr2zA5ptfsBWdsKa4SsAIPPQJgZJtBJDp4qq8OFi1Ufe+jBdQVa1dAf9w9tzliwRc vpUg== 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=ByarjMohcsvGF93Dy4yqE/c3Zk583FrEMX3swOUxW4o=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=kHYfmEX6/SG38FnF1iPNJg0+rOXp1052ZxAv0kCO8uq6WPfVdP9Qqid8uKxq/jX3Bj C0nukdbW6qVQOx/cS6DNPpg13Nm0soPRrBtSxCyGNAzqjIZdbGzioUfgVWuhjsYtsn97 B1fUv7LvOQs7w72cPIfw4a4vM08EqaTVcEKBxl2cYlm8iciw+8F3V2u9Q30cshfVtASy 1ts7EtKTpmJlBmH7Rky78CXH+mDQgo8N2+UFwZ247NSOTKcD4GK5mWtCwzWDWIoC6FfU RdVzMMNG42kNw+1vwbPDtX8+k7NP9cfC2xDVE+RJVSxOg4T1HGcZ/GJQgSOPi8SCxFfB o5Ew==; 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=ndBNjyoE; 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 dv25-20020a170906b81900b00a58db255493si135920ejb.592.2024.04.26.05.28.26; Fri, 26 Apr 2024 05:28:27 -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=ndBNjyoE; 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 CE50068D43E; Fri, 26 Apr 2024 15:28:14 +0300 (EEST) 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 CC03668D412 for ; Fri, 26 Apr 2024 15:28:06 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1714134486; bh=O9MrkcjVzUDMgn/l+WPChPulp9mqHEJd2RtF4cBMfh0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ndBNjyoET0lauNZKSYxHCARBnFtsu3x3kpdzDnolouaFN7wIz04c60Im0UfV/szBm wvv7pXJWDksH6XkE6auw07SfGrzt/ujO0NbqrqXUeJPZJ5GdTQ+sxO6S/XY2tdJqbO SOeO2FzWqcnLTGXoyf+RFlKGlkKza0wD87L4nPK8= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 698D440356; Fri, 26 Apr 2024 14:28:06 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 Apr 2024 14:27:59 +0200 Message-ID: <20240426122803.19967-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426122803.19967-1-ffmpeg@haasn.xyz> References: <20240426122803.19967-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/6] avfilter/vf_scale*: strip metadata on size change 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: UK9bfZaceC39 From: Niklas Haas --- libavfilter/vf_scale.c | 2 ++ libavfilter/vf_scale_cuda.c | 3 +++ libavfilter/vf_scale_npp.c | 3 +++ libavfilter/vf_scale_vaapi.c | 3 +++ libavfilter/vf_scale_vt.c | 3 +++ libavfilter/vf_scale_vulkan.c | 3 +++ 6 files changed, 17 insertions(+) diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 1c07daeddf..7b9be039ad 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -870,6 +870,8 @@ scale: out->height = outlink->h; out->color_range = outlink->color_range; out->colorspace = outlink->colorspace; + if (out->width != in->width || out->height != in->height) + av_frame_remove_side_data_changed(out, AV_FRAME_CHANGED_SIZE); if (scale->output_is_pal) avpriv_set_systematic_pal2((uint32_t*)out->data[1], outlink->format == AV_PIX_FMT_PAL8 ? AV_PIX_FMT_BGR8 : outlink->format); diff --git a/libavfilter/vf_scale_cuda.c b/libavfilter/vf_scale_cuda.c index 5571a52b1e..1e381d6e52 100644 --- a/libavfilter/vf_scale_cuda.c +++ b/libavfilter/vf_scale_cuda.c @@ -525,6 +525,9 @@ static int cudascale_scale(AVFilterContext *ctx, AVFrame *out, AVFrame *in) if (ret < 0) return ret; + if (out->width != in->width || out->height != in->height) + av_frame_remove_side_data_changed(out, AV_FRAME_CHANGED_SIZE); + return 0; } diff --git a/libavfilter/vf_scale_npp.c b/libavfilter/vf_scale_npp.c index 27e5e584ae..ed09f4f301 100644 --- a/libavfilter/vf_scale_npp.c +++ b/libavfilter/vf_scale_npp.c @@ -892,6 +892,9 @@ scale: if (ret < 0) return ret; + if (out->width != in->width || out->height != in->height) + av_frame_remove_side_data_changed(out, AV_FRAME_CHANGED_SIZE); + return 0; } diff --git a/libavfilter/vf_scale_vaapi.c b/libavfilter/vf_scale_vaapi.c index 5f20b8a43c..cf7af5c68e 100644 --- a/libavfilter/vf_scale_vaapi.c +++ b/libavfilter/vf_scale_vaapi.c @@ -137,6 +137,9 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame) if (err < 0) goto fail; + if (output_frame->width != input_frame->width || output_frame->height != input_frame->height) + av_frame_remove_side_data_changed(output_frame, AV_FRAME_CHANGED_SIZE); + if (ctx->colour_primaries != AVCOL_PRI_UNSPECIFIED) output_frame->color_primaries = ctx->colour_primaries; if (ctx->colour_transfer != AVCOL_TRC_UNSPECIFIED) diff --git a/libavfilter/vf_scale_vt.c b/libavfilter/vf_scale_vt.c index af4a8b32c6..085f14d5fe 100644 --- a/libavfilter/vf_scale_vt.c +++ b/libavfilter/vf_scale_vt.c @@ -141,6 +141,9 @@ static int scale_vt_filter_frame(AVFilterLink *link, AVFrame *in) if (ret < 0) goto fail; + if (out->width != in->width || out->height != in->height) + av_frame_remove_side_data_changed(out, AV_FRAME_CHANGED_SIZE); + av_reduce(&out->sample_aspect_ratio.num, &out->sample_aspect_ratio.den, (int64_t)in->sample_aspect_ratio.num * outlink->h * link->w, (int64_t)in->sample_aspect_ratio.den * outlink->w * link->h, diff --git a/libavfilter/vf_scale_vulkan.c b/libavfilter/vf_scale_vulkan.c index 7210509de3..957f99a4d5 100644 --- a/libavfilter/vf_scale_vulkan.c +++ b/libavfilter/vf_scale_vulkan.c @@ -288,6 +288,9 @@ static int scale_vulkan_filter_frame(AVFilterLink *link, AVFrame *in) if (err < 0) goto fail; + if (out->width != in->width || out->height != in->height) + av_frame_remove_side_data_changed(out, AV_FRAME_CHANGED_SIZE); + if (s->out_range != AVCOL_RANGE_UNSPECIFIED) out->color_range = s->out_range; if (s->vkctx.output_format != s->vkctx.input_format) From patchwork Fri Apr 26 12:28:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48271 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1509:b0:1a9:af23:56c1 with SMTP id nq9csp333579pzb; Fri, 26 Apr 2024 05:28:35 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW5R8vvaE3FK+SV8HM/Xn74Z1uBzV6+Ghq1G/DvoQCc0Leo8CfBJopWyokqhxGUT9Zrw3yV5OrLQhgr7ynWcNLdX9EyHC7y0VTdMA== X-Google-Smtp-Source: AGHT+IFy75Pco0/wmhWwXCOhuhhwR4BIlEp6Ej0PGrQtt3mZFRmLSveZdD8AfZP4S9NGY4i37yWE X-Received: by 2002:a17:906:c14b:b0:a58:a1c2:50bc with SMTP id dp11-20020a170906c14b00b00a58a1c250bcmr2435790ejc.53.1714134515049; Fri, 26 Apr 2024 05:28:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1714134515; cv=none; d=google.com; s=arc-20160816; b=z/5+LVdEda/Q0Jz+IdmqPLpkLFEtMCZzH1J1bbP0tEYBbB5UG3SXmXf9pTfvC76kfH LWpQXoKSk9ermqPA9ONVO0sxBpiuijeIrKAnQUrEJjGwGznjfqYJrdZKV2fO2zmpOopU 4chHzI49itDS6RN98ifaDK+izj0x2FhD6zsljg8ARZyNffKvF5emva4N6viguZ1YPv2p B2n7y8W+RwuUI78oL4I5w5oDAkP0ExKC65n4jgZzqtq4Er1JCcteYeBosF3cKMXZCtzR rBXDRm83fXLpS1WKDYxR8ojA7lOtVVcFBIPFHVEXOu0UHKUiHBHbGxKS38gRsG9pANgH dEhw== 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=16Ok7acour29WoXYBu2ajkewB6oQuXnY5I9GEW2qkXo=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=xCAKTW+DpTIbhNl+jynm2qvgMd9lXkIq4L6XgGcxya0GBzljnZG3720kGHZ3tc6RA+ EJLKaWrVoU5c4DTVsSqF4MJOgol+PE4dGrepyo2CtG6B1d0HvfS9jPd77i0sEai2PLJL vLETrbVHHZOn/hEaQYp7znzvbSp/Wsoy/Sz5+Wk1GRu2f7yjt0VWAlqKGaWJTdjSsX2d 2M6W8DGuMCeEDDqM03XFXU0dbNgvcDWV9lPr2EgnQKRtHXsgPjgYWhejBqS5pxN8r+RZ gy4q4njQIaZfoIZ3PqXN2XVE5s+bRJc288UfbR+Ih9a3Afx+/d8bi5+Z8y5L7987e1pQ 8/SA==; 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=p85uHsAh; 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 hd10-20020a170907968a00b00a559f83ead1si9380486ejc.880.2024.04.26.05.28.34; Fri, 26 Apr 2024 05:28:35 -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=p85uHsAh; 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 0306B68D281; Fri, 26 Apr 2024 15:28:16 +0300 (EEST) 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 D620568D418 for ; Fri, 26 Apr 2024 15:28:06 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1714134486; bh=IDT14CE5LW8BEzBmjnrX5Y43Ao2QE1IYjOwAJ117RrA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=p85uHsAh7xLXkegDm40c2vnmpcgPYH8EKPkWkFCmuV5oujcPhae45bKnfFngBAKA1 2bd+3iuvnflBN4ncYk3yctn+R+aTg3hGT2s2AV4efj4JuNtoMqKxyQakjwaK9MII7y UnFNstvAMQ+3lu4zC4oAQyV78N4GgZOrUnWXHP18= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 9A4174105D; Fri, 26 Apr 2024 14:28:06 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 Apr 2024 14:28:00 +0200 Message-ID: <20240426122803.19967-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426122803.19967-1-ffmpeg@haasn.xyz> References: <20240426122803.19967-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/6] avfilter/vf_zscale: strip metadata on change 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: kaFe1SKmjKsS From: Niklas Haas Required for both size chnages and color volume changes (as a result of changing primaries/transfer). --- libavfilter/vf_zscale.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libavfilter/vf_zscale.c b/libavfilter/vf_zscale.c index 45f1bd25ce..c012464615 100644 --- a/libavfilter/vf_zscale.c +++ b/libavfilter/vf_zscale.c @@ -783,7 +783,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(link->format); const AVPixFmtDescriptor *odesc = av_pix_fmt_desc_get(outlink->format); char buf[32]; - int ret = 0; + int ret = 0, changed = 0; AVFrame *out = NULL; ThreadData td; @@ -880,6 +880,12 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) (int64_t)in->sample_aspect_ratio.den * outlink->w * link->h, INT_MAX); + if (out->width != in->width || out->height != in->height) + changed |= AV_FRAME_CHANGED_SIZE; + if (out->color_trc != in->color_trc || out->color_primaries != in->color_primaries) + changed |= AV_FRAME_CHANGED_COLOR_VOLUME; + av_frame_remove_side_data_changed(out, changed); + td.in = in; td.out = out; td.desc = desc; From patchwork Fri Apr 26 12:28: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: 48272 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1509:b0:1a9:af23:56c1 with SMTP id nq9csp333644pzb; Fri, 26 Apr 2024 05:28:43 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUehXMKBn0EUQjLfk4iqGo5dftQO774d2yaBe6KdMveIWna6M2bhFrB4KI8fFu5vZV4zip8bgYNrBw6akU8tsWszWh4KNoNpRpWiA== X-Google-Smtp-Source: AGHT+IE5WjuM4y1xqv2y8D4utzZo9HEt0DFmsB/UpMTkQT1DkqZ0CGlyXNtTHwQ/xO7TgvbLXoWc X-Received: by 2002:a17:906:270d:b0:a58:a360:9ce4 with SMTP id z13-20020a170906270d00b00a58a3609ce4mr1766554ejc.59.1714134523626; Fri, 26 Apr 2024 05:28:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1714134523; cv=none; d=google.com; s=arc-20160816; b=oCrXCwVJQOjqdy1PgdQvi9/+fL47HojAPwvYe7cNlSL4eUsQ1OTTgTNJ+hANYdlhx7 C+xNW/QkBdcnKCl0IjDwijbvLH/WrP+lAnJIkzCeUmwJDbTiP1RYcoHHfB0nIop4eC2B Z+UHjsMM7pFpqTNCr5LGV1oh4hP2dhKarrv/9dnXRyvX8/qlYWn0w2EhXn3jhlWPHJPU Hp373eDXY2z9SQYSYEhKPdW6pKqYlgSH21ChtM3OAKxwybg+LXHNTtL/ZmZWluWSTgAQ F3rqyHAYvror8+hD2t2zD1kIStQe2KFzsKs3dolTNytBwOSVFBuFckpU0FzDViuqHm83 +7uQ== 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=mVyd5bt0DzfJ9DAGcAuGEt3hGRPt5fNitzOTdk1QE7w=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=l4P3V7r+4z4inrsNU/jZvAVFPZWuGZMTFq6LeVLkq4Dmmz5YKLMrGouiz0NYlBoKwZ qESw6+mZDhEGZGC/WpGD5pUynm8Q9eWJ8K5paTUHUzkckXBZoGSPpPttawqC1XUyL1vT aD+/rUTwYJyri+grvWRNADd1fqmJDJDA0UEqPLOb82MM6t+Wt2eYJ18PfkW0p1lA6nhp C7DHZ3ECESfJFBuqFYLEJsIwfxICC38cdbL0bI1XByJYm7n1wlgmah9vX9VezkhfEHn5 TdnzL0nq/JJHiRjOk4xFzskI3L8AISLJoNTGui0HPMuE4F3nX8c4rBM6+ZMk++eXRjQY ooaQ==; 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=QvV7+XTc; 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 f5-20020a170906138500b00a58db22c4a3si140803ejc.950.2024.04.26.05.28.43; Fri, 26 Apr 2024 05:28:43 -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=QvV7+XTc; 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 5ABC668D448; Fri, 26 Apr 2024 15:28:17 +0300 (EEST) 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 1947768D412 for ; Fri, 26 Apr 2024 15:28:07 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1714134486; bh=7FeBke4bjCpnM9Lt6vqYFjWc4t+w7gETWVQerVk+8+s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QvV7+XTcNQN97PEqBvsqpY46+dESYgaWCNeWROuMo8nmmnzJjojv5zs1kDukHBAir OvNFxRp9VVYLyugh+tbsuzKHWpa/wq8vH5wJhKI/X9AgclvI19PQ5E4qGbR5uEilna QuqCK6gMXgGy6OshOPGX1MCv7EASO5W56EbUKRcY= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id CDD8B4255D; Fri, 26 Apr 2024 14:28:06 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 Apr 2024 14:28:01 +0200 Message-ID: <20240426122803.19967-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426122803.19967-1-ffmpeg@haasn.xyz> References: <20240426122803.19967-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/6] avfilter/vf_libplacebo: update metadata stripping logic 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: 0Jlb9baHmd58 From: Niklas Haas Switches to av_frame_remove_side_data_changed(), covering a number of cases that we previously ignored. Additionally, stop stripping metadata when merely changing colorspace or color range, since these do not affect the actual color volume of the image data, only the encoding. --- libavfilter/vf_libplacebo.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index be9000aa8e..17da6fc71d 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -806,7 +806,7 @@ static void update_crops(AVFilterContext *ctx, LibplaceboInput *in, /* Construct and emit an output frame for a given timestamp */ static int output_frame(AVFilterContext *ctx, int64_t pts) { - int err = 0, ok, changed_csp; + int err = 0, ok, changed; LibplaceboContext *s = ctx->priv; pl_options opts = s->opts; AVFilterLink *outlink = ctx->outputs[0]; @@ -842,6 +842,7 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) * output colorspace defaults */ out->color_primaries = AVCOL_PRI_BT2020; out->color_trc = AVCOL_TRC_SMPTE2084; + changed |= AV_FRAME_CHANGED_COLOR_VOLUME; } if (s->color_trc >= 0) @@ -849,21 +850,13 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) if (s->color_primaries >= 0) out->color_primaries = s->color_primaries; - changed_csp = ref->colorspace != out->colorspace || - ref->color_range != out->color_range || - ref->color_trc != out->color_trc || - ref->color_primaries != out->color_primaries; - /* Strip side data if no longer relevant */ - if (changed_csp) { - av_frame_remove_side_data(out, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); - av_frame_remove_side_data(out, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); - av_frame_remove_side_data(out, AV_FRAME_DATA_ICC_PROFILE); - } - if (s->apply_dovi || changed_csp) { - av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_RPU_BUFFER); - av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_METADATA); - } + if (out->width != ref->width || out->height != ref->height) + changed |= AV_FRAME_CHANGED_SIZE; + if (ref->color_trc != out->color_trc || ref->color_primaries != out->color_primaries) + changed |= AV_FRAME_CHANGED_COLOR_VOLUME; + av_frame_remove_side_data_changed(out, changed); + if (s->apply_filmgrain) av_frame_remove_side_data(out, AV_FRAME_DATA_FILM_GRAIN_PARAMS); From patchwork Fri Apr 26 12:28:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48273 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1509:b0:1a9:af23:56c1 with SMTP id nq9csp333703pzb; Fri, 26 Apr 2024 05:28:52 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU4S3MNO5fywMiLP32Az9IZh5kq6nE2UuuduL8HEdNl4wsGEnW1MNFhzENZ5KzR5E19k7imngQbi4omuFsmfdYaV6xRbWgXkEJ43Q== X-Google-Smtp-Source: AGHT+IEYgfnpfS+joavbUQW5PkQ1XsjvD/bC5NuadoSpK44DuQB8w/M1N9AuVJ6YSXLXtlk+reuv X-Received: by 2002:ac2:43b0:0:b0:518:17ad:a6da with SMTP id t16-20020ac243b0000000b0051817ada6damr1494071lfl.44.1714134532635; Fri, 26 Apr 2024 05:28:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1714134532; cv=none; d=google.com; s=arc-20160816; b=TzQYxXVwNR0NcRfv3UdkF532oFCkKY9cN0vR5jsL5T9LEVUMmFmDrvl2Ah/bVhTuMy WNP9YBvWvax8yCAyveXPDsGiS+lw7OnJBWO13qVOuFbBmwXftt63qeLZ3AOaEbM8P/3y mcBy8/kc6DHzLaF8FCH3bTNHvEDySFbzxq171IbgI06rAV6rxCeWxONTp1sj1EG3E7LD ynmSYqjJiIR9lqiiDV9Z+oml0SOMMpi3bVPvRrr/U0m38gDUvRhy5yCWWGITzzPE1h7M OzrH2nWtZdgLdVX6mPhKKsNj64FjTYdg9duSHlAXH3Jk2siZKXsJq4WW/cafHDIyF+jc 4c5A== 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=lRfC/CLo/V9plw/ppczUBiNQA0QBDvscANXlGJwMER8=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=fTRG5TwzT0E9vUZg+QS/g4TBsjLpK0RdHktxOb4y3J9J/jRaMyc6wDWDwL9IN2CFbX mmxOZlHxLqX2Mb8QckylE1UBZNk611O98tC17I0Ggt9pQrqSE3RcJ3KEC6vWK8Zvi6O/ VhR4M4HjGKE/ZI8iz+Lsknje1HTq+8ZJm9YIcYFtjFAd0bBbord9pzhPWU5cH3IXhCnX TKaygDnC5fb9L/C/DBFzcQUyHDypqrZLQrn+gKosXXgY5NFejXy1xQsTJdM8bvKIofLa USiC1XwR0yQ1JiUsgnKhaKey2g+PrcOdCfyoKJUClzeVq9NljYYjSFzcdjrsaMeMsWCn W2Eg==; 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=URW8XPdh; 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 y21-20020a056402135500b0056e44eb06eesi11242203edw.159.2024.04.26.05.28.52; Fri, 26 Apr 2024 05:28:52 -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=URW8XPdh; 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 B687968D44F; Fri, 26 Apr 2024 15:28:18 +0300 (EEST) 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 5CEA968D433 for ; Fri, 26 Apr 2024 15:28:07 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1714134487; bh=LX1LXhlJppcrkhnB/VKTr2R+rObVNso7ZX8/77j0/8U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=URW8XPdhZQUhp+PAKj6/eWlHfwp58Nln3YNhnNgFTroSw0n+tXzGaRNq8RuYxvcuG EH5nGqCG17dCP/etex+yl5eRkcJaAlBkbZi+h1WBEWoK+2JD1LgdfmiB7iXV41KNh0 e2CeAbHSB6Uw1XgHyGDengp5GbEYUbXi8JnW/Muo= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 0F22743E5A; Fri, 26 Apr 2024 14:28:07 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 Apr 2024 14:28:02 +0200 Message-ID: <20240426122803.19967-5-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426122803.19967-1-ffmpeg@haasn.xyz> References: <20240426122803.19967-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/6] avfilter/vf_colorspace: strip color volume metadata 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: TxjYgqVur5iZ From: Niklas Haas --- libavfilter/vf_colorspace.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavfilter/vf_colorspace.c b/libavfilter/vf_colorspace.c index 7bacd7892a..46c442f3fb 100644 --- a/libavfilter/vf_colorspace.c +++ b/libavfilter/vf_colorspace.c @@ -750,6 +750,10 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) } else { out->color_trc = s->user_trc; } + + if (out->color_primaries != in->color_primaries || out->color_trc != in->color_trc) + av_frame_remove_side_data_changed(out, AV_FRAME_CHANGED_COLOR_VOLUME); + if (rgb_sz != s->rgb_sz) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(out->format); int uvw = in->width >> desc->log2_chroma_w; From patchwork Fri Apr 26 12:28:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 48274 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1509:b0:1a9:af23:56c1 with SMTP id nq9csp333754pzb; Fri, 26 Apr 2024 05:29:01 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWbdeINKDCPpRM9I9YgXW70PZJKQ4h4TbEp0X7pnZOT39Jvk8JgRxirwZ2Rr5oU7sc/TsrwVwGv2/3xFz8JtK+Lbk28LPk0DBjkhw== X-Google-Smtp-Source: AGHT+IFstMslWnrgIfeVTaKmk3S2wO7b7xBcRRDfpEJrMC/Kgp1shmb8ieL+ZEMW6ybodccAZRkV X-Received: by 2002:a17:906:3157:b0:a52:3984:148f with SMTP id e23-20020a170906315700b00a523984148fmr1914635eje.36.1714134541693; Fri, 26 Apr 2024 05:29:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1714134541; cv=none; d=google.com; s=arc-20160816; b=hWfQPOhxVyfqdULGM4o1RzGNmTZB/+QdGA1JgExiECC/PZ2bIXEx+Iq7vZ4Eu23OMj 3D8UbiBN4ytey+6J9F/Egb9IRt9RsV2l9WHI441tIkkwznuMteiWmHfqr8hMYA/YMkfz CyBLVrQkKi08eMO62ehv9i4ggnMyIpcMAOnchmh+SOXUlHcoONwFrAXHipYp7CP57ysT h7WVgd7U/Dg9JL4pMy7xdoBwTxIKfWmvzIqHGPUq+Y5ws++eWT/vet1HHaM2XBkYeLrj 72Gz5Wx0Hxx7g6ubEzJ3C/ZklRl33WZX4ooe7eG1uf6KgoGHLQv7nHy1zrukYIaAn6pk nVSw== 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=ZVvHuGAnD3mtYfLFx6tAsgQM45IcQShmIL4Rc0lZYiA=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=lyZkcBBCFjL7h1bysvo21h4EAKFXrO5nFsi79e/QrKEypjg1ey/FNMCQfK1PcQSu8g Ch77pUfqnGB7/bGtcoah71hMFSCGPqBH6xBwlVdju7lMl9UKDvTRzvxeHtY38KkUW7c3 nQ1YmiJgFcCvEb8XqIPGwtOSrI2+AbG6arLcTAR/lf+4+Iu07pgJX3vhf+D4JU/Sz7B+ 0C77u48o7jSu3rvELQikInELjOwVaq87Vu7XoaRegTqqhx98ACG3/E2jwElewwu0u3IA OoFc9tHiGvmF8UO4w1cK26g3/fQ1KlEd2N0vy7hlOQSM7duZ9wnYqll5iVJG45oLqOtS B0Ww==; 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=I8E2SJQx; 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 q18-20020a170906a09200b00a4e28b1068bsi10624823ejy.780.2024.04.26.05.29.01; Fri, 26 Apr 2024 05:29:01 -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=I8E2SJQx; 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 221C468D467; Fri, 26 Apr 2024 15:28:21 +0300 (EEST) 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 0A7CB68D448 for ; Fri, 26 Apr 2024 15:28:12 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1714134487; bh=qfjbHRBwOnp8MBI6FvMOwKzGmrOBL5QOFXSDwctbR+4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=I8E2SJQxvwNDmF32Y5YswAEwOfgN9IU8KxIzVnYIIPWrBjxhpQ0//sl90WHNyS0ZZ UNPq+m60pyLIhiooIBM3FPIpTp9RM/nSU51MmrInC8gvLweU32X+HWPsfe0bnig8AP bz/kVHRlidXNU2yDRq33UrhnhhpplUtKVOQ+ap/Y= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 4F60343E5B; Fri, 26 Apr 2024 14:28:07 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 Apr 2024 14:28:03 +0200 Message-ID: <20240426122803.19967-6-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240426122803.19967-1-ffmpeg@haasn.xyz> References: <20240426122803.19967-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/6] avfilter/vf_lut*: strip color volume metadata 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: 64oYwB7PZuDH From: Niklas Haas These filters, in general, will apply some arbitrary color volume transformation. Strip corresponding metadata to be conservative/safe. --- libavfilter/vf_lut.c | 2 ++ libavfilter/vf_lut2.c | 1 + libavfilter/vf_lut3d.c | 2 ++ 3 files changed, 5 insertions(+) diff --git a/libavfilter/vf_lut.c b/libavfilter/vf_lut.c index 01df8f287d..89884dd315 100644 --- a/libavfilter/vf_lut.c +++ b/libavfilter/vf_lut.c @@ -537,6 +537,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) av_frame_copy_props(out, in); } + av_frame_remove_side_data_changed(out, AV_FRAME_CHANGED_COLOR_VOLUME); + if (s->is_rgb && s->is_16bit && !s->is_planar) { /* packed, 16-bit */ PACKED_THREAD_DATA diff --git a/libavfilter/vf_lut2.c b/libavfilter/vf_lut2.c index 1f0661a0f5..123bfb2e17 100644 --- a/libavfilter/vf_lut2.c +++ b/libavfilter/vf_lut2.c @@ -610,6 +610,7 @@ static int tlut2_filter_frame(AVFilterLink *inlink, AVFrame *frame) } av_frame_copy_props(out, frame); + av_frame_remove_side_data_changed(out, AV_FRAME_CHANGED_COLOR_VOLUME); td.out = out; td.srcx = frame; diff --git a/libavfilter/vf_lut3d.c b/libavfilter/vf_lut3d.c index b3ddd3e69f..84c1405b26 100644 --- a/libavfilter/vf_lut3d.c +++ b/libavfilter/vf_lut3d.c @@ -1175,6 +1175,8 @@ static AVFrame *apply_lut(AVFilterLink *inlink, AVFrame *in) av_frame_copy_props(out, in); } + av_frame_remove_side_data_changed(out, AV_FRAME_CHANGED_COLOR_VOLUME); + td.in = in; td.out = out; ff_filter_execute(ctx, lut3d->interp, &td, NULL,