From 4e28039c02c909c48a3ef524d6a4584bf62f9ccc Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Mon, 19 Apr 2021 10:12:28 +0100 Subject: [PATCH] fix distance 0 save, better error messages --- libvips/foreign/jxlload.c | 5 +++-- libvips/foreign/jxlsave.c | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/libvips/foreign/jxlload.c b/libvips/foreign/jxlload.c index cf3af215..7dca7e2e 100644 --- a/libvips/foreign/jxlload.c +++ b/libvips/foreign/jxlload.c @@ -141,7 +141,7 @@ vips_foreign_load_jxl_error( VipsForeignLoadJxl *jxl, const char *details ) /* TODO ... jxl has no way to get error messages at the moment. */ - vips_error( class->nickname, "%s", details ); + vips_error( class->nickname, "error %s", details ); } static int @@ -279,7 +279,8 @@ vips_foreign_load_jxl_print_status( JxlDecoderStatus status ) break; default: - g_assert_not_reached(); + printf( "JXL_DEC_\n" ); + break; } } diff --git a/libvips/foreign/jxlsave.c b/libvips/foreign/jxlsave.c index 7cd74005..56a26541 100644 --- a/libvips/foreign/jxlsave.c +++ b/libvips/foreign/jxlsave.c @@ -129,7 +129,7 @@ vips_foreign_save_jxl_error( VipsForeignSaveJxl *jxl, const char *details ) /* TODO ... jxl has no way to get error messages at the moment. */ - vips_error( class->nickname, "%s", details ); + vips_error( class->nickname, "error %s", details ); } #ifdef DEBUG @@ -200,6 +200,32 @@ vips_foreign_save_jxl_print_format( JxlPixelFormat *format ) printf( " endianness = %d\n", format->endianness ); printf( " align = %zd\n", format->align ); } + +static void +vips_foreign_save_jxl_print_status( JxlEncoderStatus status ) +{ + switch( status ) { + case JXL_ENC_SUCCESS: + printf( "JXL_ENC_SUCCESS\n" ); + break; + + case JXL_ENC_ERROR: + printf( "JXL_ENC_ERROR\n" ); + break; + + case JXL_ENC_NEED_MORE_OUTPUT: + printf( "JXL_ENC_NEED_MORE_OUTPUT\n" ); + break; + + case JXL_ENC_NOT_SUPPORTED: + printf( "JXL_ENC_NOT_SUPPORTED\n" ); + break; + + default: + printf( "JXL_ENC_\n" ); + break; + } +} #endif /*DEBUG*/ static int @@ -224,6 +250,11 @@ vips_foreign_save_jxl_build( VipsObject *object ) 0.1 + (100 - jxl->Q) * 0.09 : 6.4 + pow(2.5, (30 - jxl->Q) / 5.0f) / 6.25f; + /* Distance 0 is lossless. libjxl will fail for lossy distance 0. + */ + if( jxl->distance == 0 ) + jxl->lossless = TRUE; + jxl->runner = JxlThreadParallelRunnerCreate( NULL, vips_concurrency_get() ); jxl->encoder = JxlEncoderCreate( NULL ); @@ -390,6 +421,9 @@ vips_foreign_save_jxl_build( VipsObject *object ) default: vips_foreign_save_jxl_error( jxl, "JxlEncoderProcessOutput" ); +#ifdef DEBUG + vips_foreign_save_jxl_print_status( status ); +#endif /*DEBUG*/ return( -1 ); } } while( status != JXL_ENC_SUCCESS );