From 9136eaa54fc35349b5128b40e127ef8b1a51ae15 Mon Sep 17 00:00:00 2001 From: Alessandro Mauri Date: Wed, 15 Feb 2023 02:15:44 +0100 Subject: [PATCH] something --- text_rendering/Makefile | 7 + text_rendering/atlas.png | Bin 0 -> 20174 bytes text_rendering/cache.c | 2 +- text_rendering/cache.h | 2 +- text_rendering/font.c | 126 ++- text_rendering/font.h | 5 +- text_rendering/main.c | 30 +- text_rendering/monospace.ttf | Bin 0 -> 309408 bytes text_rendering/stb_image_write.h | 1724 ++++++++++++++++++++++++++++++ text_rendering/test | Bin 17160 -> 287952 bytes text_rendering/util.c | 5 +- text_rendering/util.h | 4 + 12 files changed, 1838 insertions(+), 67 deletions(-) create mode 100644 text_rendering/Makefile create mode 100644 text_rendering/atlas.png create mode 100644 text_rendering/monospace.ttf create mode 100644 text_rendering/stb_image_write.h diff --git a/text_rendering/Makefile b/text_rendering/Makefile new file mode 100644 index 0000000..9df2ab1 --- /dev/null +++ b/text_rendering/Makefile @@ -0,0 +1,7 @@ +LDFLAGS = -lm -lgrapheme +CFLAGS = -g -Wall -Wextra -pedantic +SOURCE = main.c font.c cache.c hash.c util.c +HEADER = font.h hash.h cache.h util.h + +test: ${HEADER} ${SOURCE} + gcc ${CFLAGS} ${LDFLAGS} ${SOURCE} -o test diff --git a/text_rendering/atlas.png b/text_rendering/atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e59c623a89ec04ec647ee12b34f223e1a767a0 GIT binary patch literal 20174 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 BUE}}& literal 0 HcmV?d00001 diff --git a/text_rendering/cache.c b/text_rendering/cache.c index f352549..c891b3a 100644 --- a/text_rendering/cache.c +++ b/text_rendering/cache.c @@ -79,7 +79,7 @@ unsigned int cache_get(void) // inserts the font glyph into the cache -const struct font_glyph * cache_insert(struct font_glyph *g, unsigned int x) +const struct font_glyph * cache_insert(const struct font_glyph *g, unsigned int x) { struct font_glyph *spot = NULL; diff --git a/text_rendering/cache.h b/text_rendering/cache.h index 3741d47..2ec630a 100644 --- a/text_rendering/cache.h +++ b/text_rendering/cache.h @@ -7,7 +7,7 @@ void cache_init(void); void cache_destroy(void); const struct font_glyph * cache_search(unsigned int code); unsigned int cache_get(void); -const struct font_glyph * cache_insert(struct font_glyph *g, unsigned int idx); +const struct font_glyph * cache_insert(const struct font_glyph *g, unsigned int idx); #endif diff --git a/text_rendering/font.c b/text_rendering/font.c index 983cab5..0188c43 100644 --- a/text_rendering/font.c +++ b/text_rendering/font.c @@ -2,6 +2,7 @@ #define STB_TRUETYPE_IMPLEMENTATION #define STBTT_STATIC #define MSDF_IMPLEMENTATION +#define STB_IMAGE_WRITE_IMPLEMENTATION #include #include @@ -9,6 +10,7 @@ #include "font.h" #include "msdf_c/stb_truetype.h" #include "msdf_c/msdf.h" +#include "stb_image_write.h" #include "util.h" #include "cache.h" @@ -49,28 +51,39 @@ static inline void * _emalloc(size_t x, void *_) { (void)_; return emalloc(x); } static inline void _efree(void *x, void *_) { (void)_; efree(x); } +struct font_atlas * font_init(void) +{ + return emalloc(sizeof(struct font_atlas)); +} + + // loads a font into memory, storing all the ASCII characters in the atlas -int font_load(struct font_atlas *atlas, const char *path, int height) +int font_load(struct font_atlas *atlas, const char *path) { if (!atlas || !path) return -1; + int err; + dump_file(path, &(atlas->file), &(atlas->file_size)); - stbtt_InitFont(&(atlas->priv.stb), atlas->file, 0); - atlas->priv.scale = stbtt_ScaleForPixelHeight(&(atlas->priv.stb), height); - int ascent, descent, linegap, baseline; - int x0,y0,x1,y1; - stbtt_GetFontVMetrics(&(atlas->priv.stb), &ascent, &descent, &linegap); - stbtt_GetFontBoundingBox(&(atlas->priv.stb), &x0, &y0, &x1, &y1); + err = stbtt_InitFont(&(atlas->priv.stb), atlas->file, 0); + ERROR(err == 0, -1); - baseline = atlas->priv.scale * -y0; + atlas->priv.scale = stbtt_ScaleForPixelHeight(&(atlas->priv.stb), glyph_h); + //int ascent, descent, linegap, baseline; + //int x0,y0,x1,y1; + //stbtt_GetFontVMetrics(&(atlas->priv.stb), &ascent, &descent, &linegap); + //stbtt_GetFontBoundingBox(&(atlas->priv.stb), &x0, &y0, &x1, &y1); + //baseline = atlas->priv.scale * -y0; //atlas->glyph_max_w = (atlas->priv.scale*x1) - (atlas->priv.scale*x0); //atlas->glyph_max_h = (baseline+atlas->priv.scale*y1) - (baseline+atlas->priv.scale*y0); //atlas->atlas = emalloc(atlas->glyph_max_w*atlas->glyph_max_h*CACHE_SIZE); + atlas->atlas = ecalloc(CACHE_SIZE, BDEPTH*glyph_h*glyph_w); - atlas->width = glyph_w*CACHE_SIZE; - atlas->height = glyph_h*CACHE_SIZE; + memset(atlas->atlas, 0, CACHE_SIZE*BDEPTH*glyph_h*glyph_w); + atlas->width = glyph_w*CACHE_SIZE/2; + atlas->height = glyph_h*CACHE_SIZE/2; atlas->priv.ctx = (msdf_AllocCtx){_emalloc, _efree, NULL}; @@ -84,36 +97,60 @@ int font_free(struct font_atlas *atlas) { efree(atlas->atlas); efree(atlas->file); + efree(atlas); + cache_destroy(); return 0; } // FIXME: when generating the sdf I only use the height, so to not encounter memory // errors height and width must be equal -static unsigned int insert(struct font_atlas *atlas) +const struct font_glyph * font_get_glyph_texture(struct font_atlas *atlas, unsigned int code) { - unsigned char *a = atlas->atlas; - msdf_Result res = atlas->priv.msdf; + const struct font_glyph *r; + if ((r = cache_search(code)) != NULL) + return r; + + // generate the sdf and put it into the cache + // TODO: generate the whole block at once + int idx = stbtt_FindGlyphIndex(&atlas->priv.stb, code); + // FIXME: what happens if I change the range? + int err; + err = msdf_genGlyph(&atlas->priv.msdf, + &atlas->priv.stb, + idx, + BORDER, + atlas->priv.scale, + 2.0f/glyph_h, + &atlas->priv.ctx); + if (!err) + return NULL; + + unsigned int spot = cache_get(); + unsigned int oy = (glyph_h * spot) / atlas->width; + unsigned int ox = (glyph_h * spot) % atlas->height; + unsigned int w = atlas->width; + + // sum magic shit + struct {unsigned char r,g,b;} *a = (void *)atlas->atlas; + msdf_Result *res = &atlas->priv.msdf; float s = glyph_h; float tw = ((s * 0.7f) + s) / (s * 2.0f); float ta = tw - 0.5f; float ts = 0.5 - ta / 2; float te = ts + ta; - unsigned int spot = cache_get(); - unsigned int off = spot * glyph_h * glyph_w * BDEPTH; - #define NORMALIZE(x) x = x > ts ? (x > te ? 1.0f : (x-ts)/ta+0.0f) : (0.0f) - for (int y = 0; y < res.height; y++) { - int yPos = res.width * 3 * y; - for (int x = 0; x < res.width; x++) { + for (int y = 0; y < res->height; y++) { + int yPos = res->width * 3 * y; + for (int x = 0; x < res->width; x++) { int i = yPos + (x * 3); - float r = res.rgb[i+0]; - float g = res.rgb[i+1]; - float b = res.rgb[i+2]; + float r = res->rgb[i+0]; + float g = res->rgb[i+1]; + float b = res->rgb[i+2]; r = (r + s) / (s * 2.0f); g = (g + s) / (s * 2.0f); @@ -123,36 +160,31 @@ static unsigned int insert(struct font_atlas *atlas) NORMALIZE(g); NORMALIZE(b); - a[off + glyph_w*y + x + 0] = r * 255.0f; // (r > 0.5f) ? 255.0f : r * 255.0f; - a[off + glyph_w*y + x + 0] = g * 255.0f; // (g > 0.5f) ? 255.0f : g * 255.0f; - a[off + glyph_w*y + x + 0] = b * 255.0f; // (b > 0.5f) ? 255.0f : b * 255.0f; + a[(oy+y)*w + (ox+x)].r = r * 255.0f; // (r > 0.5f) ? 255.0f : r * 255.0f; + a[(oy+y)*w + (ox+x)].g = g * 255.0f; // (g > 0.5f) ? 255.0f : g * 255.0f; + a[(oy+y)*w + (ox+x)].b = b * 255.0f; // (b > 0.5f) ? 255.0f : b * 255.0f; } } - return spot; + struct font_glyph g = { + .codepoint = code, + .u = ox, + .v = oy, + .w = res->width, + .h = res->height, + }; + return cache_insert(&g, spot); } -struct font_glyph * font_get_glyph_texture(struct font_atlas *atlas, unsigned int code) +void font_dump(const struct font_atlas *atlas, const char *path) { - struct font_glyph *r; - if ((r = cache_search(code)) != NULL) - return r; - - // generate the sdf and put it into the cache - // TODO: generate the whole block at once - int idx = stbtt_FindGlyphIndex(&atlas->priv.stb, code); - // FIXME: what happens if I change the range? - int s; - s = msdf_genGlyph(&atlas->priv.msdf, - &atlas->priv.stb, - idx, - BORDER, - atlas->priv.scale, - 2.0f/glyph_h, - &atlas->priv.ctx); - if (!s) - return NULL; - unsigned int spot = insert(atlas); - + stbi_write_png( + path, + //atlas->width, + //atlas->height, + 128, 128, + BDEPTH, + atlas->atlas, + BDEPTH*atlas->width); } diff --git a/text_rendering/font.h b/text_rendering/font.h index 5eee637..174dc01 100644 --- a/text_rendering/font.h +++ b/text_rendering/font.h @@ -27,7 +27,10 @@ struct font_glyph { struct font_atlas; -int font_load(struct font_atlas *atlas, const char *path, int height); +struct font_atlas * font_init(void); +int font_load(struct font_atlas *atlas, const char *path); int font_free(struct font_atlas *atlas); +const struct font_glyph * font_get_glyph_texture(struct font_atlas *atlas, unsigned int code); +void font_dump(const struct font_atlas *atlas, const char *path); #endif diff --git a/text_rendering/main.c b/text_rendering/main.c index 943ad67..61ffcb4 100644 --- a/text_rendering/main.c +++ b/text_rendering/main.c @@ -4,32 +4,30 @@ #include "cache.h" #include "font.h" +#include "util.h" int main(void) { - cache_init(); + int err; + struct font_atlas *at = font_init(); + err = font_load(at, "./monospace.ttf"); + ERROR(err, -1, printf("failed to load font\n")); - struct font_glyph *g, b; - b.codepoint = 'a'; - b.u = b.v = 10; - b.w = b.h = 20; - - g = cache_get('a'); - if (!g) printf("no element\n"); - g = cache_get(0xa3c0); - if (!g) printf("not present\n"); - - const char *s = "κόσμε ciao mamma @à``²`²aas³³²"; + const char *s = "ciao mamma"; + const struct font_glyph *g; size_t ret, off; uint_least32_t cp; for (off = 0; (ret = grapheme_decode_utf8(s+off, SIZE_MAX, &cp)) > 0 && cp != 0; off += ret) { printf("%.*s (%d) -> %d\n", (int)ret, s+off, (int)ret, cp); - b.codepoint = cp; - if (cache_insert(&b)) printf("failed insert %d\n", b.codepoint); - if ((g = cache_get(cp))) printf("got %d\n", g->codepoint); + g = font_get_glyph_texture(at, cp); + if (!g) + printf("g is NULL\n"); } - cache_destroy(); + font_dump(at, "./atlas.png"); + + font_free(at); + return 0; } diff --git a/text_rendering/monospace.ttf b/text_rendering/monospace.ttf new file mode 100644 index 0000000000000000000000000000000000000000..92a90cb06e0535afa79f6cba26ceece15a7f7959 GIT binary patch literal 309408 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

