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);