#ifdef HAVE_JPEGXL
+#include <vector>
+
#include "jxl/decode.h"
struct ImageLoaderJPEGXL {
size_t *xsize, size_t *ysize, int *has_alpha) {
JxlDecoder *dec = JxlDecoderCreate(nullptr);
*has_alpha = 1;
- uint8_t *pixels = nullptr;
+ std::vector<uint8_t> pixels;
if (!dec) {
log_printf("JxlDecoderCreate failed\n");
return nullptr;
break;
}
size_t pixels_buffer_size = buffer_size * sizeof(uint8_t);
- pixels = static_cast<uint8_t *>(malloc(pixels_buffer_size));
- auto pixels_buffer = (void *)pixels;
+ pixels.reserve(buffer_size);
if (JXL_DEC_SUCCESS != JxlDecoderSetImageOutBuffer(dec, &format,
- pixels_buffer,
+ pixels.data(),
pixels_buffer_size)) {
log_printf("JxlDecoderSetImageOutBuffer failed\n");
break;
}
JxlDecoderDestroy(dec);
- if (success){
- return pixels;
- } else {
- free(pixels);
- return nullptr;
- }
+ if (success)
+ return pixels.data();
+ return nullptr;
}
static gboolean image_loader_jpegxl_load(gpointer loader, const guchar *buf, gsize count, GError **UNUSED(error))