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 D1BF941236 for ; Tue, 4 Jan 2022 13:36:56 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DA1C368B10F; Tue, 4 Jan 2022 15:36:54 +0200 (EET) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1AB43680CB2 for ; Tue, 4 Jan 2022 15:36:49 +0200 (EET) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 3A313494B7; Tue, 4 Jan 2022 14:36:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1641303408; bh=2FkSMnk1SNmAkzlAvndj1UTO4E4lR2nzAQ0M01i+/SE=; h=From:To:Cc:Subject:Date:From; b=sYOpa/8nwILuYhIBOHcLsBAaiAiSZd7H90c4PWQ39MUMMFeQCNxVOmOkhAjbPNlnz Ri+5hZIxIrvDIZAhX/G7la/PYyqreNEL2crJeJTF1ek2ZR/GeWMmzh9G8zrCH3YlC3 PgDVwz47dsgz03rorRL2xLkH36IdaYjr5FzATZk0= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Tue, 4 Jan 2022 14:34:35 +0100 Message-Id: <20220104133436.103812-1-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] lavfi/libplacebo: apply dovi metadata correctly 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: From: Niklas Haas libplacebo supports dolby vision application, but it requires some help from us to set a sensible default output color space, and also strip the dolby vision metadata from the output frame. Failing to do the latter results in an error inside libplacebo. (It can't encode back into a dolby vision color space) Make this functionality toggleable by the user. Note that we also strip dovi metadata from the output in the apply_dolbyvision=0 case, which is partly out of laziness but also partly justified by the fact that dolby vision metadata will generally no longer make sense after passing through a color space conversion or tone mapping filter. (And in the general case, we don't know what libplacebo is doing internally) Signed-off-by: Niklas Haas --- libavfilter/vf_libplacebo.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index 5b1e7b5285..e479d6c935 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -47,6 +47,7 @@ typedef struct LibplaceboContext { int force_divisible_by; int normalize_sar; int apply_filmgrain; + int apply_dovi; int colorspace; int color_range; int color_primaries; @@ -400,6 +401,22 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) out->width = outlink->w; out->height = outlink->h; +#if PL_API_VER >= 191 + /* libplacebo cannot (currently) encode back to Dolby Vision */ + av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_RPU_BUFFER); + av_frame_remove_side_data(out, AV_FRAME_DATA_DOVI_METADATA); + if (s->apply_dovi && av_frame_get_side_data(in, AV_FRAME_DATA_DOVI_METADATA)) { + /* Output of dovi reshaping is always BT.2020+PQ, so infer the correct + * output colorspace defaults */ + out->colorspace = AVCOL_SPC_BT2020_NCL; + out->color_primaries = AVCOL_PRI_BT2020; + out->color_trc = AVCOL_TRC_SMPTE2084; + } else { + /* Prevent Dolby Vision metadata from getting applied by libplacebo */ + av_frame_remove_side_data(in, AV_FRAME_DATA_DOVI_METADATA); + } +#endif + if (s->colorspace >= 0) out->colorspace = s->colorspace; if (s->color_range >= 0) @@ -559,6 +576,7 @@ static const AVOption libplacebo_options[] = { { "antiringing", "Antiringing strength (for non-EWA filters)", OFFSET(antiringing), AV_OPT_TYPE_FLOAT, {.dbl = 0.0}, 0.0, 1.0, DYNAMIC }, { "sigmoid", "Enable sigmoid upscaling", OFFSET(sigmoid), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, DYNAMIC }, { "apply_filmgrain", "Apply film grain metadata", OFFSET(apply_filmgrain), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, DYNAMIC }, + { "apply_dolbyvision", "Apply Dolby Vision metadata", OFFSET(apply_dovi), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, DYNAMIC }, { "deband", "Enable debanding", OFFSET(deband), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, DYNAMIC }, { "deband_iterations", "Deband iterations", OFFSET(deband_iterations), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 16, DYNAMIC }, -- 2.34.1 _______________________________________________ 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".