jpg.c

#ifdef LIL_USE_JPEG
#include <turbojpeg.h>
#include <setjmp.h>

#include "inc.h"

LUAFUNC(importJpeg){
	size_t len;
	const uint8_t* data = (const uint8_t*)lua_tolstring(L, 1, &len);
	tjhandle jpg = tjInitDecompress();
	if(!jpg)
		return 0;
	int w, h, jpegSubsamp;
	if(tjDecompressHeader2(jpg, (uint8_t*)data, len, &w, &h, &jpegSubsamp) == -1){
		tjDestroy(jpg);
		return 0;
	}
	lil_Image* img = lil_newImage(L, w, h);
	if(!img){
		tjDestroy(jpg);
		return 0;
	}
	if(tjDecompress2(jpg, (uint8_t*)data, len, img->dptr, w, 0, h, TJPF_RGBA, TJFLAG_FASTDCT) == -1){
		tjDestroy(jpg);
		lil_freeImage(img);
		return 0;
	}
	tjDestroy(jpg);
	lil_pushImage(L, img);
	return 1;
}

LUAFUNC(exportJpeg){
	const lil_Image* img = lil_getImage(L, 1);
	lil_Number quality;
	lil_getExportOpts(L, 2, &quality, NULL);
	quality = ((quality + 1) * 100) - 100;
	tjhandle jpg = tjInitCompress();
	if(!jpg)
		return 0;
	unsigned char* data = NULL;
	unsigned long len = 0;
	tjCompress2(jpg, img->dptr, img->w, 0, img->h, TJPF_RGBA, &data, &len, TJSAMP_444, quality, TJFLAG_FASTDCT);
	tjDestroy(jpg);
	lua_pushlstring(L, (const char*)data, len);
	tjFree(data);
	return 1;
}

#endif
generated by LDoc 1.4.6 Last updated 2023-04-13 13:58:34