From a38d2be0de62ee551fd504a1866d702e9a9e6892 Mon Sep 17 00:00:00 2001 From: oreo639 Date: Tue, 2 Jan 2024 20:33:25 -0800 Subject: [PATCH] libjxl: update to 0.9.1. --- common/shlibs | 6 +- srcpkgs/libjxl/patches/2211.patch | 68 --------- srcpkgs/libjxl/patches/fix-pixbuf.patch | 184 ++++++++++++++++++++++++ srcpkgs/libjxl/template | 29 ++-- 4 files changed, 202 insertions(+), 85 deletions(-) delete mode 100644 srcpkgs/libjxl/patches/2211.patch create mode 100644 srcpkgs/libjxl/patches/fix-pixbuf.patch diff --git a/common/shlibs b/common/shlibs index 71f172740e5..a897105f169 100644 --- a/common/shlibs +++ b/common/shlibs @@ -4235,9 +4235,9 @@ libplayerctl.so.2 playerctl-2.4.1_1 libwireplumber-0.4.so.0 wireplumber-0.4.14_1 libjodycode.so.3 libjodycode-3.0.1_1 libgsoapssl++-2.8.124.so gsoap-2.8.124_1 -libjxl.so.0.8 libjxl-0.8.2_1 -libjxl_dec.so.0.8 libjxl-0.8.2_1 -libjxl_threads.so.0.8 libjxl-0.8.2_1 +libjxl.so.0.9 libjxl-0.9.0_1 +libjxl_cms.so.0.9 libjxl-0.9.0_1 +libjxl_threads.so.0.9 libjxl-0.9.0_1 libtext-engine-0.1.so.0 text-engine-0.1.1_1 libvmaf.so.1 vmaf-2.3.1_1 liblc3.so.1 liblc3-1.0.3_1 diff --git a/srcpkgs/libjxl/patches/2211.patch b/srcpkgs/libjxl/patches/2211.patch deleted file mode 100644 index d74513005d4..00000000000 --- a/srcpkgs/libjxl/patches/2211.patch +++ /dev/null @@ -1,68 +0,0 @@ -From b73a9e1e8b47fc623c3015ce40466274e4d4bb03 Mon Sep 17 00:00:00 2001 -From: east -Date: Wed, 22 Feb 2023 20:12:05 +0800 -Subject: [PATCH 1/3] Add missing content to fix gcc compilation for - RISCV architecture. - ---- - lib/jxl/enc_xyb.cc | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/lib/jxl/enc_xyb.cc b/lib/jxl/enc_xyb.cc -index 1ef78877a71..1ed13da9574 100644 ---- a/lib/jxl/enc_xyb.cc -+++ b/lib/jxl/enc_xyb.cc -@@ -7,6 +7,7 @@ - - #include - #include -+#include - - #undef HWY_TARGET_INCLUDE - #define HWY_TARGET_INCLUDE "lib/jxl/enc_xyb.cc" - -From 10a521764beb7e9dcc0dbfbe3f4dbb7e2e8d2bcc Mon Sep 17 00:00:00 2001 -From: east -Date: Thu, 23 Feb 2023 00:50:02 +0800 -Subject: [PATCH 2/3] add name to AUTHORS - ---- - AUTHORS | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/AUTHORS b/AUTHORS -index 44dcc409949..3340422d606 100644 ---- a/AUTHORS -+++ b/AUTHORS -@@ -30,6 +30,7 @@ Daniel Novomeský - David Burnett - Dirk Lemstra - Don Olmstead -+Dong Xu - Even Rouault - Fred Brennan - Heiko Becker - -From fc6b5c316346475379895a6c67b6d97ab7b8c2cb Mon Sep 17 00:00:00 2001 -From: Moritz Firsching -Date: Wed, 22 Feb 2023 22:46:07 +0100 -Subject: [PATCH 3/3] lint fix - ---- - lib/jxl/enc_xyb.cc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/jxl/enc_xyb.cc b/lib/jxl/enc_xyb.cc -index 1ed13da9574..2ee0abf821a 100644 ---- a/lib/jxl/enc_xyb.cc -+++ b/lib/jxl/enc_xyb.cc -@@ -6,8 +6,8 @@ - #include "lib/jxl/enc_xyb.h" - - #include --#include - #include -+#include - - #undef HWY_TARGET_INCLUDE - #define HWY_TARGET_INCLUDE "lib/jxl/enc_xyb.cc" diff --git a/srcpkgs/libjxl/patches/fix-pixbuf.patch b/srcpkgs/libjxl/patches/fix-pixbuf.patch new file mode 100644 index 00000000000..47166a8f60d --- /dev/null +++ b/srcpkgs/libjxl/patches/fix-pixbuf.patch @@ -0,0 +1,184 @@ +From 7021ada76bd1c1ee44483027c40233cd2e412637 Mon Sep 17 00:00:00 2001 +From: Leo Izen +Date: Mon, 29 Jan 2024 09:21:10 -0500 +Subject: [PATCH] lib/jxl/decode.cc: deduplicate and correct min_size + calculation + +Code to calculate the proper size of the buffer exists in three places +in this function - one for the standard buffer, one for the extra +channel buffer, and one for the preview buffer. However, only the code +for the preview buffer correctly took into account the last row size +possibly being slightly smaller than the remaining rows. + +This commit separates the code out into a separate function to remove +duplicate code, and uses the algorithm from the prevew buffer which was +the only correct one. + +Signed-off-by: Leo Izen +--- + lib/jxl/decode.cc | 63 ++++++++++++++++-------------------------- + lib/jxl/decode_test.cc | 8 ++++-- + 2 files changed, 30 insertions(+), 41 deletions(-) + +diff --git a/lib/jxl/decode.cc b/lib/jxl/decode.cc +index b674d1ba885..953342d76e1 100644 +--- a/lib/jxl/decode.cc ++++ b/lib/jxl/decode.cc +@@ -2348,29 +2348,40 @@ JXL_EXPORT JxlDecoderStatus JxlDecoderSetCms(JxlDecoder* dec, + return JXL_DEC_SUCCESS; + } + +-JXL_EXPORT JxlDecoderStatus JxlDecoderPreviewOutBufferSize( +- const JxlDecoder* dec, const JxlPixelFormat* format, size_t* size) { ++static JxlDecoderStatus GetMinSize(const JxlDecoder* dec, ++ const JxlPixelFormat* format, ++ size_t num_channels, size_t* min_size, ++ bool preview) { + size_t bits; + JxlDecoderStatus status = PrepareSizeCheck(dec, format, &bits); + if (status != JXL_DEC_SUCCESS) return status; +- if (format->num_channels < 3 && +- !dec->image_metadata.color_encoding.IsGray()) { +- return JXL_API_ERROR("Number of channels is too low for color output"); ++ size_t xsize, ysize; ++ if (preview) { ++ xsize = dec->metadata.oriented_preview_xsize(dec->keep_orientation); ++ ysize = dec->metadata.oriented_preview_ysize(dec->keep_orientation); ++ } else { ++ GetCurrentDimensions(dec, xsize, ysize); + } +- +- size_t xsize = dec->metadata.oriented_preview_xsize(dec->keep_orientation); +- size_t ysize = dec->metadata.oriented_preview_ysize(dec->keep_orientation); +- ++ if (num_channels == 0) num_channels = format->num_channels; + size_t row_size = +- jxl::DivCeil(xsize * format->num_channels * bits, jxl::kBitsPerByte); ++ jxl::DivCeil(xsize * num_channels * bits, jxl::kBitsPerByte); + size_t last_row_size = row_size; + if (format->align > 1) { + row_size = jxl::DivCeil(row_size, format->align) * format->align; + } +- *size = row_size * (ysize - 1) + last_row_size; ++ *min_size = row_size * (ysize - 1) + last_row_size; + return JXL_DEC_SUCCESS; + } + ++JXL_EXPORT JxlDecoderStatus JxlDecoderPreviewOutBufferSize( ++ const JxlDecoder* dec, const JxlPixelFormat* format, size_t* size) { ++ if (format->num_channels < 3 && ++ !dec->image_metadata.color_encoding.IsGray()) { ++ return JXL_API_ERROR("Number of channels is too low for color output"); ++ } ++ return GetMinSize(dec, format, 0, size, true); ++} ++ + JXL_EXPORT JxlDecoderStatus JxlDecoderSetPreviewOutBuffer( + JxlDecoder* dec, const JxlPixelFormat* format, void* buffer, size_t size) { + if (!dec->got_basic_info || !dec->metadata.m.have_preview || +@@ -2401,23 +2412,12 @@ JXL_EXPORT JxlDecoderStatus JxlDecoderSetPreviewOutBuffer( + + JXL_EXPORT JxlDecoderStatus JxlDecoderImageOutBufferSize( + const JxlDecoder* dec, const JxlPixelFormat* format, size_t* size) { +- size_t bits; +- JxlDecoderStatus status = PrepareSizeCheck(dec, format, &bits); +- if (status != JXL_DEC_SUCCESS) return status; + if (format->num_channels < 3 && + !dec->image_metadata.color_encoding.IsGray()) { + return JXL_API_ERROR("Number of channels is too low for color output"); + } +- size_t xsize, ysize; +- GetCurrentDimensions(dec, xsize, ysize); +- size_t row_size = +- jxl::DivCeil(xsize * format->num_channels * bits, jxl::kBitsPerByte); +- if (format->align > 1) { +- row_size = jxl::DivCeil(row_size, format->align) * format->align; +- } +- *size = row_size * ysize; + +- return JXL_DEC_SUCCESS; ++ return GetMinSize(dec, format, 0, size, false); + } + + JxlDecoderStatus JxlDecoderSetImageOutBuffer(JxlDecoder* dec, +@@ -2463,22 +2463,7 @@ JxlDecoderStatus JxlDecoderExtraChannelBufferSize(const JxlDecoder* dec, + return JXL_API_ERROR("Invalid extra channel index"); + } + +- size_t num_channels = 1; // Do not use format's num_channels +- +- size_t bits; +- JxlDecoderStatus status = PrepareSizeCheck(dec, format, &bits); +- if (status != JXL_DEC_SUCCESS) return status; +- +- size_t xsize, ysize; +- GetCurrentDimensions(dec, xsize, ysize); +- size_t row_size = +- jxl::DivCeil(xsize * num_channels * bits, jxl::kBitsPerByte); +- if (format->align > 1) { +- row_size = jxl::DivCeil(row_size, format->align) * format->align; +- } +- *size = row_size * ysize; +- +- return JXL_DEC_SUCCESS; ++ return GetMinSize(dec, format, 1, size, false); + } + + JxlDecoderStatus JxlDecoderSetExtraChannelBuffer(JxlDecoder* dec, +diff --git a/lib/jxl/decode_test.cc b/lib/jxl/decode_test.cc +index caee6dbc568..310742f705f 100644 +--- a/lib/jxl/decode_test.cc ++++ b/lib/jxl/decode_test.cc +@@ -2575,7 +2575,11 @@ TEST(DecodeTest, AlignTest) { + size_t align = 17; + JxlPixelFormat format = {3, JXL_TYPE_UINT8, JXL_LITTLE_ENDIAN, align}; + // On purpose not using jxl::RoundUpTo to test it independently. +- size_t expected_line_bytes = (1 * 3 * xsize + align - 1) / align * align; ++ size_t expected_line_size_last = 1 * 3 * xsize; ++ size_t expected_line_size = ++ ((expected_line_size_last + align - 1) / align) * align; ++ size_t expected_pixels_size = ++ expected_line_size * (ysize - 1) + expected_line_size_last; + + for (int use_callback = 0; use_callback <= 1; ++use_callback) { + std::vector pixels2 = jxl::DecodeWithAPI( +@@ -2583,7 +2587,7 @@ TEST(DecodeTest, AlignTest) { + /*set_buffer_early=*/false, + /*use_resizable_runner=*/false, /*require_boxes=*/false, + /*expect_success=*/true); +- EXPECT_EQ(expected_line_bytes * ysize, pixels2.size()); ++ EXPECT_EQ(expected_pixels_size, pixels2.size()); + EXPECT_EQ(0u, jxl::test::ComparePixels(pixels.data(), pixels2.data(), xsize, + ysize, format_orig, format)); + } +From c4ebb7e70ee09591ae0269410ebe8929f400713e Mon Sep 17 00:00:00 2001 +From: Leo Izen +Date: Mon, 29 Jan 2024 09:23:36 -0500 +Subject: [PATCH] plugins/gdk-pixbuf: consider stride when passing buffer to + libjxl + +This change uses gdk_pixbuf_get_pixels_with_length to get the actual +size of the buffer, with stride taken into account. The previous code +just multiplies width by height and ignores stride. + +Signed-off-by: Leo Izen +--- + plugins/gdk-pixbuf/pixbufloader-jxl.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/plugins/gdk-pixbuf/pixbufloader-jxl.c b/plugins/gdk-pixbuf/pixbufloader-jxl.c +index bafa57b1674..066468a5035 100644 +--- a/plugins/gdk-pixbuf/pixbufloader-jxl.c ++++ b/plugins/gdk-pixbuf/pixbufloader-jxl.c +@@ -491,9 +491,8 @@ static gboolean load_increment(gpointer context, const guchar *buf, guint size, + decoder_state->frames->len - 1) + .data; + decoder_state->pixel_format.align = gdk_pixbuf_get_rowstride(output); +- guchar *dst = gdk_pixbuf_get_pixels(output); +- size_t num_pixels = decoder_state->xsize * decoder_state->ysize; +- size_t size = num_pixels * decoder_state->pixel_format.num_channels; ++ guint size; ++ guchar *dst = gdk_pixbuf_get_pixels_with_length(output, &size); + if (JXL_DEC_SUCCESS != JxlDecoderSetImageOutBuffer( + decoder_state->decoder, + &decoder_state->pixel_format, dst, size)) { diff --git a/srcpkgs/libjxl/template b/srcpkgs/libjxl/template index e6bd535377f..bcce3e32135 100644 --- a/srcpkgs/libjxl/template +++ b/srcpkgs/libjxl/template @@ -1,16 +1,16 @@ # Template file for 'libjxl' pkgname=libjxl -version=0.8.2 -revision=2 -_testdata_hash=d6168ffb9e1cc24007e64b65dd84d822ad1fc759 -_skcms_hash=b25b07b4b07990811de121c0356155b2ba0f4318 +version=0.9.1 +revision=1 +_testdata_hash=ff8d743aaba05b3014f17e5475e576242fa979fc build_style=cmake build_wrksrc="libjxl-${version}" configure_args="-DJPEGXL_ENABLE_BENCHMARK=OFF -DJPEGXL_ENABLE_EXAMPLES=OFF - -DJPEGXL_ENABLE_SJPEG=OFF -DJPEGXL_ENABLE_PLUGINS=ON -DJPEGXL_VERSION=${version}" + -DJPEGXL_ENABLE_SJPEG=OFF -DJPEGXL_ENABLE_PLUGINS=ON -DJPEGXL_VERSION=${version} + -DJPEGXL_ENABLE_SKCMS=OFF" hostmakedepends="tar pkg-config asciidoc" makedepends="brotli-devel highway libpng-devel giflib-devel libjpeg-turbo-devel - libopenexr-devel libwebp-devel gdk-pixbuf-devel gimp-devel" + libopenexr-devel libwebp-devel gdk-pixbuf-devel gimp-devel lcms2-devel" checkdepends="gtest-devel xdg-utils" short_desc="JPEG XL image format reference implementation" maintainer="Joshua Krämer " @@ -18,12 +18,9 @@ license="BSD-3-Clause, custom:Patent grant" homepage="https://jpeg.org/jpegxl/" changelog="https://raw.githubusercontent.com/libjxl/libjxl/main/CHANGELOG.md" distfiles="https://github.com/libjxl/libjxl/archive/v${version}.tar.gz - https://github.com/libjxl/testdata/archive/${_testdata_hash}.tar.gz>testdata-${_testdata_hash}.tar.gz - https://skia.googlesource.com/skcms/+archive/${_skcms_hash}.tar.gz>skcms-${_skcms_hash}.tar.gz" -checksum="c70916fb3ed43784eb840f82f05d390053a558e2da106e40863919238fa7b420 - 64658d3341bff2976899cb8b140242ffa4de1cd41aed507dfec4aa9e7e05ca24 - @8feb1e33c38ca13f91a0d5bd8ce25f976eb239edf38f49e6db8895ae9f1e833c" -skip_extraction="skcms-${_skcms_hash}.tar.gz" + https://github.com/libjxl/testdata/archive/${_testdata_hash}.tar.gz>testdata-${_testdata_hash}.tar.gz" +checksum="a0e72e9ece26878147069ad4888ac3382021d4bbee71c2e1b687d5bde7fd7e01 + 9c45a108df32a002a69465df896d33acf77d97c88fb59dffa0dff5628370e96f" patch_args="-Np1 --directory=${build_wrksrc}" if [ -z "$XBPS_CHECK_PKGS" ]; then @@ -32,7 +29,6 @@ fi post_extract() { mv "testdata-${_testdata_hash}"/* "${build_wrksrc}/testdata/" - bsdtar -xf "${XBPS_SRCDISTDIR}/${pkgname}-${version}/skcms-${_skcms_hash}.tar.gz" -C "${build_wrksrc}/third_party/skcms" } post_install() { @@ -40,12 +36,16 @@ post_install() { vlicense PATENTS } +post_install() { + # Remove devel symlink for internal library only used for tools. (headers don't get installed) + rm ${DESTDIR}/usr/lib/libjxl_extras_codec.so +} + libjxl-devel_package() { short_desc+=" - development files" depends="${sourcepkg}>=${version}_${revision} highway brotli-devel" pkg_install() { vmove usr/include - vmove "usr/lib/*.a" vmove "usr/lib/*.so" vmove usr/lib/pkgconfig } @@ -54,6 +54,7 @@ libjxl-devel_package() { libjxl-tools_package() { short_desc+=" - tools" pkg_install() { + vmove "usr/lib/libjxl_extras_codec*" vmove usr/bin vmove usr/share/man/man1 }