From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 825754CB86 for <ffmpegdev@gitmailbox.com>; Sun, 13 Apr 2025 10:12:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 75B00687C58; Sun, 13 Apr 2025 13:12:23 +0300 (EEST) Received: from mail-qv1-f47.google.com (mail-qv1-f47.google.com [209.85.219.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E99AA687BE4 for <ffmpeg-devel@ffmpeg.org>; Sun, 13 Apr 2025 13:12:17 +0300 (EEST) Received: by mail-qv1-f47.google.com with SMTP id 6a1803df08f44-6e8fce04655so30165936d6.3 for <ffmpeg-devel@ffmpeg.org>; Sun, 13 Apr 2025 03:12:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744539136; x=1745143936; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=8rjqJERvzQVknRNk2q8L3VdtTE4ju2pZTquP9/gKYig=; b=ly5/TgpPEIn2guAe3cmf9XE8raKAsB0duB5J8s7512VAhblKpINE/f8HixR+fIEj6u Tv0jUNXsmfhAMvKejZ/tvdUd78GIrnDkFbJZg0TQ6MEaRf/Hee0q47iJVtS6ao8oxhtc klZKmzzZ7FR4Ax3hNPdO5/Q/mPwtusNOrj3mWYIyVzPjeMWs/AJ6OdztykENA3dlZwBt w0nRiyD8A+ainGnMugi85/kV3mrvQTfmOW5IAfGRfYqhgHGHNvhyLAJqmvVPDdGGcq/3 pMzVEWUAPyUEYO8zoGYLAH9Alx1m/kuSJ7EwNYhtugdPUjwKjHPHkwRETCv9fq2z3qQ7 Jc8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744539136; x=1745143936; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8rjqJERvzQVknRNk2q8L3VdtTE4ju2pZTquP9/gKYig=; b=nD9qsA1nlDV1YcCcF/5UyrLTyFSJo1XTjGx6GwB+z5NFHpgPV9mnOlaw4zn13YZp3c Yy7Yq89O1eSgmxQogOcXFC45MF4FHwa4YBK3mWTxi/ctBuypMIel2C5ezgDdIlecwln8 qI1+YBqPzsmcTU5HhTPQ8RUHbxWdngKDdDkknRmD1H10DZV9jQBBKtexVD5TY5RuaHL9 Zl2bv9EL12bt944hDiilf0XxbgL0S516YGiO4qc5zL7ctIzKmTN61C4de8eed0i9wLNp YgHG86cdCzgd0K3Eiij6U5y3oaFHMkA7/4ldpvOniXTk8XXIcWIBcf/I5r1n9q/Ri18D H9Dw== X-Gm-Message-State: AOJu0YyMDmmjxle4RGyH9uQN5yyG6gNGVaIYD3nNvAUWSGdupS9x4Ni/ BzQnuSO761AUK8zd81iA/tlAMHyXuAJt5aliQvZIA5g0ZL7R4w7PQwX5/w== X-Gm-Gg: ASbGnctdhR6cPNXbS/QHh3jwaOVAbX26x175Hg3Kg1DalBP2ukFyOQO1G2bFwoPxTrH T+1tjIArgcWXewYBOtCvwYP9QUYl4K+PnfQ4OKPWv1mXNWMhh9YFEgEuwyEg9xujk1fQ9w2ZU5N 3EmBNtEovx3OVkc3mna5bOYBTnMADTEHJrj7iAr4XkcDRH5xhdAAyA8WO6vfbBe/34ZvQJ2bgtC l70K2nXty0xgByIjZcvWQIbByMmXO6VJITKRoyqNoiNLE35TkD/N1+/qPe6vTOmjnKXGInJPqtA fKaDMIY0OqEJVXjFeUYgSG+DcgVgq4YtfopaRKGZ4mCdmb6M0vnyB3pVyP75Ng028unn+TaiDyb kUHpTmCx6vtzwSJQ0 X-Google-Smtp-Source: AGHT+IE0QRLh9plOJLkwHV5xcGe1t9mFds8sROFW4yw8fg2PioCerR1n6RQ4yM+H3x2NEtG0oE8mtQ== X-Received: by 2002:a05:6214:2523:b0:6e8:fee2:aae7 with SMTP id 6a1803df08f44-6f23f156317mr129202236d6.39.1744539136201; Sun, 13 Apr 2025 03:12:16 -0700 (PDT) Received: from gauss.local (99-104-239-121.lightspeed.livnmi.sbcglobal.net. [99.104.239.121]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7c7a8a0e5efsm531226585a.108.2025.04.13.03.12.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 13 Apr 2025 03:12:15 -0700 (PDT) From: Leo Izen <leo.izen@gmail.com> To: ffmpeg-devel@ffmpeg.org Date: Sun, 13 Apr 2025 06:12:13 -0400 Message-ID: <20250413101213.26628-1-leo.izen@gmail.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/libjxlenc: prevent color encoding from being set twice X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Cc: Leo Izen <leo.izen@gmail.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250413101213.26628-1-leo.izen@gmail.com/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> We currently populate the color encoding bundle and then check to see if there's an ICC profile to attach, and set the color encoding bundle in either case. The ICC profile overrides the color encoding bundle, so we should not calculate enum-based color encoding if we have an ICC profile present. Fixes several unnecessary warnings from being emitted. Signed-off-by: Leo Izen <leo.izen@gmail.com> --- libavcodec/libjxlenc.c | 115 +++++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 56 deletions(-) diff --git a/libavcodec/libjxlenc.c b/libavcodec/libjxlenc.c index 81d466e6cc..54ba745672 100644 --- a/libavcodec/libjxlenc.c +++ b/libavcodec/libjxlenc.c @@ -258,7 +258,6 @@ static int libjxl_preprocess_stream(AVCodecContext *avctx, const AVFrame *frame, AVFrameSideData *sd; const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(frame->format); JxlBasicInfo info; - JxlColorEncoding jxl_color; JxlPixelFormat *jxl_fmt = &ctx->jxl_fmt; int bits_per_sample; #if JPEGXL_NUMERIC_VERSION >= JPEGXL_COMPUTE_NUMERIC_VERSION(0, 8, 0) @@ -320,66 +319,70 @@ static int libjxl_preprocess_stream(AVCodecContext *avctx, const AVFrame *frame, return AVERROR_EXTERNAL; } - /* rendering intent doesn't matter here - * but libjxl will whine if we don't set it */ - jxl_color.rendering_intent = JXL_RENDERING_INTENT_RELATIVE; - - switch (frame->color_trc && frame->color_trc != AVCOL_TRC_UNSPECIFIED - ? frame->color_trc : avctx->color_trc) { - case AVCOL_TRC_BT709: - jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_709; - break; - case AVCOL_TRC_LINEAR: - jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_LINEAR; - break; - case AVCOL_TRC_IEC61966_2_1: - jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_SRGB; - break; - case AVCOL_TRC_SMPTE428: - jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_DCI; - break; - case AVCOL_TRC_SMPTE2084: - jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_PQ; - break; - case AVCOL_TRC_ARIB_STD_B67: - jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_HLG; - break; - case AVCOL_TRC_GAMMA22: - jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_GAMMA; - jxl_color.gamma = 1/2.2f; - break; - case AVCOL_TRC_GAMMA28: - jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_GAMMA; - jxl_color.gamma = 1/2.8f; - break; - default: - if (pix_desc->flags & AV_PIX_FMT_FLAG_FLOAT) { - av_log(avctx, AV_LOG_WARNING, "Unknown transfer function, assuming Linear Light. Colors may be wrong.\n"); + sd = av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE); + if (sd && sd->size && JxlEncoderSetICCProfile(ctx->encoder, sd->data, sd->size) != JXL_ENC_SUCCESS) { + av_log(avctx, AV_LOG_WARNING, "Could not set ICC Profile\n"); + sd = NULL; + } + + if ((!sd || !sd->size)) { + /* no ICC Profile means enum-style color options */ + JxlColorEncoding jxl_color; + + switch (frame->color_trc && frame->color_trc != AVCOL_TRC_UNSPECIFIED + ? frame->color_trc : avctx->color_trc) { + case AVCOL_TRC_BT709: + jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_709; + break; + case AVCOL_TRC_LINEAR: jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_LINEAR; - } else { - av_log(avctx, AV_LOG_WARNING, "Unknown transfer function, assuming IEC61966-2-1/sRGB. Colors may be wrong.\n"); + break; + case AVCOL_TRC_IEC61966_2_1: jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_SRGB; + break; + case AVCOL_TRC_SMPTE428: + jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_DCI; + break; + case AVCOL_TRC_SMPTE2084: + jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_PQ; + break; + case AVCOL_TRC_ARIB_STD_B67: + jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_HLG; + break; + case AVCOL_TRC_GAMMA22: + jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_GAMMA; + jxl_color.gamma = 1/2.2f; + break; + case AVCOL_TRC_GAMMA28: + jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_GAMMA; + jxl_color.gamma = 1/2.8f; + break; + default: + if (pix_desc->flags & AV_PIX_FMT_FLAG_FLOAT) { + av_log(avctx, AV_LOG_WARNING, + "Unknown transfer function, assuming Linear Light. Colors may be wrong.\n"); + jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_LINEAR; + } else { + av_log(avctx, AV_LOG_WARNING, + "Unknown transfer function, assuming IEC61966-2-1/sRGB. Colors may be wrong.\n"); + jxl_color.transfer_function = JXL_TRANSFER_FUNCTION_SRGB; + } } - } - - /* This should be implied to be honest - * but a libjxl bug makes it fail otherwise */ - if (info.num_color_channels == 1) - jxl_color.color_space = JXL_COLOR_SPACE_GRAY; - else - jxl_color.color_space = JXL_COLOR_SPACE_RGB; - ret = libjxl_populate_primaries(avctx, &jxl_color, - frame->color_primaries && frame->color_primaries != AVCOL_PRI_UNSPECIFIED - ? frame->color_primaries : avctx->color_primaries); - if (ret < 0) - return ret; + jxl_color.rendering_intent = JXL_RENDERING_INTENT_RELATIVE; + if (info.num_color_channels == 1) + jxl_color.color_space = JXL_COLOR_SPACE_GRAY; + else + jxl_color.color_space = JXL_COLOR_SPACE_RGB; - sd = av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE); - if (sd && sd->size && JxlEncoderSetICCProfile(ctx->encoder, sd->data, sd->size) != JXL_ENC_SUCCESS) - av_log(avctx, AV_LOG_WARNING, "Could not set ICC Profile\n"); - if (JxlEncoderSetColorEncoding(ctx->encoder, &jxl_color) != JXL_ENC_SUCCESS) - av_log(avctx, AV_LOG_WARNING, "Failed to set JxlColorEncoding\n"); + ret = libjxl_populate_primaries(avctx, &jxl_color, + frame->color_primaries && frame->color_primaries != AVCOL_PRI_UNSPECIFIED + ? frame->color_primaries : avctx->color_primaries); + if (ret < 0) + return ret; + if (JxlEncoderSetColorEncoding(ctx->encoder, &jxl_color) != JXL_ENC_SUCCESS) + av_log(avctx, AV_LOG_WARNING, "Failed to set JxlColorEncoding\n"); + } #if JPEGXL_NUMERIC_VERSION >= JPEGXL_COMPUTE_NUMERIC_VERSION(0, 8, 0) if (JxlEncoderSetFrameBitDepth(ctx->options, &jxl_bit_depth) != JXL_ENC_SUCCESS) -- 2.49.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".