From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id C7C5D4BC1E for ; Sun, 30 Nov 2025 01:52:29 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'Me4Ior1SwHip8BSYkHcET6q1gC8tuzg7zh913Ck5mzw=', expected b'U5MmNTL+zK33VdSNmjrL2DjOX5Gk9ANx7ex8xpndwJ8=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1764467538; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=Me4Ior1SwHip8BSYkHcET6q1gC8tuzg7zh913Ck5mzw=; b=0yCrlfQM/BcZIhVJLVO14EZXXy3sBwlGNEWc+dBTtxI3EHAFPw5p3u4Wdnnt9vNK0oeEZ QFCbeDH13phzte0sk4iTKxn8vMe4VvpEmbrxu/UaTXMzNTD2E2p2XGsruDVOZmCIlE14E9j 2abXVdWCqUOCwEBXYPjDfbcTCL/mvbqEw8Fsqa73TJpDWuyttr0tApgFFRYdcxaWCu5N02A MYMvM/u4rCSEaje+K7lHca9zJNxrmqdd4eEEs6rp9Bzx5aGsiNqcAX+9VLV56Gz+DCIl5Hj dgsEFmxXFPMxiXtz4848YGLFzjQCLg/195NyUCaXwYSzGifOijvdcYrQWV9g== Received: from [172.19.0.3] (unknown [172.19.0.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id C14BD690298; Sun, 30 Nov 2025 03:52:18 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1764467518; b=kn3wdsrT0KXzpgvLrMaFL5BELOHPwBG/YSJKmPS0X+lysiqbJ2h6Yzxvdqc2KvBjkaX3z N5af3aWWBuI22sfpTCSTCNZhQrpgWtzBAxW65NiRE+UVURQCxahS9RVy9Nfq+6NO2qxrX7P 09iX+/uOZ+DnVl1CQN6rgYkfRObIYCy5ZpzObFCul9jSdRhMXz4833Fe46KCAgXrd4vzp1o 4UkpXLEpO7qPnHDufEU6RgsgPHzSRnlZgyIi6j+YhlfFiGf/XM81pSlmZfZGVmj6FL7LCPQ CMhOrAgFuZnWDvROHGc8wbZ/yvdtcu6aiBDLgFItTnYImcS2MXRUrkCh2oFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1764467518; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=z1UP9UhgLWZDG6T8P0NMCTEeixqERmuKDt9y019KVD8=; b=inZuI+q+Rebm6bTDA2SnRcYMV2QJPdAA1xKheYppqCsa3enemhoWunsfwdp8EUR5Nw/H4 kup29M0l+l+TJPdvFNHsr61IdZoanrMf1S+POBiVQRPQugW2cLVMDRb1nCnfAZuJDax7bIM WjjGnJWutxieW6FW1d1v2LZ+pZlYQVy75Uv2tvsL2npg2g0vH6eGeaEIZ0ZIX5OlgwPGYeI hy9mxpH/aughnjj09CnOTMyUbVUWS3BWbxdqnYv4HiLBhKwAwF3wNqnaRp4VmnG6jL4gYSI ZY59HcmleHGykwLKPm/EJibGZTcMXS1Je/fN8LF7TQMwtuSwwTHtBQE+Pipg== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1764467509; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=U5MmNTL+zK33VdSNmjrL2DjOX5Gk9ANx7ex8xpndwJ8=; b=LjZyTT00S00Ki13zjX3TpnRKKKlwiD8bXToMj6c+/gbTddN/8qkLbG2+QNUzun0+khC7+ 1DXSzondpee8NSIKUr6YXAuGraorg3LDWf9kdZM82QICDt7d1QT2toGwwyRU9Py08PZZvi/ GnsYcNbXP2m2RVEJI3FB6vSoknn7InqNuQnX+MdJdZcw27EGUuV45rN7yjbCzIUDcry8Z7K RjXFPxj96DMh2YlIXpPyirQwI9uruX6HgfERvtOEyfZxWqgRVMFDa9GqFii4SDu8DEM0ty8 jdnzpykXrop3NM94EOsJEu+DD4igNemaNChKhPVfGk5BPOcZ74uv3Lszvt4w== Received: from 55ca25703178 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id A9C2C68EC69 for ; Sun, 30 Nov 2025 03:51:49 +0200 (EET) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Sun, 30 Nov 2025 01:51:49 -0000 Message-ID: <176446750986.39.8491797251831702356@2cb04c0e5124> Message-ID-Hash: U7A32IQ2BK6JL5UXMEGSQWMNXL7XHVQQ X-Message-ID-Hash: U7A32IQ2BK6JL5UXMEGSQWMNXL7XHVQQ X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] avcodec/libjxlenc: Additional AVOptions (PR #21051) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Leo Izen via ffmpeg-devel Cc: Leo Izen Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #21051 opened by Leo Izen (Traneptora) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21051 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21051.patch This PR adds several new AVOptions to libavcodec's libjxlenc wrapper which are exposed by libjxl and cjxl. >>From 3ad6faa95dd0891e5774e6811f1d5baa455c1fa4 Mon Sep 17 00:00:00 2001 From: Leo Izen Date: Thu, 27 Nov 2025 14:00:32 -0500 Subject: [PATCH 1/3] avcodec/libjxlenc: add decoding_speed AVOption This adds the decoding_speed AVOption which corresponds with the faster_decoding option on cjxl, and the library's frame setting JXL_FRAME_SETTING_DECODING_SPEED. Signed-off-by: Leo Izen --- libavcodec/libjxlenc.c | 9 +++++++++ libavcodec/version.h | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libavcodec/libjxlenc.c b/libavcodec/libjxlenc.c index a2fec89560..a1b872d156 100644 --- a/libavcodec/libjxlenc.c +++ b/libavcodec/libjxlenc.c @@ -56,6 +56,7 @@ typedef struct LibJxlEncodeContext { float distance; int modular; int xyb; + int decoding_speed; uint8_t *buffer; size_t buffer_size; JxlPixelFormat jxl_fmt; @@ -528,6 +529,12 @@ static int libjxl_preprocess_frame(AVCodecContext *avctx, const AVFrame *frame, return AVERROR_EXTERNAL; } + if (JxlEncoderFrameSettingsSetOption(ctx->options, JXL_ENC_FRAME_SETTING_DECODING_SPEED, ctx->decoding_speed) + != JXL_ENC_SUCCESS) { + av_log(avctx, AV_LOG_ERROR, "Failed to set faster decoding option: %d\n", ctx->decoding_speed); + return AVERROR_EXTERNAL; + } + jxl_fmt->endianness = JXL_NATIVE_ENDIAN; if (frame->linesize[0] >= 0) { jxl_fmt->align = frame->linesize[0]; @@ -757,6 +764,8 @@ static const AVOption libjxl_encode_options[] = { { "modular", "Force modular mode", OFFSET(modular), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE }, { "xyb", "Use XYB-encoding for lossy images", OFFSET(xyb), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, VE }, + { "decoding_speed", "Enable faster decoding at cost of density", OFFSET(decoding_speed), + AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 4, VE }, { NULL }, }; diff --git a/libavcodec/version.h b/libavcodec/version.h index da6f3a84ac..9411511e04 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 21 +#define LIBAVCODEC_VERSION_MINOR 22 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ -- 2.49.1 >>From c9acedd7deeb7e21f65e4fbecf5dc9f124c7e3e9 Mon Sep 17 00:00:00 2001 From: Leo Izen Date: Thu, 27 Nov 2025 14:21:55 -0500 Subject: [PATCH 2/3] avcodec/libjxlenc: add lf_frames AVOption This commit adds the AVOption lf_frames to the libjxl encoder wrapper which lets the user set how many LF Frames they want the resulting JPEG XL file to have. This maps to --progressive_dc in cjxl, and the libjxl frame setting JXL_FRAME_SETTING_PROGRESSIVE_DC. Signed-off-by: Leo Izen --- libavcodec/libjxlenc.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libavcodec/libjxlenc.c b/libavcodec/libjxlenc.c index a1b872d156..bcf325b88f 100644 --- a/libavcodec/libjxlenc.c +++ b/libavcodec/libjxlenc.c @@ -57,6 +57,7 @@ typedef struct LibJxlEncodeContext { int modular; int xyb; int decoding_speed; + int lf_frames; uint8_t *buffer; size_t buffer_size; JxlPixelFormat jxl_fmt; @@ -535,6 +536,12 @@ static int libjxl_preprocess_frame(AVCodecContext *avctx, const AVFrame *frame, return AVERROR_EXTERNAL; } + if (JxlEncoderFrameSettingsSetOption(ctx->options, JXL_ENC_FRAME_SETTING_PROGRESSIVE_DC, ctx->lf_frames) + != JXL_ENC_SUCCESS) { + av_log(avctx, AV_LOG_ERROR, "Failed to set lf frames: %d\n", ctx->lf_frames); + return AVERROR_EXTERNAL; + } + jxl_fmt->endianness = JXL_NATIVE_ENDIAN; if (frame->linesize[0] >= 0) { jxl_fmt->align = frame->linesize[0]; @@ -766,6 +773,9 @@ static const AVOption libjxl_encode_options[] = { AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, VE }, { "decoding_speed", "Enable faster decoding at cost of density", OFFSET(decoding_speed), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 4, VE }, + { "lf_frames", "The number of progressive LF Frames. " + "(-1 for encoder chooses)", OFFSET(lf_frames), + AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2, VE }, { NULL }, }; -- 2.49.1 >>From fa9f9d254b250fee5fca791d01abb285a74dece9 Mon Sep 17 00:00:00 2001 From: Leo Izen Date: Sat, 29 Nov 2025 20:47:24 -0500 Subject: [PATCH 3/3] avcodec/libjxlenc: add photon_noise AVOption This commit adds the AVOption photon_noise to the libjxl encoder wrapper which lets the user set how much photon noise to add upon decoding. This maps to --photon_noise in cjxl, and the libjxl frame setting JXL_FRAME_SETTING_PHOTON_NOISE. Signed-off-by: Leo Izen --- libavcodec/libjxlenc.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libavcodec/libjxlenc.c b/libavcodec/libjxlenc.c index bcf325b88f..e786a55f28 100644 --- a/libavcodec/libjxlenc.c +++ b/libavcodec/libjxlenc.c @@ -58,6 +58,7 @@ typedef struct LibJxlEncodeContext { int xyb; int decoding_speed; int lf_frames; + int photon_noise; uint8_t *buffer; size_t buffer_size; JxlPixelFormat jxl_fmt; @@ -542,6 +543,12 @@ static int libjxl_preprocess_frame(AVCodecContext *avctx, const AVFrame *frame, return AVERROR_EXTERNAL; } + if (JxlEncoderFrameSettingsSetOption(ctx->options, JXL_ENC_FRAME_SETTING_PHOTON_NOISE, ctx->photon_noise) + != JXL_ENC_SUCCESS) { + av_log(avctx, AV_LOG_ERROR, "Failed to set photon noise: %d\n", ctx->photon_noise); + return AVERROR_EXTERNAL; + } + jxl_fmt->endianness = JXL_NATIVE_ENDIAN; if (frame->linesize[0] >= 0) { jxl_fmt->align = frame->linesize[0]; @@ -776,6 +783,10 @@ static const AVOption libjxl_encode_options[] = { { "lf_frames", "The number of progressive LF Frames. " "(-1 for encoder chooses)", OFFSET(lf_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2, VE }, + { "photon_noise", "Add photon noise, in ISO film units. Mimics film " + "of the given value, e.g. ISO800. (default = 0, " + "i.e. no noise)", OFFSET(photon_noise), + AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 16000, VE }, { NULL }, }; -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org