configure, meson: bump libjxl dependency to 0.6.1

JPEG XL plug-in always imported all JXL images
in 32-bit float precision in the past.
Now it also supports direct import in 8-bit
and 16-bit integer precision too.
This commit is contained in:
Daniel Novomeský 2022-01-01 17:40:52 +01:00
parent 2da425ea5b
commit 6acb5fde3e
3 changed files with 31 additions and 7 deletions

View File

@ -75,7 +75,7 @@ m4_define([json_glib_required_version], [1.2.6])
m4_define([lcms_required_version], [2.8])
m4_define([libgudev_required_version], [167])
m4_define([libheif_required_version], [1.3.2])
m4_define([libjxl_required_version], [0.5.0])
m4_define([libjxl_required_version], [0.6.1])
m4_define([liblzma_required_version], [5.0.0])
m4_define([libmypaint_required_version], [1.3.0])
m4_define([libpng_required_version], [1.6.25])

View File

@ -800,7 +800,7 @@ if openjpeg.found()
MIMEtypes += [ 'image/jp2', 'image/jpeg2000', 'image/jpx', ]
endif
jpegxl_minver = '0.5.0'
jpegxl_minver = '0.6.1'
libjxl = dependency('libjxl',
version: '>='+jpegxl_minver,
required: get_option('jpeg-xl')

View File

@ -214,12 +214,15 @@ load_image (GFile *file,
size_t icc_size = 0;
GimpColorProfile *profile = NULL;
gboolean loadlinear = FALSE;
size_t channel_depth;
size_t result_size;
gpointer picture_buffer;
GimpImage *image;
GimpLayer *layer;
GeglBuffer *buffer;
GimpPrecision precision_linear;
GimpPrecision precision_non_linear;
if (!inputFile)
{
@ -374,7 +377,28 @@ load_image (GFile *file,
pixel_format.endianness = JXL_NATIVE_ENDIAN;
pixel_format.align = 0;
if (basicinfo.bits_per_sample <= 8)
{
pixel_format.data_type = JXL_TYPE_UINT8;
channel_depth = 1;
precision_linear = GIMP_PRECISION_U8_LINEAR;
precision_non_linear = GIMP_PRECISION_U8_NON_LINEAR;
}
else if (basicinfo.bits_per_sample > 16)
{
pixel_format.data_type = JXL_TYPE_FLOAT;
channel_depth = 4;
precision_linear = GIMP_PRECISION_FLOAT_LINEAR;
precision_non_linear = GIMP_PRECISION_FLOAT_NON_LINEAR;
}
else
{
pixel_format.data_type = JXL_TYPE_UINT16;
channel_depth = 2;
precision_linear = GIMP_PRECISION_U16_LINEAR;
precision_non_linear = GIMP_PRECISION_U16_NON_LINEAR;
}
if (basicinfo.num_color_channels == 1) /* grayscale */
{
@ -400,7 +424,7 @@ load_image (GFile *file,
}
}
result_size = 4 * pixel_format.num_channels * (size_t) basicinfo.xsize * (size_t) basicinfo.ysize;
result_size = channel_depth * pixel_format.num_channels * (size_t) basicinfo.xsize * (size_t) basicinfo.ysize;
if (JxlDecoderGetColorAsEncodedProfile (decoder, &pixel_format,
JXL_COLOR_PROFILE_TARGET_DATA,
@ -551,7 +575,7 @@ load_image (GFile *file,
if (basicinfo.num_color_channels == 1) /* grayscale */
{
image = gimp_image_new_with_precision (basicinfo.xsize, basicinfo.ysize, GIMP_GRAY,
loadlinear ? GIMP_PRECISION_FLOAT_LINEAR : GIMP_PRECISION_FLOAT_NON_LINEAR);
loadlinear ? precision_linear : precision_non_linear);
if (profile)
{
@ -569,7 +593,7 @@ load_image (GFile *file,
else /* RGB */
{
image = gimp_image_new_with_precision (basicinfo.xsize, basicinfo.ysize, GIMP_RGB,
loadlinear ? GIMP_PRECISION_FLOAT_LINEAR : GIMP_PRECISION_FLOAT_NON_LINEAR);
loadlinear ? precision_linear : precision_non_linear);
if (profile)
{
@ -723,7 +747,7 @@ save_image (GFile *file,
drawable_width = gimp_drawable_get_width (drawable);
drawable_height = gimp_drawable_get_height (drawable);
memset (&output_info, 0, sizeof output_info);
JxlEncoderInitBasicInfo(&output_info);
if (uses_original_profile)
{