Skip to content

Commit f36196d

Browse files
authored
jxlsave: avoid using deprecated functions (#2989)
* jxlsave: avoid using deprecated functions The upcoming libjxl 0.7 has deprecated a number of functions. * Prefer to use `ifdef` instead
1 parent 34427d8 commit f36196d

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed

configure.ac

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,13 @@ if test x"$with_libjxl" != x"no"; then
847847
with_libjxl=yes
848848
AS_IF([test x"$with_libjxl_module" = x"no"],
849849
[PACKAGES_USED="$PACKAGES_USED libjxl"])
850+
851+
PKG_CHECK_MODULES(LIBJXL_0_7, libjxl >= 0.7,
852+
[AC_DEFINE(HAVE_LIBJXL_0_7,1,[define if you have libjxl >= 0.7])
853+
],
854+
[:
855+
]
856+
)
850857
],
851858
[AS_IF([test x"$with_libjxl" = x"test"],
852859
AC_MSG_WARN([libjxl not found; disabling libjxl support]),

libvips/foreign/jxlsave.c

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,11 @@ vips_foreign_save_jxl_build( VipsObject *object )
229229
VipsForeignSaveJxl *jxl = (VipsForeignSaveJxl *) object;
230230
VipsImage **t = (VipsImage **) vips_object_local_array( object, 5 );
231231

232-
JxlEncoderOptions *options;
232+
#ifdef HAVE_LIBJXL_0_7
233+
JxlEncoderFrameSettings *frame_settings;
234+
#else
235+
JxlEncoderOptions *frame_settings;
236+
#endif
233237
JxlEncoderStatus status;
234238
VipsImage *in;
235239
VipsBandFormat format;
@@ -415,23 +419,33 @@ vips_foreign_save_jxl_build( VipsObject *object )
415419
if( vips_image_wio_input( in ) )
416420
return( -1 );
417421

418-
options = JxlEncoderOptionsCreate( jxl->encoder, NULL );
419-
JxlEncoderOptionsSetDecodingSpeed( options, jxl->tier );
420-
JxlEncoderOptionsSetDistance( options, jxl->distance );
421-
JxlEncoderOptionsSetEffort( options, jxl->effort );
422-
JxlEncoderOptionsSetLossless( options, jxl->lossless );
422+
#ifdef HAVE_LIBJXL_0_7
423+
frame_settings = JxlEncoderFrameSettingsCreate( jxl->encoder, NULL );
424+
JxlEncoderFrameSettingsSetOption( frame_settings,
425+
JXL_ENC_FRAME_SETTING_DECODING_SPEED, jxl->tier );
426+
JxlEncoderSetFrameDistance( frame_settings, jxl->distance );
427+
JxlEncoderFrameSettingsSetOption( frame_settings,
428+
JXL_ENC_FRAME_SETTING_EFFORT, jxl->effort );
429+
JxlEncoderSetFrameLossless( frame_settings, jxl->lossless );
430+
#else
431+
frame_settings = JxlEncoderOptionsCreate( jxl->encoder, NULL );
432+
JxlEncoderOptionsSetDecodingSpeed( frame_settings, jxl->tier );
433+
JxlEncoderOptionsSetDistance( frame_settings, jxl->distance );
434+
JxlEncoderOptionsSetEffort( frame_settings, jxl->effort );
435+
JxlEncoderOptionsSetLossless( frame_settings, jxl->lossless );
436+
#endif
423437

424438
#ifdef DEBUG
425439
vips_foreign_save_jxl_print_info( &jxl->info );
426440
vips_foreign_save_jxl_print_format( &jxl->format );
427-
printf( "JxlEncoderOptions:\n" );
441+
printf( "JxlEncoderFrameSettings:\n" );
428442
printf( " tier = %d\n", jxl->tier );
429443
printf( " distance = %g\n", jxl->distance );
430444
printf( " effort = %d\n", jxl->effort );
431445
printf( " lossless = %d\n", jxl->lossless );
432446
#endif /*DEBUG*/
433447

434-
if( JxlEncoderAddImageFrame( options, &jxl->format,
448+
if( JxlEncoderAddImageFrame( frame_settings, &jxl->format,
435449
VIPS_IMAGE_ADDR( in, 0, 0 ),
436450
VIPS_IMAGE_SIZEOF_IMAGE( in ) ) ) {
437451
vips_foreign_save_jxl_error( jxl, "JxlEncoderAddImageFrame" );

meson.build

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,9 @@ if libjxl_found
484484
if cc.has_function('JxlEncoderInitBasicInfo', prefix: '#include <jxl/encode.h>', dependencies: libjxl_dep)
485485
cfg_var.set('HAVE_LIBJXL_JXLENCODERINITBASICINFO', '1')
486486
endif
487+
if libjxl_dep.version().version_compare('>=0.7')
488+
cfg_var.set('HAVE_LIBJXL_0_7', '1')
489+
endif
487490
endif
488491

489492
libpoppler_dep = dependency('poppler-glib', version: '>=0.16.0', required: get_option('poppler'))

0 commit comments

Comments
 (0)