This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository legacy-imlib2.
View the commit online.
commit 1b2c012c7e9e763f5a206320e458360de13cc77a
Author: Kim Woelders <k...@woelders.dk>
AuthorDate: Sat Mar 1 12:37:02 2025 +0100
AVIF saver: Add one
---
src/modules/loaders/Makefile.am | 2 +-
src/modules/loaders/loader_avif.c | 71 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 71 insertions(+), 2 deletions(-)
diff --git a/src/modules/loaders/Makefile.am b/src/modules/loaders/Makefile.am
index d62bc03..fa3fc53 100644
--- a/src/modules/loaders/Makefile.am
+++ b/src/modules/loaders/Makefile.am
@@ -82,7 +82,7 @@ argb_la_SOURCES = loader_argb.c
argb_la_LDFLAGS = -module -avoid-version
argb_la_LIBTOOLFLAGS = --tag=disable-static
-avif_la_SOURCES = loader_avif.c
+avif_la_SOURCES = loader_avif.c $(SRCS_SAVE)
avif_la_CPPFLAGS = $(AM_CPPFLAGS) $(AVIF_CFLAGS)
avif_la_LDFLAGS = -module -avoid-version
avif_la_LIBADD = $(AVIF_LIBS)
diff --git a/src/modules/loaders/loader_avif.c b/src/modules/loaders/loader_avif.c
index 09d0874..3959c7f 100644
--- a/src/modules/loaders/loader_avif.c
+++ b/src/modules/loaders/loader_avif.c
@@ -1,5 +1,6 @@
#include "config.h"
#include "Imlib2_Loader.h"
+#include "ldrs_util.h"
#include <avif/avif.h>
@@ -105,4 +106,72 @@ _load(ImlibImage *im, int load_data)
return rc;
}
-IMLIB_LOADER(_formats, _load, NULL);
+static int
+_save(ImlibImage *im)
+{
+ int rc;
+ ImlibSaverParam imsp;
+ avifResult avrc;
+ avifEncoder *enc;
+ avifImage *avim = NULL;
+ avifRGBImage rgb;
+ avifRWData avout = AVIF_DATA_EMPTY;
+ unsigned int nw;
+
+ enc = avifEncoderCreate();
+ if (!enc)
+ return LOAD_OOM;
+
+ rc = LOAD_FAIL;
+
+ avim = avifImageCreate(im->w, im->h, 8, AVIF_PIXEL_FORMAT_YUV444);
+ if (!avim)
+ QUIT_WITH_RC(LOAD_OOM);
+
+ avifRGBImageSetDefaults(&rgb, avim);
+
+ rgb.pixels = (uint8_t *) im->data;
+ rgb.rowBytes = im->w * 4;
+ rgb.format = AVIF_RGB_FORMAT_RGBA;
+ rgb.ignoreAlpha = !im->has_alpha;
+
+ avrc = avifImageRGBToYUV(avim, &rgb);
+ if (avrc != AVIF_RESULT_OK)
+ QUIT_WITH_RC(LOAD_FAIL);
+
+ get_saver_params(im, &imsp);
+
+ enc->speed = 10 - imsp.compression;
+ if (imsp.quality == 100)
+ enc->quality = enc->qualityAlpha = AVIF_QUALITY_LOSSLESS;
+ else
+ enc->quality = enc->qualityAlpha = imsp.quality;
+
+ D("Quality/compr: %d/%d\n", imsp.quality, imsp.compression);
+ D("Quality/speed: %d/%d\n", enc->quality, enc->speed);
+
+ avrc = avifEncoderAddImage(enc, avim, 1, AVIF_ADD_IMAGE_FLAG_SINGLE);
+ if (avrc != AVIF_RESULT_OK)
+ QUIT_WITH_RC(LOAD_FAIL);
+
+ avrc = avifEncoderFinish(enc, &avout);
+ if (avrc != AVIF_RESULT_OK)
+ QUIT_WITH_RC(LOAD_FAIL);
+
+ nw = fwrite(avout.data, 1, avout.size, im->fi->fp);
+ if (nw != avout.size)
+ QUIT_WITH_RC(LOAD_FAIL);
+
+ rc = LOAD_SUCCESS;
+
+ quit:
+ if (avim)
+ avifImageDestroy(avim);
+ if (enc)
+ avifEncoderDestroy(enc);
+ avifRWDataFree(&avout);
+
+ return rc;
+}
+
+IMLIB_LOADER(_formats, _load, _save);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.