lipX z89%t)L1Zn7w#;-}USgg#E*&nk6g|(G1Qmus3tNsjIhevgp16@5CCac&oFQ%eMM}nZ z{mnz>s34v3aMz*q^t7z0vk!G1GW!Jt2ASxcw2bWTp8MFWsimbQCDW&tl$Dk-0g1n8B}ozJZoF0r$e^J`a*sp<@okRTsO%H2(}g3TTkA_r zY_P>jVzWUR3KUay?+f%NC1?ezWXd19?3;y;D2) z=Jd@SxaBCD7@yRdoI1@I*B<-wy!p$P-g4A5y{O1h(7URyq%^-^5%4=S<)}GLXGT&? zP*KLzTkhzZ9`LuniN0E|5dVh^Rxh7GQJxUnGxL_)=k$BaC)IDL^7E%p&b9}+_DF?A zGiGGlx&2!bzLjrRQ-8rQ!6d{9w;c=hLS+CVTojp^4u~Lz7RS90h8bLbuiryo}eM%KoVvP^fjleHU^+=q5A;2uIP{IMn8hjx?CUO%x=LY*K$e zUzje{LKq99L~=Fia#OW;19`##VP1~Mrtvh>B0Gh6=r^B#@tfaImET5%z7r=71y6sR z1)+KIKbbhmHDqK(Opkw#A(lJ1ckkf2b32FbV2>ybjO9me1|^F}-I933OjHUpo!ybB za2SP5ev0ZSLtRNH0zA}Iy~GRPK;d0)CZZjOFGZkHpcnj=aBX`konu{0C@R1fXWJ6u zt>zd5de9(qgvu{hvPyqiP=X*?9QK49o6V7vmy2IXc%isb1#ifGsWofO;PWB)4-5)1 z;7{NZNdd%*kTmtr&*fqJ!&%FTzlevj)`WLeZu_9MsiDqXpU^aM&*aJB?87X%2GSC~ z2D0Q+hRKs}Y;8)eG1oRU8MQ2k#V^zZ`IMHcL&f>K|5&>xBqaImm<(OqoH=jI_YU>b z>SAO4B%e^+h{dN=?PS~(gl+~lg! zO4x6Syg#q!XWP@GGQ%@7XD^FdKFsu40i{{Jdo!~$as#PyNTj_fx=|f«q(At`*`NbkV(;WAZRz)Jn7&p-cM>U1p@ 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 D9ti__ literal 0 HcmV?d00001 diff --git a/text_rendering/stb_image_write.h b/text_rendering/stb_image_write.h new file mode 100644 index 0000000..e4b32ed --- /dev/null +++ b/text_rendering/stb_image_write.h @@ -0,0 +1,1724 @@ +/* stb_image_write - v1.16 - public domain - http://nothings.org/stb + writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015 + no warranty implied; use at your own risk + + Before #including, + + #define STB_IMAGE_WRITE_IMPLEMENTATION + + in the file that you want to have the implementation. + + Will probably not work correctly with strict-aliasing optimizations. + +ABOUT: + + This header file is a library for writing images to C stdio or a callback. + + The PNG output is not optimal; it is 20-50% larger than the file + written by a decent optimizing implementation; though providing a custom + zlib compress function (see STBIW_ZLIB_COMPRESS) can mitigate that. + This library is designed for source code compactness and simplicity, + not optimal image file size or run-time performance. + +BUILDING: + + You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h. + You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace + malloc,realloc,free. + You can #define STBIW_MEMMOVE() to replace memmove() + You can #define STBIW_ZLIB_COMPRESS to use a custom zlib-style compress function + for PNG compression (instead of the builtin one), it must have the following signature: + unsigned char * my_compress(unsigned char *data, int data_len, int *out_len, int quality); + The returned data will be freed with STBIW_FREE() (free() by default), + so it must be heap allocated with STBIW_MALLOC() (malloc() by default), + +UNICODE: + + If compiling for Windows and you wish to use Unicode filenames, compile + with + #define STBIW_WINDOWS_UTF8 + and pass utf8-encoded filenames. Call stbiw_convert_wchar_to_utf8 to convert + Windows wchar_t filenames to utf8. + +USAGE: + + There are five functions, one for each image file format: + + int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); + int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_jpg(char const *filename, int w, int h, int comp, const void *data, int quality); + int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); + + void stbi_flip_vertically_on_write(int flag); // flag is non-zero to flip data vertically + + There are also five equivalent functions that use an arbitrary write function. You are + expected to open/close your file-equivalent before and after calling these: + + int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); + int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); + int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); + int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); + int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); + + where the callback is: + void stbi_write_func(void *context, void *data, int size); + + You can configure it with these global variables: + int stbi_write_tga_with_rle; // defaults to true; set to 0 to disable RLE + int stbi_write_png_compression_level; // defaults to 8; set to higher for more compression + int stbi_write_force_png_filter; // defaults to -1; set to 0..5 to force a filter mode + + + You can define STBI_WRITE_NO_STDIO to disable the file variant of these + functions, so the library will not use stdio.h at all. However, this will + also disable HDR writing, because it requires stdio for formatted output. + + Each function returns 0 on failure and non-0 on success. + + The functions create an image file defined by the parameters. The image + is a rectangle of pixels stored from left-to-right, top-to-bottom. + Each pixel contains 'comp' channels of data stored interleaved with 8-bits + per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is + monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall. + The *data pointer points to the first byte of the top-left-most pixel. + For PNG, "stride_in_bytes" is the distance in bytes from the first byte of + a row of pixels to the first byte of the next row of pixels. + + PNG creates output files with the same number of components as the input. + The BMP format expands Y to RGB in the file format and does not + output alpha. + + PNG supports writing rectangles of data even when the bytes storing rows of + data are not consecutive in memory (e.g. sub-rectangles of a larger image), + by supplying the stride between the beginning of adjacent rows. The other + formats do not. (Thus you cannot write a native-format BMP through the BMP + writer, both because it is in BGR order and because it may have padding + at the end of the line.) + + PNG allows you to set the deflate compression level by setting the global + variable 'stbi_write_png_compression_level' (it defaults to 8). + + HDR expects linear float data. Since the format is always 32-bit rgb(e) + data, alpha (if provided) is discarded, and for monochrome data it is + replicated across all three channels. + + TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed + data, set the global variable 'stbi_write_tga_with_rle' to 0. + + JPEG does ignore alpha channels in input data; quality is between 1 and 100. + Higher quality looks better but results in a bigger image. + JPEG baseline (no JPEG progressive). + +CREDITS: + + + Sean Barrett - PNG/BMP/TGA + Baldur Karlsson - HDR + Jean-Sebastien Guay - TGA monochrome + Tim Kelsey - misc enhancements + Alan Hickman - TGA RLE + Emmanuel Julien - initial file IO callback implementation + Jon Olick - original jo_jpeg.cpp code + Daniel Gibson - integrate JPEG, allow external zlib + Aarni Koskela - allow choosing PNG filter + + bugfixes: + github:Chribba + Guillaume Chereau + github:jry2 + github:romigrou + Sergio Gonzalez + Jonas Karlsson + Filip Wasil + Thatcher Ulrich + github:poppolopoppo + Patrick Boettcher + github:xeekworx + Cap Petschulat + Simon Rodriguez + Ivan Tikhonov + github:ignotion + Adam Schackart + Andrew Kensler + +LICENSE + + See end of file for license information. + +*/ + +#ifndef INCLUDE_STB_IMAGE_WRITE_H +#define INCLUDE_STB_IMAGE_WRITE_H + +#include + +// if STB_IMAGE_WRITE_STATIC causes problems, try defining STBIWDEF to 'inline' or 'static inline' +#ifndef STBIWDEF +#ifdef STB_IMAGE_WRITE_STATIC +#define STBIWDEF static +#else +#ifdef __cplusplus +#define STBIWDEF extern "C" +#else +#define STBIWDEF extern +#endif +#endif +#endif + +#ifndef STB_IMAGE_WRITE_STATIC // C++ forbids static forward declarations +STBIWDEF int stbi_write_tga_with_rle; +STBIWDEF int stbi_write_png_compression_level; +STBIWDEF int stbi_write_force_png_filter; +#endif + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); +STBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); +STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality); + +#ifdef STBIW_WINDOWS_UTF8 +STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); +#endif +#endif + +typedef void stbi_write_func(void *context, void *data, int size); + +STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); +STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); +STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); +STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); + +STBIWDEF void stbi_flip_vertically_on_write(int flip_boolean); + +#endif//INCLUDE_STB_IMAGE_WRITE_H + +#ifdef STB_IMAGE_WRITE_IMPLEMENTATION + +#ifdef _WIN32 + #ifndef _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_WARNINGS + #endif + #ifndef _CRT_NONSTDC_NO_DEPRECATE + #define _CRT_NONSTDC_NO_DEPRECATE + #endif +#endif + +#ifndef STBI_WRITE_NO_STDIO +#include +#endif // STBI_WRITE_NO_STDIO + +#include +#include +#include +#include + +#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED)) +// ok +#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED) +// ok +#else +#error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED)." +#endif + +#ifndef STBIW_MALLOC +#define STBIW_MALLOC(sz) malloc(sz) +#define STBIW_REALLOC(p,newsz) realloc(p,newsz) +#define STBIW_FREE(p) free(p) +#endif + +#ifndef STBIW_REALLOC_SIZED +#define STBIW_REALLOC_SIZED(p,oldsz,newsz) STBIW_REALLOC(p,newsz) +#endif + + +#ifndef STBIW_MEMMOVE +#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz) +#endif + + +#ifndef STBIW_ASSERT +#include +#define STBIW_ASSERT(x) assert(x) +#endif + +#define STBIW_UCHAR(x) (unsigned char) ((x) & 0xff) + +#ifdef STB_IMAGE_WRITE_STATIC +static int stbi_write_png_compression_level = 8; +static int stbi_write_tga_with_rle = 1; +static int stbi_write_force_png_filter = -1; +#else +int stbi_write_png_compression_level = 8; +int stbi_write_tga_with_rle = 1; +int stbi_write_force_png_filter = -1; +#endif + +static int stbi__flip_vertically_on_write = 0; + +STBIWDEF void stbi_flip_vertically_on_write(int flag) +{ + stbi__flip_vertically_on_write = flag; +} + +typedef struct +{ + stbi_write_func *func; + void *context; + unsigned char buffer[64]; + int buf_used; +} stbi__write_context; + +// initialize a callback-based context +static void stbi__start_write_callbacks(stbi__write_context *s, stbi_write_func *c, void *context) +{ + s->func = c; + s->context = context; +} + +#ifndef STBI_WRITE_NO_STDIO + +static void stbi__stdio_write(void *context, void *data, int size) +{ + fwrite(data,1,size,(FILE*) context); +} + +#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) +#ifdef __cplusplus +#define STBIW_EXTERN extern "C" +#else +#define STBIW_EXTERN extern +#endif +STBIW_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); +STBIW_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); + +STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); +} +#endif + +static FILE *stbiw__fopen(char const *filename, char const *mode) +{ + FILE *f; +#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) + return 0; + +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +#else + f = _wfopen(wFilename, wMode); +#endif + +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f=0; +#else + f = fopen(filename, mode); +#endif + return f; +} + +static int stbi__start_write_file(stbi__write_context *s, const char *filename) +{ + FILE *f = stbiw__fopen(filename, "wb"); + stbi__start_write_callbacks(s, stbi__stdio_write, (void *) f); + return f != NULL; +} + +static void stbi__end_write_file(stbi__write_context *s) +{ + fclose((FILE *)s->context); +} + +#endif // !STBI_WRITE_NO_STDIO + +typedef unsigned int stbiw_uint32; +typedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1]; + +static void stbiw__writefv(stbi__write_context *s, const char *fmt, va_list v) +{ + while (*fmt) { + switch (*fmt++) { + case ' ': break; + case '1': { unsigned char x = STBIW_UCHAR(va_arg(v, int)); + s->func(s->context,&x,1); + break; } + case '2': { int x = va_arg(v,int); + unsigned char b[2]; + b[0] = STBIW_UCHAR(x); + b[1] = STBIW_UCHAR(x>>8); + s->func(s->context,b,2); + break; } + case '4': { stbiw_uint32 x = va_arg(v,int); + unsigned char b[4]; + b[0]=STBIW_UCHAR(x); + b[1]=STBIW_UCHAR(x>>8); + b[2]=STBIW_UCHAR(x>>16); + b[3]=STBIW_UCHAR(x>>24); + s->func(s->context,b,4); + break; } + default: + STBIW_ASSERT(0); + return; + } + } +} + +static void stbiw__writef(stbi__write_context *s, const char *fmt, ...) +{ + va_list v; + va_start(v, fmt); + stbiw__writefv(s, fmt, v); + va_end(v); +} + +static void stbiw__write_flush(stbi__write_context *s) +{ + if (s->buf_used) { + s->func(s->context, &s->buffer, s->buf_used); + s->buf_used = 0; + } +} + +static void stbiw__putc(stbi__write_context *s, unsigned char c) +{ + s->func(s->context, &c, 1); +} + +static void stbiw__write1(stbi__write_context *s, unsigned char a) +{ + if ((size_t)s->buf_used + 1 > sizeof(s->buffer)) + stbiw__write_flush(s); + s->buffer[s->buf_used++] = a; +} + +static void stbiw__write3(stbi__write_context *s, unsigned char a, unsigned char b, unsigned char c) +{ + int n; + if ((size_t)s->buf_used + 3 > sizeof(s->buffer)) + stbiw__write_flush(s); + n = s->buf_used; + s->buf_used = n+3; + s->buffer[n+0] = a; + s->buffer[n+1] = b; + s->buffer[n+2] = c; +} + +static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char *d) +{ + unsigned char bg[3] = { 255, 0, 255}, px[3]; + int k; + + if (write_alpha < 0) + stbiw__write1(s, d[comp - 1]); + + switch (comp) { + case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case + case 1: + if (expand_mono) + stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp + else + stbiw__write1(s, d[0]); // monochrome TGA + break; + case 4: + if (!write_alpha) { + // composite against pink background + for (k = 0; k < 3; ++k) + px[k] = bg[k] + ((d[k] - bg[k]) * d[3]) / 255; + stbiw__write3(s, px[1 - rgb_dir], px[1], px[1 + rgb_dir]); + break; + } + /* FALLTHROUGH */ + case 3: + stbiw__write3(s, d[1 - rgb_dir], d[1], d[1 + rgb_dir]); + break; + } + if (write_alpha > 0) + stbiw__write1(s, d[comp - 1]); +} + +static void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono) +{ + stbiw_uint32 zero = 0; + int i,j, j_end; + + if (y <= 0) + return; + + if (stbi__flip_vertically_on_write) + vdir *= -1; + + if (vdir < 0) { + j_end = -1; j = y-1; + } else { + j_end = y; j = 0; + } + + for (; j != j_end; j += vdir) { + for (i=0; i < x; ++i) { + unsigned char *d = (unsigned char *) data + (j*x+i)*comp; + stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d); + } + stbiw__write_flush(s); + s->func(s->context, &zero, scanline_pad); + } +} + +static int stbiw__outfile(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...) +{ + if (y < 0 || x < 0) { + return 0; + } else { + va_list v; + va_start(v, fmt); + stbiw__writefv(s, fmt, v); + va_end(v); + stbiw__write_pixels(s,rgb_dir,vdir,x,y,comp,data,alpha,pad, expand_mono); + return 1; + } +} + +static int stbi_write_bmp_core(stbi__write_context *s, int x, int y, int comp, const void *data) +{ + if (comp != 4) { + // write RGB bitmap + int pad = (-x*3) & 3; + return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *) data,0,pad, + "11 4 22 4" "4 44 22 444444", + 'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header + 40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header + } else { + // RGBA bitmaps need a v4 header + // use BI_BITFIELDS mode with 32bpp and alpha mask + // (straight BI_RGB with alpha mask doesn't work in most readers) + return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *)data,1,0, + "11 4 22 4" "4 44 22 444444 4444 4 444 444 444 444", + 'B', 'M', 14+108+x*y*4, 0, 0, 14+108, // file header + 108, x,y, 1,32, 3,0,0,0,0,0, 0xff0000,0xff00,0xff,0xff000000u, 0, 0,0,0, 0,0,0, 0,0,0, 0,0,0); // bitmap V4 header + } +} + +STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_bmp_core(&s, x, y, comp, data); +} + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_bmp_core(&s, x, y, comp, data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif //!STBI_WRITE_NO_STDIO + +static int stbi_write_tga_core(stbi__write_context *s, int x, int y, int comp, void *data) +{ + int has_alpha = (comp == 2 || comp == 4); + int colorbytes = has_alpha ? comp-1 : comp; + int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3 + + if (y < 0 || x < 0) + return 0; + + if (!stbi_write_tga_with_rle) { + return stbiw__outfile(s, -1, -1, x, y, comp, 0, (void *) data, has_alpha, 0, + "111 221 2222 11", 0, 0, format, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8); + } else { + int i,j,k; + int jend, jdir; + + stbiw__writef(s, "111 221 2222 11", 0,0,format+8, 0,0,0, 0,0,x,y, (colorbytes + has_alpha) * 8, has_alpha * 8); + + if (stbi__flip_vertically_on_write) { + j = 0; + jend = y; + jdir = 1; + } else { + j = y-1; + jend = -1; + jdir = -1; + } + for (; j != jend; j += jdir) { + unsigned char *row = (unsigned char *) data + j * x * comp; + int len; + + for (i = 0; i < x; i += len) { + unsigned char *begin = row + i * comp; + int diff = 1; + len = 1; + + if (i < x - 1) { + ++len; + diff = memcmp(begin, row + (i + 1) * comp, comp); + if (diff) { + const unsigned char *prev = begin; + for (k = i + 2; k < x && len < 128; ++k) { + if (memcmp(prev, row + k * comp, comp)) { + prev += comp; + ++len; + } else { + --len; + break; + } + } + } else { + for (k = i + 2; k < x && len < 128; ++k) { + if (!memcmp(begin, row + k * comp, comp)) { + ++len; + } else { + break; + } + } + } + } + + if (diff) { + unsigned char header = STBIW_UCHAR(len - 1); + stbiw__write1(s, header); + for (k = 0; k < len; ++k) { + stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp); + } + } else { + unsigned char header = STBIW_UCHAR(len - 129); + stbiw__write1(s, header); + stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin); + } + } + } + stbiw__write_flush(s); + } + return 1; +} + +STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_tga_core(&s, x, y, comp, (void *) data); +} + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_tga_core(&s, x, y, comp, (void *) data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR writer +// by Baldur Karlsson + +#define stbiw__max(a, b) ((a) > (b) ? (a) : (b)) + +#ifndef STBI_WRITE_NO_STDIO + +static void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear) +{ + int exponent; + float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2])); + + if (maxcomp < 1e-32f) { + rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0; + } else { + float normalize = (float) frexp(maxcomp, &exponent) * 256.0f/maxcomp; + + rgbe[0] = (unsigned char)(linear[0] * normalize); + rgbe[1] = (unsigned char)(linear[1] * normalize); + rgbe[2] = (unsigned char)(linear[2] * normalize); + rgbe[3] = (unsigned char)(exponent + 128); + } +} + +static void stbiw__write_run_data(stbi__write_context *s, int length, unsigned char databyte) +{ + unsigned char lengthbyte = STBIW_UCHAR(length+128); + STBIW_ASSERT(length+128 <= 255); + s->func(s->context, &lengthbyte, 1); + s->func(s->context, &databyte, 1); +} + +static void stbiw__write_dump_data(stbi__write_context *s, int length, unsigned char *data) +{ + unsigned char lengthbyte = STBIW_UCHAR(length); + STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code + s->func(s->context, &lengthbyte, 1); + s->func(s->context, data, length); +} + +static void stbiw__write_hdr_scanline(stbi__write_context *s, int width, int ncomp, unsigned char *scratch, float *scanline) +{ + unsigned char scanlineheader[4] = { 2, 2, 0, 0 }; + unsigned char rgbe[4]; + float linear[3]; + int x; + + scanlineheader[2] = (width&0xff00)>>8; + scanlineheader[3] = (width&0x00ff); + + /* skip RLE for images too small or large */ + if (width < 8 || width >= 32768) { + for (x=0; x < width; x++) { + switch (ncomp) { + case 4: /* fallthrough */ + case 3: linear[2] = scanline[x*ncomp + 2]; + linear[1] = scanline[x*ncomp + 1]; + linear[0] = scanline[x*ncomp + 0]; + break; + default: + linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + s->func(s->context, rgbe, 4); + } + } else { + int c,r; + /* encode into scratch buffer */ + for (x=0; x < width; x++) { + switch(ncomp) { + case 4: /* fallthrough */ + case 3: linear[2] = scanline[x*ncomp + 2]; + linear[1] = scanline[x*ncomp + 1]; + linear[0] = scanline[x*ncomp + 0]; + break; + default: + linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + scratch[x + width*0] = rgbe[0]; + scratch[x + width*1] = rgbe[1]; + scratch[x + width*2] = rgbe[2]; + scratch[x + width*3] = rgbe[3]; + } + + s->func(s->context, scanlineheader, 4); + + /* RLE each component separately */ + for (c=0; c < 4; c++) { + unsigned char *comp = &scratch[width*c]; + + x = 0; + while (x < width) { + // find first run + r = x; + while (r+2 < width) { + if (comp[r] == comp[r+1] && comp[r] == comp[r+2]) + break; + ++r; + } + if (r+2 >= width) + r = width; + // dump up to first run + while (x < r) { + int len = r-x; + if (len > 128) len = 128; + stbiw__write_dump_data(s, len, &comp[x]); + x += len; + } + // if there's a run, output it + if (r+2 < width) { // same test as what we break out of in search loop, so only true if we break'd + // find next byte after run + while (r < width && comp[r] == comp[x]) + ++r; + // output run up to r + while (x < r) { + int len = r-x; + if (len > 127) len = 127; + stbiw__write_run_data(s, len, comp[x]); + x += len; + } + } + } + } + } +} + +static int stbi_write_hdr_core(stbi__write_context *s, int x, int y, int comp, float *data) +{ + if (y <= 0 || x <= 0 || data == NULL) + return 0; + else { + // Each component is stored separately. Allocate scratch space for full output scanline. + unsigned char *scratch = (unsigned char *) STBIW_MALLOC(x*4); + int i, len; + char buffer[128]; + char header[] = "#?RADIANCE\n# Written by stb_image_write.h\nFORMAT=32-bit_rle_rgbe\n"; + s->func(s->context, header, sizeof(header)-1); + +#ifdef __STDC_LIB_EXT1__ + len = sprintf_s(buffer, sizeof(buffer), "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); +#else + len = sprintf(buffer, "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); +#endif + s->func(s->context, buffer, len); + + for(i=0; i < y; i++) + stbiw__write_hdr_scanline(s, x, comp, scratch, data + comp*x*(stbi__flip_vertically_on_write ? y-1-i : i)); + STBIW_FREE(scratch); + return 1; + } +} + +STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const float *data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_hdr_core(&s, x, y, comp, (float *) data); +} + +STBIWDEF int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_hdr_core(&s, x, y, comp, (float *) data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif // STBI_WRITE_NO_STDIO + + +////////////////////////////////////////////////////////////////////////////// +// +// PNG writer +// + +#ifndef STBIW_ZLIB_COMPRESS +// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size() +#define stbiw__sbraw(a) ((int *) (void *) (a) - 2) +#define stbiw__sbm(a) stbiw__sbraw(a)[0] +#define stbiw__sbn(a) stbiw__sbraw(a)[1] + +#define stbiw__sbneedgrow(a,n) ((a)==0 || stbiw__sbn(a)+n >= stbiw__sbm(a)) +#define stbiw__sbmaybegrow(a,n) (stbiw__sbneedgrow(a,(n)) ? stbiw__sbgrow(a,n) : 0) +#define stbiw__sbgrow(a,n) stbiw__sbgrowf((void **) &(a), (n), sizeof(*(a))) + +#define stbiw__sbpush(a, v) (stbiw__sbmaybegrow(a,1), (a)[stbiw__sbn(a)++] = (v)) +#define stbiw__sbcount(a) ((a) ? stbiw__sbn(a) : 0) +#define stbiw__sbfree(a) ((a) ? STBIW_FREE(stbiw__sbraw(a)),0 : 0) + +static void *stbiw__sbgrowf(void **arr, int increment, int itemsize) +{ + int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1; + void *p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2); + STBIW_ASSERT(p); + if (p) { + if (!*arr) ((int *) p)[1] = 0; + *arr = (void *) ((int *) p + 2); + stbiw__sbm(*arr) = m; + } + return *arr; +} + +static unsigned char *stbiw__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount) +{ + while (*bitcount >= 8) { + stbiw__sbpush(data, STBIW_UCHAR(*bitbuffer)); + *bitbuffer >>= 8; + *bitcount -= 8; + } + return data; +} + +static int stbiw__zlib_bitrev(int code, int codebits) +{ + int res=0; + while (codebits--) { + res = (res << 1) | (code & 1); + code >>= 1; + } + return res; +} + +static unsigned int stbiw__zlib_countm(unsigned char *a, unsigned char *b, int limit) +{ + int i; + for (i=0; i < limit && i < 258; ++i) + if (a[i] != b[i]) break; + return i; +} + +static unsigned int stbiw__zhash(unsigned char *data) +{ + stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16); + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + return hash; +} + +#define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount)) +#define stbiw__zlib_add(code,codebits) \ + (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush()) +#define stbiw__zlib_huffa(b,c) stbiw__zlib_add(stbiw__zlib_bitrev(b,c),c) +// default huffman tables +#define stbiw__zlib_huff1(n) stbiw__zlib_huffa(0x30 + (n), 8) +#define stbiw__zlib_huff2(n) stbiw__zlib_huffa(0x190 + (n)-144, 9) +#define stbiw__zlib_huff3(n) stbiw__zlib_huffa(0 + (n)-256,7) +#define stbiw__zlib_huff4(n) stbiw__zlib_huffa(0xc0 + (n)-280,8) +#define stbiw__zlib_huff(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) : (n) <= 279 ? stbiw__zlib_huff3(n) : stbiw__zlib_huff4(n)) +#define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n)) + +#define stbiw__ZHASH 16384 + +#endif // STBIW_ZLIB_COMPRESS + +STBIWDEF unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality) +{ +#ifdef STBIW_ZLIB_COMPRESS + // user provided a zlib compress implementation, use that + return STBIW_ZLIB_COMPRESS(data, data_len, out_len, quality); +#else // use builtin + static unsigned short lengthc[] = { 3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258, 259 }; + static unsigned char lengtheb[]= { 0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; + static unsigned short distc[] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 32768 }; + static unsigned char disteb[] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 }; + unsigned int bitbuf=0; + int i,j, bitcount=0; + unsigned char *out = NULL; + unsigned char ***hash_table = (unsigned char***) STBIW_MALLOC(stbiw__ZHASH * sizeof(unsigned char**)); + if (hash_table == NULL) + return NULL; + if (quality < 5) quality = 5; + + stbiw__sbpush(out, 0x78); // DEFLATE 32K window + stbiw__sbpush(out, 0x5e); // FLEVEL = 1 + stbiw__zlib_add(1,1); // BFINAL = 1 + stbiw__zlib_add(1,2); // BTYPE = 1 -- fixed huffman + + for (i=0; i < stbiw__ZHASH; ++i) + hash_table[i] = NULL; + + i=0; + while (i < data_len-3) { + // hash next 3 bytes of data to be compressed + int h = stbiw__zhash(data+i)&(stbiw__ZHASH-1), best=3; + unsigned char *bestloc = 0; + unsigned char **hlist = hash_table[h]; + int n = stbiw__sbcount(hlist); + for (j=0; j < n; ++j) { + if (hlist[j]-data > i-32768) { // if entry lies within window + int d = stbiw__zlib_countm(hlist[j], data+i, data_len-i); + if (d >= best) { best=d; bestloc=hlist[j]; } + } + } + // when hash table entry is too long, delete half the entries + if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2*quality) { + STBIW_MEMMOVE(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality); + stbiw__sbn(hash_table[h]) = quality; + } + stbiw__sbpush(hash_table[h],data+i); + + if (bestloc) { + // "lazy matching" - check match at *next* byte, and if it's better, do cur byte as literal + h = stbiw__zhash(data+i+1)&(stbiw__ZHASH-1); + hlist = hash_table[h]; + n = stbiw__sbcount(hlist); + for (j=0; j < n; ++j) { + if (hlist[j]-data > i-32767) { + int e = stbiw__zlib_countm(hlist[j], data+i+1, data_len-i-1); + if (e > best) { // if next match is better, bail on current match + bestloc = NULL; + break; + } + } + } + } + + if (bestloc) { + int d = (int) (data+i - bestloc); // distance back + STBIW_ASSERT(d <= 32767 && best <= 258); + for (j=0; best > lengthc[j+1]-1; ++j); + stbiw__zlib_huff(j+257); + if (lengtheb[j]) stbiw__zlib_add(best - lengthc[j], lengtheb[j]); + for (j=0; d > distc[j+1]-1; ++j); + stbiw__zlib_add(stbiw__zlib_bitrev(j,5),5); + if (disteb[j]) stbiw__zlib_add(d - distc[j], disteb[j]); + i += best; + } else { + stbiw__zlib_huffb(data[i]); + ++i; + } + } + // write out final bytes + for (;i < data_len; ++i) + stbiw__zlib_huffb(data[i]); + stbiw__zlib_huff(256); // end of block + // pad with 0 bits to byte boundary + while (bitcount) + stbiw__zlib_add(0,1); + + for (i=0; i < stbiw__ZHASH; ++i) + (void) stbiw__sbfree(hash_table[i]); + STBIW_FREE(hash_table); + + // store uncompressed instead if compression was worse + if (stbiw__sbn(out) > data_len + 2 + ((data_len+32766)/32767)*5) { + stbiw__sbn(out) = 2; // truncate to DEFLATE 32K window and FLEVEL = 1 + for (j = 0; j < data_len;) { + int blocklen = data_len - j; + if (blocklen > 32767) blocklen = 32767; + stbiw__sbpush(out, data_len - j == blocklen); // BFINAL = ?, BTYPE = 0 -- no compression + stbiw__sbpush(out, STBIW_UCHAR(blocklen)); // LEN + stbiw__sbpush(out, STBIW_UCHAR(blocklen >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(~blocklen)); // NLEN + stbiw__sbpush(out, STBIW_UCHAR(~blocklen >> 8)); + memcpy(out+stbiw__sbn(out), data+j, blocklen); + stbiw__sbn(out) += blocklen; + j += blocklen; + } + } + + { + // compute adler32 on input + unsigned int s1=1, s2=0; + int blocklen = (int) (data_len % 5552); + j=0; + while (j < data_len) { + for (i=0; i < blocklen; ++i) { s1 += data[j+i]; s2 += s1; } + s1 %= 65521; s2 %= 65521; + j += blocklen; + blocklen = 5552; + } + stbiw__sbpush(out, STBIW_UCHAR(s2 >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(s2)); + stbiw__sbpush(out, STBIW_UCHAR(s1 >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(s1)); + } + *out_len = stbiw__sbn(out); + // make returned pointer freeable + STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len); + return (unsigned char *) stbiw__sbraw(out); +#endif // STBIW_ZLIB_COMPRESS +} + +static unsigned int stbiw__crc32(unsigned char *buffer, int len) +{ +#ifdef STBIW_CRC32 + return STBIW_CRC32(buffer, len); +#else + static unsigned int crc_table[256] = + { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0eDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }; + + unsigned int crc = ~0u; + int i; + for (i=0; i < len; ++i) + crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)]; + return ~crc; +#endif +} + +#define stbiw__wpng4(o,a,b,c,d) ((o)[0]=STBIW_UCHAR(a),(o)[1]=STBIW_UCHAR(b),(o)[2]=STBIW_UCHAR(c),(o)[3]=STBIW_UCHAR(d),(o)+=4) +#define stbiw__wp32(data,v) stbiw__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v)); +#define stbiw__wptag(data,s) stbiw__wpng4(data, s[0],s[1],s[2],s[3]) + +static void stbiw__wpcrc(unsigned char **data, int len) +{ + unsigned int crc = stbiw__crc32(*data - len - 4, len+4); + stbiw__wp32(*data, crc); +} + +static unsigned char stbiw__paeth(int a, int b, int c) +{ + int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c); + if (pa <= pb && pa <= pc) return STBIW_UCHAR(a); + if (pb <= pc) return STBIW_UCHAR(b); + return STBIW_UCHAR(c); +} + +// @OPTIMIZE: provide an option that always forces left-predict or paeth predict +static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int width, int height, int y, int n, int filter_type, signed char *line_buffer) +{ + static int mapping[] = { 0,1,2,3,4 }; + static int firstmap[] = { 0,1,0,5,6 }; + int *mymap = (y != 0) ? mapping : firstmap; + int i; + int type = mymap[filter_type]; + unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y); + int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes; + + if (type==0) { + memcpy(line_buffer, z, width*n); + return; + } + + // first loop isn't optimized since it's just one pixel + for (i = 0; i < n; ++i) { + switch (type) { + case 1: line_buffer[i] = z[i]; break; + case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break; + case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break; + case 4: line_buffer[i] = (signed char) (z[i] - stbiw__paeth(0,z[i-signed_stride],0)); break; + case 5: line_buffer[i] = z[i]; break; + case 6: line_buffer[i] = z[i]; break; + } + } + switch (type) { + case 1: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-n]; break; + case 2: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-signed_stride]; break; + case 3: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break; + case 4: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break; + case 5: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - (z[i-n]>>1); break; + case 6: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break; + } +} + +STBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len) +{ + int force_filter = stbi_write_force_png_filter; + int ctype[5] = { -1, 0, 4, 2, 6 }; + unsigned char sig[8] = { 137,80,78,71,13,10,26,10 }; + unsigned char *out,*o, *filt, *zlib; + signed char *line_buffer; + int j,zlen; + + if (stride_bytes == 0) + stride_bytes = x * n; + + if (force_filter >= 5) { + force_filter = -1; + } + + filt = (unsigned char *) STBIW_MALLOC((x*n+1) * y); if (!filt) return 0; + line_buffer = (signed char *) STBIW_MALLOC(x * n); if (!line_buffer) { STBIW_FREE(filt); return 0; } + for (j=0; j < y; ++j) { + int filter_type; + if (force_filter > -1) { + filter_type = force_filter; + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, force_filter, line_buffer); + } else { // Estimate the best filter by running through all of them: + int best_filter = 0, best_filter_val = 0x7fffffff, est, i; + for (filter_type = 0; filter_type < 5; filter_type++) { + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, filter_type, line_buffer); + + // Estimate the entropy of the line using this filter; the less, the better. + est = 0; + for (i = 0; i < x*n; ++i) { + est += abs((signed char) line_buffer[i]); + } + if (est < best_filter_val) { + best_filter_val = est; + best_filter = filter_type; + } + } + if (filter_type != best_filter) { // If the last iteration already got us the best filter, don't redo it + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, best_filter, line_buffer); + filter_type = best_filter; + } + } + // when we get here, filter_type contains the filter type, and line_buffer contains the data + filt[j*(x*n+1)] = (unsigned char) filter_type; + STBIW_MEMMOVE(filt+j*(x*n+1)+1, line_buffer, x*n); + } + STBIW_FREE(line_buffer); + zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, stbi_write_png_compression_level); + STBIW_FREE(filt); + if (!zlib) return 0; + + // each tag requires 12 bytes of overhead + out = (unsigned char *) STBIW_MALLOC(8 + 12+13 + 12+zlen + 12); + if (!out) return 0; + *out_len = 8 + 12+13 + 12+zlen + 12; + + o=out; + STBIW_MEMMOVE(o,sig,8); o+= 8; + stbiw__wp32(o, 13); // header length + stbiw__wptag(o, "IHDR"); + stbiw__wp32(o, x); + stbiw__wp32(o, y); + *o++ = 8; + *o++ = STBIW_UCHAR(ctype[n]); + *o++ = 0; + *o++ = 0; + *o++ = 0; + stbiw__wpcrc(&o,13); + + stbiw__wp32(o, zlen); + stbiw__wptag(o, "IDAT"); + STBIW_MEMMOVE(o, zlib, zlen); + o += zlen; + STBIW_FREE(zlib); + stbiw__wpcrc(&o, zlen); + + stbiw__wp32(o,0); + stbiw__wptag(o, "IEND"); + stbiw__wpcrc(&o,0); + + STBIW_ASSERT(o == out + *out_len); + + return out; +} + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes) +{ + FILE *f; + int len; + unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); + if (png == NULL) return 0; + + f = stbiw__fopen(filename, "wb"); + if (!f) { STBIW_FREE(png); return 0; } + fwrite(png, 1, len, f); + fclose(f); + STBIW_FREE(png); + return 1; +} +#endif + +STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int stride_bytes) +{ + int len; + unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); + if (png == NULL) return 0; + func(context, png, len); + STBIW_FREE(png); + return 1; +} + + +/* *************************************************************************** + * + * JPEG writer + * + * This is based on Jon Olick's jo_jpeg.cpp: + * public domain Simple, Minimalistic JPEG writer - http://www.jonolick.com/code.html + */ + +static const unsigned char stbiw__jpg_ZigZag[] = { 0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18, + 24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63 }; + +static void stbiw__jpg_writeBits(stbi__write_context *s, int *bitBufP, int *bitCntP, const unsigned short *bs) { + int bitBuf = *bitBufP, bitCnt = *bitCntP; + bitCnt += bs[1]; + bitBuf |= bs[0] << (24 - bitCnt); + while(bitCnt >= 8) { + unsigned char c = (bitBuf >> 16) & 255; + stbiw__putc(s, c); + if(c == 255) { + stbiw__putc(s, 0); + } + bitBuf <<= 8; + bitCnt -= 8; + } + *bitBufP = bitBuf; + *bitCntP = bitCnt; +} + +static void stbiw__jpg_DCT(float *d0p, float *d1p, float *d2p, float *d3p, float *d4p, float *d5p, float *d6p, float *d7p) { + float d0 = *d0p, d1 = *d1p, d2 = *d2p, d3 = *d3p, d4 = *d4p, d5 = *d5p, d6 = *d6p, d7 = *d7p; + float z1, z2, z3, z4, z5, z11, z13; + + float tmp0 = d0 + d7; + float tmp7 = d0 - d7; + float tmp1 = d1 + d6; + float tmp6 = d1 - d6; + float tmp2 = d2 + d5; + float tmp5 = d2 - d5; + float tmp3 = d3 + d4; + float tmp4 = d3 - d4; + + // Even part + float tmp10 = tmp0 + tmp3; // phase 2 + float tmp13 = tmp0 - tmp3; + float tmp11 = tmp1 + tmp2; + float tmp12 = tmp1 - tmp2; + + d0 = tmp10 + tmp11; // phase 3 + d4 = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * 0.707106781f; // c4 + d2 = tmp13 + z1; // phase 5 + d6 = tmp13 - z1; + + // Odd part + tmp10 = tmp4 + tmp5; // phase 2 + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + // The rotator is modified from fig 4-8 to avoid extra negations. + z5 = (tmp10 - tmp12) * 0.382683433f; // c6 + z2 = tmp10 * 0.541196100f + z5; // c2-c6 + z4 = tmp12 * 1.306562965f + z5; // c2+c6 + z3 = tmp11 * 0.707106781f; // c4 + + z11 = tmp7 + z3; // phase 5 + z13 = tmp7 - z3; + + *d5p = z13 + z2; // phase 6 + *d3p = z13 - z2; + *d1p = z11 + z4; + *d7p = z11 - z4; + + *d0p = d0; *d2p = d2; *d4p = d4; *d6p = d6; +} + +static void stbiw__jpg_calcBits(int val, unsigned short bits[2]) { + int tmp1 = val < 0 ? -val : val; + val = val < 0 ? val-1 : val; + bits[1] = 1; + while(tmp1 >>= 1) { + ++bits[1]; + } + bits[0] = val & ((1<0)&&(DU[end0pos]==0); --end0pos) { + } + // end0pos = first element in reverse order !=0 + if(end0pos == 0) { + stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); + return DU[0]; + } + for(i = 1; i <= end0pos; ++i) { + int startpos = i; + int nrzeroes; + unsigned short bits[2]; + for (; DU[i]==0 && i<=end0pos; ++i) { + } + nrzeroes = i-startpos; + if ( nrzeroes >= 16 ) { + int lng = nrzeroes>>4; + int nrmarker; + for (nrmarker=1; nrmarker <= lng; ++nrmarker) + stbiw__jpg_writeBits(s, bitBuf, bitCnt, M16zeroes); + nrzeroes &= 15; + } + stbiw__jpg_calcBits(DU[i], bits); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTAC[(nrzeroes<<4)+bits[1]]); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits); + } + if(end0pos != 63) { + stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); + } + return DU[0]; +} + +static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, int comp, const void* data, int quality) { + // Constants that don't pollute global namespace + static const unsigned char std_dc_luminance_nrcodes[] = {0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0}; + static const unsigned char std_dc_luminance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; + static const unsigned char std_ac_luminance_nrcodes[] = {0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d}; + static const unsigned char std_ac_luminance_values[] = { + 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, + 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, + 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, + 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, + 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, + 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, + 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa + }; + static const unsigned char std_dc_chrominance_nrcodes[] = {0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0}; + static const unsigned char std_dc_chrominance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; + static const unsigned char std_ac_chrominance_nrcodes[] = {0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77}; + static const unsigned char std_ac_chrominance_values[] = { + 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, + 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, + 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, + 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, + 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, + 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, + 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa + }; + // Huffman tables + static const unsigned short YDC_HT[256][2] = { {0,2},{2,3},{3,3},{4,3},{5,3},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9}}; + static const unsigned short UVDC_HT[256][2] = { {0,2},{1,2},{2,2},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9},{1022,10},{2046,11}}; + static const unsigned short YAC_HT[256][2] = { + {10,4},{0,2},{1,2},{4,3},{11,4},{26,5},{120,7},{248,8},{1014,10},{65410,16},{65411,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {12,4},{27,5},{121,7},{502,9},{2038,11},{65412,16},{65413,16},{65414,16},{65415,16},{65416,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {28,5},{249,8},{1015,10},{4084,12},{65417,16},{65418,16},{65419,16},{65420,16},{65421,16},{65422,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {58,6},{503,9},{4085,12},{65423,16},{65424,16},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {59,6},{1016,10},{65430,16},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {122,7},{2039,11},{65438,16},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {123,7},{4086,12},{65446,16},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {250,8},{4087,12},{65454,16},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {504,9},{32704,15},{65462,16},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {505,9},{65470,16},{65471,16},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {506,9},{65479,16},{65480,16},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {1017,10},{65488,16},{65489,16},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {1018,10},{65497,16},{65498,16},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {2040,11},{65506,16},{65507,16},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {65515,16},{65516,16},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{0,0},{0,0},{0,0},{0,0},{0,0}, + {2041,11},{65525,16},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} + }; + static const unsigned short UVAC_HT[256][2] = { + {0,2},{1,2},{4,3},{10,4},{24,5},{25,5},{56,6},{120,7},{500,9},{1014,10},{4084,12},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {11,4},{57,6},{246,8},{501,9},{2038,11},{4085,12},{65416,16},{65417,16},{65418,16},{65419,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {26,5},{247,8},{1015,10},{4086,12},{32706,15},{65420,16},{65421,16},{65422,16},{65423,16},{65424,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {27,5},{248,8},{1016,10},{4087,12},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{65430,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {58,6},{502,9},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{65438,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {59,6},{1017,10},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{65446,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {121,7},{2039,11},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{65454,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {122,7},{2040,11},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{65462,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {249,8},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{65470,16},{65471,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {503,9},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{65479,16},{65480,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {504,9},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{65488,16},{65489,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {505,9},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{65497,16},{65498,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {506,9},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{65506,16},{65507,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {2041,11},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{65515,16},{65516,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, + {16352,14},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{65525,16},{0,0},{0,0},{0,0},{0,0},{0,0}, + {1018,10},{32707,15},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} + }; + static const int YQT[] = {16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22, + 37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99}; + static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99, + 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99}; + static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f, + 1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f }; + + int row, col, i, k, subsample; + float fdtbl_Y[64], fdtbl_UV[64]; + unsigned char YTable[64], UVTable[64]; + + if(!data || !width || !height || comp > 4 || comp < 1) { + return 0; + } + + quality = quality ? quality : 90; + subsample = quality <= 90 ? 1 : 0; + quality = quality < 1 ? 1 : quality > 100 ? 100 : quality; + quality = quality < 50 ? 5000 / quality : 200 - quality * 2; + + for(i = 0; i < 64; ++i) { + int uvti, yti = (YQT[i]*quality+50)/100; + YTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (yti < 1 ? 1 : yti > 255 ? 255 : yti); + uvti = (UVQT[i]*quality+50)/100; + UVTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (uvti < 1 ? 1 : uvti > 255 ? 255 : uvti); + } + + for(row = 0, k = 0; row < 8; ++row) { + for(col = 0; col < 8; ++col, ++k) { + fdtbl_Y[k] = 1 / (YTable [stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); + fdtbl_UV[k] = 1 / (UVTable[stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); + } + } + + // Write Headers + { + static const unsigned char head0[] = { 0xFF,0xD8,0xFF,0xE0,0,0x10,'J','F','I','F',0,1,1,0,0,1,0,1,0,0,0xFF,0xDB,0,0x84,0 }; + static const unsigned char head2[] = { 0xFF,0xDA,0,0xC,3,1,0,2,0x11,3,0x11,0,0x3F,0 }; + const unsigned char head1[] = { 0xFF,0xC0,0,0x11,8,(unsigned char)(height>>8),STBIW_UCHAR(height),(unsigned char)(width>>8),STBIW_UCHAR(width), + 3,1,(unsigned char)(subsample?0x22:0x11),0,2,0x11,1,3,0x11,1,0xFF,0xC4,0x01,0xA2,0 }; + s->func(s->context, (void*)head0, sizeof(head0)); + s->func(s->context, (void*)YTable, sizeof(YTable)); + stbiw__putc(s, 1); + s->func(s->context, UVTable, sizeof(UVTable)); + s->func(s->context, (void*)head1, sizeof(head1)); + s->func(s->context, (void*)(std_dc_luminance_nrcodes+1), sizeof(std_dc_luminance_nrcodes)-1); + s->func(s->context, (void*)std_dc_luminance_values, sizeof(std_dc_luminance_values)); + stbiw__putc(s, 0x10); // HTYACinfo + s->func(s->context, (void*)(std_ac_luminance_nrcodes+1), sizeof(std_ac_luminance_nrcodes)-1); + s->func(s->context, (void*)std_ac_luminance_values, sizeof(std_ac_luminance_values)); + stbiw__putc(s, 1); // HTUDCinfo + s->func(s->context, (void*)(std_dc_chrominance_nrcodes+1), sizeof(std_dc_chrominance_nrcodes)-1); + s->func(s->context, (void*)std_dc_chrominance_values, sizeof(std_dc_chrominance_values)); + stbiw__putc(s, 0x11); // HTUACinfo + s->func(s->context, (void*)(std_ac_chrominance_nrcodes+1), sizeof(std_ac_chrominance_nrcodes)-1); + s->func(s->context, (void*)std_ac_chrominance_values, sizeof(std_ac_chrominance_values)); + s->func(s->context, (void*)head2, sizeof(head2)); + } + + // Encode 8x8 macroblocks + { + static const unsigned short fillBits[] = {0x7F, 7}; + int DCY=0, DCU=0, DCV=0; + int bitBuf=0, bitCnt=0; + // comp == 2 is grey+alpha (alpha is ignored) + int ofsG = comp > 2 ? 1 : 0, ofsB = comp > 2 ? 2 : 0; + const unsigned char *dataR = (const unsigned char *)data; + const unsigned char *dataG = dataR + ofsG; + const unsigned char *dataB = dataR + ofsB; + int x, y, pos; + if(subsample) { + for(y = 0; y < height; y += 16) { + for(x = 0; x < width; x += 16) { + float Y[256], U[256], V[256]; + for(row = y, pos = 0; row < y+16; ++row) { + // row >= height => use last input row + int clamped_row = (row < height) ? row : height - 1; + int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; + for(col = x; col < x+16; ++col, ++pos) { + // if col >= width => use pixel from last input column + int p = base_p + ((col < width) ? col : (width-1))*comp; + float r = dataR[p], g = dataG[p], b = dataB[p]; + Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; + U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; + V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; + } + } + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+0, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+8, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+128, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+136, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + + // subsample U,V + { + float subU[64], subV[64]; + int yy, xx; + for(yy = 0, pos = 0; yy < 8; ++yy) { + for(xx = 0; xx < 8; ++xx, ++pos) { + int j = yy*32+xx*2; + subU[pos] = (U[j+0] + U[j+1] + U[j+16] + U[j+17]) * 0.25f; + subV[pos] = (V[j+0] + V[j+1] + V[j+16] + V[j+17]) * 0.25f; + } + } + DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subU, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subV, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + } + } + } + } else { + for(y = 0; y < height; y += 8) { + for(x = 0; x < width; x += 8) { + float Y[64], U[64], V[64]; + for(row = y, pos = 0; row < y+8; ++row) { + // row >= height => use last input row + int clamped_row = (row < height) ? row : height - 1; + int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; + for(col = x; col < x+8; ++col, ++pos) { + // if col >= width => use pixel from last input column + int p = base_p + ((col < width) ? col : (width-1))*comp; + float r = dataR[p], g = dataG[p], b = dataB[p]; + Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; + U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; + V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; + } + } + + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y, 8, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, U, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, V, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + } + } + } + + // Do the bit alignment of the EOI marker + stbiw__jpg_writeBits(s, &bitBuf, &bitCnt, fillBits); + } + + // EOI + stbiw__putc(s, 0xFF); + stbiw__putc(s, 0xD9); + + return 1; +} + +STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_jpg_core(&s, x, y, comp, (void *) data, quality); +} + + +#ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s,filename)) { + int r = stbi_write_jpg_core(&s, x, y, comp, data, quality); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +#endif + +#endif // STB_IMAGE_WRITE_IMPLEMENTATION + +/* Revision history + 1.16 (2021-07-11) + make Deflate code emit uncompressed blocks when it would otherwise expand + support writing BMPs with alpha channel + 1.15 (2020-07-13) unknown + 1.14 (2020-02-02) updated JPEG writer to downsample chroma channels + 1.13 + 1.12 + 1.11 (2019-08-11) + + 1.10 (2019-02-07) + support utf8 filenames in Windows; fix warnings and platform ifdefs + 1.09 (2018-02-11) + fix typo in zlib quality API, improve STB_I_W_STATIC in C++ + 1.08 (2018-01-29) + add stbi__flip_vertically_on_write, external zlib, zlib quality, choose PNG filter + 1.07 (2017-07-24) + doc fix + 1.06 (2017-07-23) + writing JPEG (using Jon Olick's code) + 1.05 ??? + 1.04 (2017-03-03) + monochrome BMP expansion + 1.03 ??? + 1.02 (2016-04-02) + avoid allocating large structures on the stack + 1.01 (2016-01-16) + STBIW_REALLOC_SIZED: support allocators with no realloc support + avoid race-condition in crc initialization + minor compile issues + 1.00 (2015-09-14) + installable file IO function + 0.99 (2015-09-13) + warning fixes; TGA rle support + 0.98 (2015-04-08) + added STBIW_MALLOC, STBIW_ASSERT etc + 0.97 (2015-01-18) + fixed HDR asserts, rewrote HDR rle logic + 0.96 (2015-01-17) + add HDR output + fix monochrome BMP + 0.95 (2014-08-17) + add monochrome TGA output + 0.94 (2014-05-31) + rename private functions to avoid conflicts with stb_image.h + 0.93 (2014-05-27) + warning fixes + 0.92 (2010-08-01) + casts to unsigned char to fix warnings + 0.91 (2010-07-17) + first public release + 0.90 first internal release +*/ + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/text_rendering/test b/text_rendering/test index 0b9a06721a9b9e1013951e9ab6aad1854ecbd507..7ba4c45b0949557d261ad794105c7c4855c05277 100755 GIT binary patch literal 287952 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 literal 17160 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 diff --git a/text_rendering/util.c b/text_rendering/util.c index 36cf734..66ab3a1 100644 --- a/text_rendering/util.c +++ b/text_rendering/util.c @@ -83,10 +83,13 @@ void dump_file(const char *path, unsigned char **buf, int *buf_len) if (!fp) err(EXIT_FAILURE, "Cannot open file %s", path); *buf_len = lseek(fileno(fp), 0, SEEK_END); + rewind(fp); if (*buf_len == (off_t)-1) err(EXIT_FAILURE, "lseek() failed"); *buf = emalloc(*buf_len); - *buf_len = fread(*buf, 1, *buf_len, fp); + int ret = fread(*buf, 1, *buf_len, fp); + if (ret != *buf_len) + err(EXIT_FAILURE, "fread() returned short %s", ferror(fp) ? "stream error" : feof(fp) ? "EOF reached" : "unknown error"); if (fclose(fp)) err(EXIT_FAILURE, "Error closing file"); } diff --git a/text_rendering/util.h b/text_rendering/util.h index e423240..b8d0161 100644 --- a/text_rendering/util.h +++ b/text_rendering/util.h @@ -1,6 +1,10 @@ #ifndef _UTIL_H #define _UTIL_H + +#define ERROR(expr, ret, ...) if (expr) { __VA_ARGS__; return ret; } + + void * emalloc(unsigned long int size); void * ecalloc(unsigned long int nmemb, unsigned long int size); void efree(void *ptr);