diff --git a/CMakeLists.txt b/CMakeLists.txt index 68c0c35..8025ead 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,8 +65,8 @@ add_feature_info(LibHeif LibHeif_FOUND "required for the QImage plugin for HEIF/ option(KIMAGEFORMATS_JXL "Enable plugin for JPEG XL format" ON) if(KIMAGEFORMATS_JXL) - pkg_check_modules(LibJXL IMPORTED_TARGET libjxl>=0.6.1) - pkg_check_modules(LibJXLThreads IMPORTED_TARGET libjxl_threads>=0.6.1) + pkg_check_modules(LibJXL IMPORTED_TARGET libjxl>=0.7.0) + pkg_check_modules(LibJXLThreads IMPORTED_TARGET libjxl_threads>=0.7.0) endif() add_feature_info(LibJXL LibJXL_FOUND "required for the QImage plugin for JPEG XL images") diff --git a/src/imageformats/CMakeLists.txt b/src/imageformats/CMakeLists.txt index bb1ef4c..b41b472 100644 --- a/src/imageformats/CMakeLists.txt +++ b/src/imageformats/CMakeLists.txt @@ -71,9 +71,6 @@ endif() if (LibJXL_FOUND AND LibJXLThreads_FOUND) kimageformats_add_plugin(kimg_jxl SOURCES jxl.cpp) target_link_libraries(kimg_jxl PRIVATE PkgConfig::LibJXL PkgConfig::LibJXLThreads) - if (LibJXL_VERSION VERSION_GREATER_EQUAL "0.7.0") - target_compile_definitions(kimg_jxl PRIVATE KIMG_JXL_API_VERSION=70) - endif() endif() ################################## diff --git a/src/imageformats/jxl.cpp b/src/imageformats/jxl.cpp index 2501086..c8ecafd 100644 --- a/src/imageformats/jxl.cpp +++ b/src/imageformats/jxl.cpp @@ -150,9 +150,7 @@ bool QJpegXLHandler::ensureDecoder() return false; } -#ifdef KIMG_JXL_API_VERSION JxlDecoderCloseInput(m_decoder); -#endif JxlDecoderStatus status = JxlDecoderSubscribeEvents(m_decoder, JXL_DEC_BASIC_INFO | JXL_DEC_COLOR_ENCODING | JXL_DEC_FRAME); if (status == JXL_DEC_ERROR) { @@ -269,18 +267,31 @@ bool QJpegXLHandler::countALLFrames() } } - status = JxlDecoderGetColorAsEncodedProfile(m_decoder, &m_input_pixel_format, JXL_COLOR_PROFILE_TARGET_DATA, &color_encoding); + status = JxlDecoderGetColorAsEncodedProfile(m_decoder, +#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) + &m_input_pixel_format, +#endif + JXL_COLOR_PROFILE_TARGET_DATA, + &color_encoding); if (status == JXL_DEC_SUCCESS && color_encoding.color_space == JXL_COLOR_SPACE_RGB && color_encoding.white_point == JXL_WHITE_POINT_D65 && color_encoding.primaries == JXL_PRIMARIES_SRGB && color_encoding.transfer_function == JXL_TRANSFER_FUNCTION_SRGB) { m_colorspace = QColorSpace(QColorSpace::SRgb); } else { size_t icc_size = 0; - if (JxlDecoderGetICCProfileSize(m_decoder, &m_input_pixel_format, JXL_COLOR_PROFILE_TARGET_DATA, &icc_size) == JXL_DEC_SUCCESS) { + if (JxlDecoderGetICCProfileSize(m_decoder, +#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) + &m_input_pixel_format, +#endif + JXL_COLOR_PROFILE_TARGET_DATA, + &icc_size) + == JXL_DEC_SUCCESS) { if (icc_size > 0) { QByteArray icc_data(icc_size, 0); if (JxlDecoderGetColorAsICCProfile(m_decoder, +#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0) &m_input_pixel_format, +#endif JXL_COLOR_PROFILE_TARGET_DATA, reinterpret_cast(icc_data.data()), icc_data.size()) @@ -534,9 +545,7 @@ bool QJpegXLHandler::write(const QImage &image) if (save_depth == 16 && (image.hasAlphaChannel() || output_info.uses_original_profile)) { output_info.have_container = JXL_TRUE; JxlEncoderUseContainer(encoder, JXL_TRUE); -#ifdef KIMG_JXL_API_VERSION JxlEncoderSetCodestreamLevel(encoder, 10); -#endif } void *runner = nullptr; @@ -650,19 +659,11 @@ bool QJpegXLHandler::write(const QImage &image) } } -#ifdef KIMG_JXL_API_VERSION JxlEncoderFrameSettings *encoder_options = JxlEncoderFrameSettingsCreate(encoder, nullptr); JxlEncoderSetFrameDistance(encoder_options, (100.0f - m_quality) / 10.0f); JxlEncoderSetFrameLossless(encoder_options, (m_quality == 100) ? JXL_TRUE : JXL_FALSE); -#else - JxlEncoderOptions *encoder_options = JxlEncoderOptionsCreate(encoder, nullptr); - - JxlEncoderOptionsSetDistance(encoder_options, (100.0f - m_quality) / 10.0f); - - JxlEncoderOptionsSetLossless(encoder_options, (m_quality == 100) ? JXL_TRUE : JXL_FALSE); -#endif if (image.hasAlphaChannel() || ((save_depth == 8) && (xsize % 4 == 0))) { status = JxlEncoderAddImageFrame(encoder_options, &pixel_format, static_cast(tmpimage.constBits()), buffer_size); @@ -957,9 +958,7 @@ bool QJpegXLHandler::rewind() return false; } -#ifdef KIMG_JXL_API_VERSION JxlDecoderCloseInput(m_decoder); -#endif if (m_basicinfo.uses_original_profile) { if (JxlDecoderSubscribeEvents(m_decoder, JXL_DEC_FULL_IMAGE) != JXL_DEC_SUCCESS) {