vector conversion
authorRosen Penev <rosenp@gmail.com>
Sat, 8 Jul 2023 21:18:35 +0000 (14:18 -0700)
committerColin Clark <colin.clark@cclark.uk>
Tue, 11 Jul 2023 15:27:18 +0000 (16:27 +0100)
Signed-off-by: Rosen Penev <rosenp@gmail.com>
src/image-load-jpegxl.cc

index 126b67d..3f71a7c 100644 (file)
@@ -57,6 +57,8 @@
 
 #ifdef HAVE_JPEGXL
 
+#include <vector>
+
 #include "jxl/decode.h"
 
 struct ImageLoaderJPEGXL {
@@ -79,7 +81,7 @@ static uint8_t *JxlMemoryToPixels(const uint8_t *next_in, size_t size, size_t *s
                            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;
@@ -131,10 +133,9 @@ static uint8_t *JxlMemoryToPixels(const uint8_t *next_in, size_t size, size_t *s
         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;
@@ -153,12 +154,9 @@ static uint8_t *JxlMemoryToPixels(const uint8_t *next_in, size_t size, size_t *s
   }
 
   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))