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".