diff --git a/srcpkgs/libjxl/patches/fix-pixbuf.patch b/srcpkgs/libjxl/patches/fix-pixbuf.patch deleted file mode 100644 index 47166a8f60d..00000000000 --- a/srcpkgs/libjxl/patches/fix-pixbuf.patch +++ /dev/null @@ -1,184 +0,0 @@ -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 bcce3e32135..27d762c744f 100644 --- a/srcpkgs/libjxl/template +++ b/srcpkgs/libjxl/template @@ -1,6 +1,6 @@ # Template file for 'libjxl' pkgname=libjxl -version=0.9.1 +version=0.9.2 revision=1 _testdata_hash=ff8d743aaba05b3014f17e5475e576242fa979fc build_style=cmake @@ -19,7 +19,7 @@ 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" -checksum="a0e72e9ece26878147069ad4888ac3382021d4bbee71c2e1b687d5bde7fd7e01 +checksum="bf28e411d84c50578ab74107cdd624e099313129883a43907c261e8116a11b3b 9c45a108df32a002a69465df896d33acf77d97c88fb59dffa0dff5628370e96f" patch_args="-Np1 --directory=${build_wrksrc}"