From 391aa6240ef20a2f6a2c2afdff0bb4487e873047 Mon Sep 17 00:00:00 2001 From: Jean-Michel Gorius Date: Sun, 13 Nov 2022 16:35:37 +0100 Subject: [PATCH] Add image textures --- README.md | 1 + assets/earthmap.jpg | Bin 0 -> 161345 bytes examples/earth.png | Bin 0 -> 328023 bytes external/stb_image.h | 7897 ++++++++++++++++++++++++++++++++++++++++++ hittable.c | 2 +- main.c | 25 +- texture.c | 108 +- texture.h | 16 +- 8 files changed, 8009 insertions(+), 40 deletions(-) create mode 100644 assets/earthmap.jpg create mode 100644 examples/earth.png create mode 100644 external/stb_image.h diff --git a/README.md b/README.md index 4156d8a..b58da65 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,4 @@ C implementation of the [*Ray tracing in one week-end*](https://raytracing.githu ## Examples ![Ray tracing in one week-end book cover](examples/book-cover.png) +![Earth](examples/earth.png) diff --git a/assets/earthmap.jpg b/assets/earthmap.jpg new file mode 100644 index 0000000000000000000000000000000000000000..908c1606a1c794043f95fe09730653f229b5aec1 GIT binary patch literal 161345 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 literal 0 HcmV?d00001 diff --git a/examples/earth.png b/examples/earth.png new file mode 100644 index 0000000000000000000000000000000000000000..2354c58a73a7a2513c3fa534bb68ab8b3066286f GIT binary patch literal 328023 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 +#endif // STBI_NO_STDIO + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for desired_channels + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +#include +typedef unsigned char stbi_uc; +typedef unsigned short stbi_us; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef STBIDEF +#ifdef STB_IMAGE_STATIC +#define STBIDEF static +#else +#define STBIDEF extern +#endif +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +typedef struct +{ + int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read + void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative + int (*eof) (void *user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +//////////////////////////////////// +// +// 8-bits-per-channel interface +// + +STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +// for stbi_load_from_file, file pointer is left pointing immediately after image +#endif + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +#endif + +#ifdef STBI_WINDOWS_UTF8 +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); +#endif + +//////////////////////////////////// +// +// 16-bits-per-channel interface +// + +STBIDEF stbi_us *stbi_load_16_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_us *stbi_load_16 (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +#endif + +//////////////////////////////////// +// +// float-per-channel interface +// +#ifndef STBI_NO_LINEAR + STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + + #ifndef STBI_NO_STDIO + STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); + #endif +#endif + +#ifndef STBI_NO_HDR + STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); + STBIDEF void stbi_hdr_to_ldr_scale(float scale); +#endif // STBI_NO_HDR + +#ifndef STBI_NO_LINEAR + STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); + STBIDEF void stbi_ldr_to_hdr_scale(float scale); +#endif // STBI_NO_LINEAR + +// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename); +STBIDEF int stbi_is_hdr_from_file(FILE *f); +#endif // STBI_NO_STDIO + + +// get a VERY brief reason for failure +// on most compilers (and ALL modern mainstream compilers) this is threadsafe +STBIDEF const char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len); +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user); + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit (char const *filename); +STBIDEF int stbi_is_16_bit_from_file(FILE *f); +#endif + + + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + +// flip the image vertically, so the first pixel in the output array is the bottom left +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); + +// as above, but only applies to images loaded on the thread that calls the function +// this function is only available if your compiler supports thread-local variables; +// calling it will fail to link if your compiler doesn't +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply); +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert); +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); +STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ + || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ + || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ + || defined(STBI_ONLY_ZLIB) + #ifndef STBI_ONLY_JPEG + #define STBI_NO_JPEG + #endif + #ifndef STBI_ONLY_PNG + #define STBI_NO_PNG + #endif + #ifndef STBI_ONLY_BMP + #define STBI_NO_BMP + #endif + #ifndef STBI_ONLY_PSD + #define STBI_NO_PSD + #endif + #ifndef STBI_ONLY_TGA + #define STBI_NO_TGA + #endif + #ifndef STBI_ONLY_GIF + #define STBI_NO_GIF + #endif + #ifndef STBI_ONLY_HDR + #define STBI_NO_HDR + #endif + #ifndef STBI_ONLY_PIC + #define STBI_NO_PIC + #endif + #ifndef STBI_ONLY_PNM + #define STBI_NO_PNM + #endif +#endif + +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) +#define STBI_NO_ZLIB +#endif + + +#include +#include // ptrdiff_t on osx +#include +#include +#include + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +#include // ldexp, pow +#endif + +#ifndef STBI_NO_STDIO +#include +#endif + +#ifndef STBI_ASSERT +#include +#define STBI_ASSERT(x) assert(x) +#endif + +#ifdef __cplusplus +#define STBI_EXTERN extern "C" +#else +#define STBI_EXTERN extern +#endif + + +#ifndef _MSC_VER + #ifdef __cplusplus + #define stbi_inline inline + #else + #define stbi_inline + #endif +#else + #define stbi_inline __forceinline +#endif + +#ifndef STBI_NO_THREAD_LOCALS + #if defined(__cplusplus) && __cplusplus >= 201103L + #define STBI_THREAD_LOCAL thread_local + #elif defined(__GNUC__) && __GNUC__ < 5 + #define STBI_THREAD_LOCAL __thread + #elif defined(_MSC_VER) + #define STBI_THREAD_LOCAL __declspec(thread) + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) + #define STBI_THREAD_LOCAL _Thread_local + #endif + + #ifndef STBI_THREAD_LOCAL + #if defined(__GNUC__) + #define STBI_THREAD_LOCAL __thread + #endif + #endif +#endif + +#ifdef _MSC_VER +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL + #define stbi_lrot(x,y) _lrotl(x,y) +#else + #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (-(y) & 31))) +#endif + +#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) +// ok +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) +// ok +#else +#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." +#endif + +#ifndef STBI_MALLOC +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p,newsz) realloc(p,newsz) +#define STBI_FREE(p) free(p) +#endif + +#ifndef STBI_REALLOC_SIZED +#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) +#endif + +// x86/x64 detection +#if defined(__x86_64__) || defined(_M_X64) +#define STBI__X64_TARGET +#elif defined(__i386) || defined(_M_IX86) +#define STBI__X86_TARGET +#endif + +#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) +// gcc doesn't support sse2 intrinsics unless you compile with -msse2, +// which in turn means it gets to use SSE2 everywhere. This is unfortunate, +// but previous attempts to provide the SSE2 functions with runtime +// detection caused numerous issues. The way architecture extensions are +// exposed in GCC/Clang is, sadly, not really suited for one-file libs. +// New behavior: if compiled with -msse2, we use SSE2 without any +// detection; if not, we don't use it at all. +#define STBI_NO_SIMD +#endif + +#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET +// +// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the +// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. +// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not +// simultaneously enabling "-mstackrealign". +// +// See https://github.com/nothings/stb/issues/81 for more information. +// +// So default to no SSE2 on 32-bit MinGW. If you've read this far and added +// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. +#define STBI_NO_SIMD +#endif + +#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) +#define STBI_SSE2 +#include + +#ifdef _MSC_VER + +#if _MSC_VER >= 1400 // not VC6 +#include // __cpuid +static int stbi__cpuid3(void) +{ + int info[4]; + __cpuid(info,1); + return info[3]; +} +#else +static int stbi__cpuid3(void) +{ + int res; + __asm { + mov eax,1 + cpuid + mov res,edx + } + return res; +} +#endif + +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; +} +#endif + +#else // assume GCC-style if not VC++ +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + // If we're even attempting to compile this on GCC/Clang, that means + // -msse2 is on, which means the compiler is allowed to use SSE2 + // instructions at will, and so are we. + return 1; +} +#endif + +#endif +#endif + +// ARM NEON +#if defined(STBI_NO_SIMD) && defined(STBI_NEON) +#undef STBI_NEON +#endif + +#ifdef STBI_NEON +#include +#ifdef _MSC_VER +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name +#else +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +#endif +#endif + +#ifndef STBI_SIMD_ALIGN +#define STBI_SIMD_ALIGN(type, name) type name +#endif + +#ifndef STBI_MAX_DIMENSIONS +#define STBI_MAX_DIMENSIONS (1 << 24) +#endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct +{ + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void *io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + int callback_already_read; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original, *img_buffer_original_end; +} stbi__context; + + +static void stbi__refill_buffer(stbi__context *s); + +// initialize a memory-decode context +static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) +{ + s->io.read = NULL; + s->read_from_callbacks = 0; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; + s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) +{ + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); + s->img_buffer_original_end = s->img_buffer_end; +} + +#ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void *user, char *data, int size) +{ + return (int) fread(data,1,size,(FILE*) user); +} + +static void stbi__stdio_skip(void *user, int n) +{ + int ch; + fseek((FILE*) user, n, SEEK_CUR); + ch = fgetc((FILE*) user); /* have to read a byte to reset feof()'s flag */ + if (ch != EOF) { + ungetc(ch, (FILE *) user); /* push byte back onto stream if valid. */ + } +} + +static int stbi__stdio_eof(void *user) +{ + return feof((FILE*) user) || ferror((FILE *) user); +} + +static stbi_io_callbacks stbi__stdio_callbacks = +{ + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context *s, FILE *f) +{ + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); +} + +//static void stop_file(stbi__context *s) { } + +#endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context *s) +{ + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 bytes + s->img_buffer = s->img_buffer_original; + s->img_buffer_end = s->img_buffer_original_end; +} + +enum +{ + STBI_ORDER_RGB, + STBI_ORDER_BGR +}; + +typedef struct +{ + int bits_per_channel; + int num_channels; + int channel_order; +} stbi__result_info; + +#ifndef STBI_NO_JPEG +static int stbi__jpeg_test(stbi__context *s); +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNG +static int stbi__png_test(stbi__context *s); +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__png_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_BMP +static int stbi__bmp_test(stbi__context *s); +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_TGA +static int stbi__tga_test(stbi__context *s); +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s); +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc); +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__psd_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context *s); +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_test(stbi__context *s); +static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_GIF +static int stbi__gif_test(stbi__context *s); +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNM +static int stbi__pnm_test(stbi__context *s); +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__pnm_is16(stbi__context *s); +#endif + +static +#ifdef STBI_THREAD_LOCAL +STBI_THREAD_LOCAL +#endif +const char *stbi__g_failure_reason; + +STBIDEF const char *stbi_failure_reason(void) +{ + return stbi__g_failure_reason; +} + +#ifndef STBI_NO_FAILURE_STRINGS +static int stbi__err(const char *str) +{ + stbi__g_failure_reason = str; + return 0; +} +#endif + +static void *stbi__malloc(size_t size) +{ + return STBI_MALLOC(size); +} + +// stb_image uses ints pervasively, including for offset calculations. +// therefore the largest decoded image size we can support with the +// current code, even on 64-bit targets, is INT_MAX. this is not a +// significant limitation for the intended use case. +// +// we do, however, need to make sure our size calculations don't +// overflow. hence a few helper functions for size calculations that +// multiply integers together, making sure that they're non-negative +// and no overflow occurs. + +// return 1 if the sum is valid, 0 on overflow. +// negative terms are considered invalid. +static int stbi__addsizes_valid(int a, int b) +{ + if (b < 0) return 0; + // now 0 <= b <= INT_MAX, hence also + // 0 <= INT_MAX - b <= INTMAX. + // And "a + b <= INT_MAX" (which might overflow) is the + // same as a <= INT_MAX - b (no overflow) + return a <= INT_MAX - b; +} + +// returns 1 if the product is valid, 0 on overflow. +// negative factors are considered invalid. +static int stbi__mul2sizes_valid(int a, int b) +{ + if (a < 0 || b < 0) return 0; + if (b == 0) return 1; // mul-by-0 is always safe + // portable way to check for no overflows in a*b + return a <= INT_MAX/b; +} + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow +static int stbi__mad2sizes_valid(int a, int b, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add); +} +#endif + +// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow +static int stbi__mad3sizes_valid(int a, int b, int c, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__addsizes_valid(a*b*c, add); +} + +// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add); +} +#endif + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// mallocs with size overflow checking +static void *stbi__malloc_mad2(int a, int b, int add) +{ + if (!stbi__mad2sizes_valid(a, b, add)) return NULL; + return stbi__malloc(a*b + add); +} +#endif + +static void *stbi__malloc_mad3(int a, int b, int c, int add) +{ + if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; + return stbi__malloc(a*b*c + add); +} + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) +{ + if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; + return stbi__malloc(a*b*c*d + add); +} +#endif + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS + #define stbi__err(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define stbi__err(x,y) stbi__err(y) +#else + #define stbi__err(x,y) stbi__err(x) +#endif + +#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) +#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) + +STBIDEF void stbi_image_free(void *retval_from_stbi_load) +{ + STBI_FREE(retval_from_stbi_load); +} + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_HDR +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +static int stbi__vertically_flip_on_load_global = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_global = flag_true_if_should_flip; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global +#else +static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; + +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_local = flag_true_if_should_flip; + stbi__vertically_flip_on_load_set = 1; +} + +#define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ + ? stbi__vertically_flip_on_load_local \ + : stbi__vertically_flip_on_load_global) +#endif // STBI_THREAD_LOCAL + +static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed + ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order + ri->num_channels = 0; + + // test the formats with a very explicit header first (at least a FOURCC + // or distinctive magic number first) + #ifndef STBI_NO_PNG + if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_BMP + if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_GIF + if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PSD + if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc); + #else + STBI_NOTUSED(bpc); + #endif + #ifndef STBI_NO_PIC + if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp, ri); + #endif + + // then the formats that can end up attempting to load with just 1 or 2 + // bytes matching expectations; these are prone to false positives, so + // try them later + #ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PNM + if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp, ri); + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + + #ifndef STBI_NO_TGA + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s,x,y,comp,req_comp, ri); + #endif + + return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); +} + +static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi_uc *reduced; + + reduced = (stbi_uc *) stbi__malloc(img_len); + if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling + + STBI_FREE(orig); + return reduced; +} + +static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi__uint16 *enlarged; + + enlarged = (stbi__uint16 *) stbi__malloc(img_len*2); + if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff + + STBI_FREE(orig); + return enlarged; +} + +static void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel) +{ + int row; + size_t bytes_per_row = (size_t)w * bytes_per_pixel; + stbi_uc temp[2048]; + stbi_uc *bytes = (stbi_uc *)image; + + for (row = 0; row < (h>>1); row++) { + stbi_uc *row0 = bytes + row*bytes_per_row; + stbi_uc *row1 = bytes + (h - row - 1)*bytes_per_row; + // swap row0 with row1 + size_t bytes_left = bytes_per_row; + while (bytes_left) { + size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); + memcpy(temp, row0, bytes_copy); + memcpy(row0, row1, bytes_copy); + memcpy(row1, temp, bytes_copy); + row0 += bytes_copy; + row1 += bytes_copy; + bytes_left -= bytes_copy; + } + } +} + +#ifndef STBI_NO_GIF +static void stbi__vertical_flip_slices(void *image, int w, int h, int z, int bytes_per_pixel) +{ + int slice; + int slice_size = w * h * bytes_per_pixel; + + stbi_uc *bytes = (stbi_uc *)image; + for (slice = 0; slice < z; ++slice) { + stbi__vertical_flip(bytes, w, h, bytes_per_pixel); + bytes += slice_size; + } +} +#endif + +static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 8) { + result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 8; + } + + // @TODO: move stbi__convert_format to here + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); + } + + return (unsigned char *) result; +} + +static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 16) { + result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 16; + } + + // @TODO: move stbi__convert_format16 to here + // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); + } + + return (stbi__uint16 *) result; +} + +#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) +static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) +{ + if (stbi__vertically_flip_on_load && result != NULL) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); + } +} +#endif + +#ifndef STBI_NO_STDIO + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); +STBI_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); +#endif + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBIDEF int stbi_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 *stbi__fopen(char const *filename, char const *mode) +{ + FILE *f; +#if defined(_WIN32) && defined(STBI_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; +} + + +STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + unsigned char *result; + if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__uint16 *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + stbi__uint16 *result; + if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file_16(f,x,y,comp,req_comp); + fclose(f); + return result; +} + + +#endif //!STBI_NO_STDIO + +STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_mem(&s,buffer,len); + + result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); + if (stbi__vertically_flip_on_load) { + stbi__vertical_flip_slices( result, *x, *y, *z, *comp ); + } + + return result; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + stbi__result_info ri; + float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri); + if (hdr_data) + stbi__float_postprocess(hdr_data,x,y,comp,req_comp); + return hdr_data; + } + #endif + data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); +} + +STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + float *result; + FILE *f = stbi__fopen(filename, "rb"); + if (!f) return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_file(&s,f); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} +#endif // !STBI_NO_STDIO + +#endif // !STBI_NO_LINEAR + +// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is +// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always +// reports false! + +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; + #endif +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result=0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE *f) +{ + #ifndef STBI_NO_HDR + long pos = ftell(f); + int res; + stbi__context s; + stbi__start_file(&s,f); + res = stbi__hdr_test(&s); + fseek(f, pos, SEEK_SET); + return res; + #else + STBI_NOTUSED(f); + return 0; + #endif +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(clbk); + STBI_NOTUSED(user); + return 0; + #endif +} + +#ifndef STBI_NO_LINEAR +static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; + +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +#endif + +static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; + +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } +STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } + + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum +{ + STBI__SCAN_load=0, + STBI__SCAN_type, + STBI__SCAN_header +}; + +static void stbi__refill_buffer(stbi__context *s) +{ + int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); + s->callback_already_read += (int) (s->img_buffer - s->img_buffer_original); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start+1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context *s) +{ + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +stbi_inline static int stbi__at_eof(stbi__context *s) +{ + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) +// nothing +#else +static void stbi__skip(stbi__context *s, int n) +{ + if (n == 0) return; // already there! + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) +// nothing +#else +static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) +{ + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); + res = (count == (n-blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer+n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static int stbi__get16be(stbi__context *s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static stbi__uint32 stbi__get32be(stbi__context *s) +{ + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} +#endif + +#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) +// nothing +#else +static int stbi__get16le(stbi__context *s) +{ + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} +#endif + +#ifndef STBI_NO_BMP +static stbi__uint32 stbi__get32le(stbi__context *s) +{ + stbi__uint32 z = stbi__get16le(s); + z += (stbi__uint32)stbi__get16le(s) << 16; + return z; +} +#endif + +#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=255; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 stbi__compute_y_16(int r, int g, int b) +{ + return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + stbi__uint16 *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + stbi__uint16 *src = data + j * x * img_n ; + stbi__uint16 *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=0xffff; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=0xffff; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=0xffff; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = 0xffff; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*) stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output; + if (!data) return NULL; + output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + } + } + if (n < comp) { + for (i=0; i < x*y; ++i) { + output[i*comp + n] = data[i*comp + n]/255.0f; + } + } + STBI_FREE(data); + return output; +} +#endif + +#ifndef STBI_NO_HDR +#define stbi__float2int(x) ((int) (x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output; + if (!data) return NULL; + output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +#ifndef STBI_NO_JPEG + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct +{ + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + stbi_uc *data; + void *raw_data, *raw_coeff; + stbi_uc *linebuf; + short *coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; + + int scan_n, order[4]; + int restart_interval, todo; + +// kernels + void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); + stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman *h, int *count) +{ + int i,j,k=0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) + for (j=0; j < count[i]; ++j) + h->size[k++] = (stbi_uc) (i+1); + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16) (code++); + if (code-1 >= (1u << j)) return stbi__err("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (stbi_uc) i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) +{ + int i; + for (i=0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = (stbi__int16) ((k * 256) + (run * 16) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) +{ + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static const stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); + + sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & (sgn - 1)); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) +{ + unsigned int k; + if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) +{ + unsigned int k; + if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static const stbi_uc stbi__jpeg_dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant) +{ + int diff,dc,k; + int t; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) (dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) +{ + int diff,dc; + int t; + if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data,0,64*sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + diff = t ? stbi__extend_receive(j, t) : 0; + + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) (dc * (1 << j->succ_low)); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short) (1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) +{ + int k; + if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * (1 << shift)); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + --j->eob_run; + break; + } + k += 16; + } else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * (1 << shift)); + } + } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients + + short bit = (short) (1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short *p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } else { + k = j->spec_start; + do { + int r,s; + int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short *p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short) s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (stbi_uc) x; +} + +#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) +#define stbi__fsh(x) ((x) * 4096) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3*stbi__f2f(-1.847759065f); \ + t3 = p1 + p2*stbi__f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2+p3); \ + t1 = stbi__fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ + t0 = t0*stbi__f2f( 0.298631336f); \ + t1 = t1*stbi__f2f( 2.053119869f); \ + t2 = t2*stbi__f2f( 3.072711026f); \ + t3 = t3*stbi__f2f( 1.501321110f); \ + p1 = p5 + p1*stbi__f2f(-0.899976223f); \ + p2 = p5 + p2*stbi__f2f(-2.562915447f); \ + p3 = p3*stbi__f2f(-1.961570560f); \ + p4 = p4*stbi__f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) +{ + int i,val[64],*v=val; + stbi_uc *o; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0]*4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128<<17); + x1 += 65536 + (128<<17); + x2 += 65536 + (128<<17); + x3 += 65536 + (128<<17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0+t3) >> 17); + o[7] = stbi__clamp((x0-t3) >> 17); + o[1] = stbi__clamp((x1+t2) >> 17); + o[6] = stbi__clamp((x1-t2) >> 17); + o[2] = stbi__clamp((x2+t1) >> 17); + o[5] = stbi__clamp((x2-t1) >> 17); + o[3] = stbi__clamp((x3+t0) >> 17); + o[4] = stbi__clamp((x3-t0) >> 17); + } +} + +#ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + + // dot product constant: even elems=x, odd elems=y + #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) + + // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) + // out(1) = c1[even]*x + c1[odd]*y + #define dct_rot(out0,out1, x,y,c0,c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + + // out = in << 12 (in 16-bit, out 32-bit) + #define dct_widen(out, in) \ + __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + + // wide add + #define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + + // wide sub + #define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + + // butterfly a/b, add bias, then shift by "s" and pack + #define dct_bfly32o(out0, out1, a,b,bias,s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ + } + + // 8-bit interleave step (for transposes) + #define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + + // 16-bit interleave step (for transposes) + #define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + + #define dct_pass(bias,shift) \ + { \ + /* even part */ \ + dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ + dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0,row7, x0,x7,bias,shift); \ + dct_bfly32o(row1,row6, x1,x6,bias,shift); \ + dct_bfly32o(row2,row5, x2,x5,bias,shift); \ + dct_bfly32o(row3,row4, x3,x4,bias,shift); \ + } + + __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); + __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); + __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); + __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); + __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); + __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); + + // load + row0 = _mm_load_si128((const __m128i *) (data + 0*8)); + row1 = _mm_load_si128((const __m128i *) (data + 1*8)); + row2 = _mm_load_si128((const __m128i *) (data + 2*8)); + row3 = _mm_load_si128((const __m128i *) (data + 3*8)); + row4 = _mm_load_si128((const __m128i *) (data + 4*8)); + row5 = _mm_load_si128((const __m128i *) (data + 5*8)); + row6 = _mm_load_si128((const __m128i *) (data + 6*8)); + row7 = _mm_load_si128((const __m128i *) (data + 7*8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i *) out, p0); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p2); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p1); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p3); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); + } + +#undef dct_const +#undef dct_rot +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_interleave8 +#undef dct_interleave16 +#undef dct_pass +} + +#endif // STBI_SSE2 + +#ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); + +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ + dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ + dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ + dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ + } + + // load + row0 = vld1q_s16(data + 0*8); + row1 = vld1q_s16(data + 1*8); + row2 = vld1q_s16(data + 2*8); + row3 = vld1q_s16(data + 3*8); + row4 = vld1q_s16(data + 4*8); + row5 = vld1q_s16(data + 5*8); + row6 = vld1q_s16(data + 6*8); + row7 = vld1q_s16(data + 7*8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } +#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +#undef dct_trn16 +#undef dct_trn32 +#undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } +#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); out += out_stride; + vst1_u8(out, p1); out += out_stride; + vst1_u8(out, p2); out += out_stride; + vst1_u8(out, p3); out += out_stride; + vst1_u8(out, p4); out += out_stride; + vst1_u8(out, p5); out += out_stride; + vst1_u8(out, p6); out += out_stride; + vst1_u8(out, p7); + +#undef dct_trn8_8 +#undef dct_trn8_16 +#undef dct_trn8_32 + } + +#undef dct_long_mul +#undef dct_long_mac +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_pass +} + +#endif // STBI_NEON + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg *j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } + x = stbi__get8(j->s); + if (x != 0xff) return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) +{ + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i,j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + STBI_SIMD_ALIGN(short, data[64]); + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } else { + if (z->scan_n == 1) { + int i,j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x); + int y2 = (j*z->img_comp[n].v + y); + short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) +{ + int i; + for (i=0; i < 64; ++i) + data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg *z) +{ + if (z->progressive) { + // dequantize and idct the data + int i,j,n; + for (n=0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg *z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker","Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s)-2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15,i; + if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG"); + if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); + + for (i=0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); + L -= (sixteen ? 129 : 65); + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s)-2; + while (L > 0) { + stbi_uc *v; + int sizes[16],i,n=0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L==0; + } + + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len","Corrupt JPEG"); + else + return stbi__err("bad APP len","Corrupt JPEG"); + } + L -= 2; + + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static const unsigned char tag[5] = {'J','F','I','F','\0'}; + int ok = 1; + int i; + for (i=0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 5; + if (ok) + z->jfif = 1; + } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static const unsigned char tag[6] = {'A','d','o','b','e','\0'}; + int ok = 1; + int i; + for (i=0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker","Corrupt JPEG"); +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg *z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) return 0; // no match + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) +{ + int i; + for (i=0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } + } + return why; +} + +static int stbi__process_frame_header(stbi__jpeg *z, int scan) +{ + stbi__context *s = z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG + p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG"); + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); + + z->rgb = 0; + for (i=0; i < s->img_n; ++i) { + static const unsigned char rgb[3] = { 'R', 'G', 'B' }; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) + ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios + // and I've never seen a non-corrupted JPEG file actually use them + for (i=0; i < s->img_n; ++i) { + if (h_max % z->img_comp[i].h != 0) return stbi__err("bad H","Corrupt JPEG"); + if (v_max % z->img_comp[i].v != 0) return stbi__err("bad V","Corrupt JPEG"); + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) + // so these muls can't overflow with 32-bit ints (which we require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) + +#define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) +{ + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); + if (scan == STBI__SCAN_type) return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z,m)) return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) return 0; + return 1; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg *j) +{ + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) return 0; + if (!stbi__parse_entropy_coded_data(j)) return 0; + if (j->marker == STBI__MARKER_none ) { + // handle 0s at the end of image data from IP Kamera 9060 + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + if (x == 255) { + j->marker = stbi__get8(j->s); + break; + } + } + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + } else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); + } else { + if (!stbi__process_marker(j, m)) return 0; + } + m = stbi__get_marker(j); + } + if (j->progressive) + stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) + +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i=0; i < w; ++i) + out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = stbi__div4(n+input[i-1]); + out[i*2+1] = stbi__div4(n+input[i+1]); + } + out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) + +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = stbi__div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i=0,t0,t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w-1) & ~7); i += 8) { +#if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i *) (out + i*2), outv); +#elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i*2, o); +#endif + + // "previous" value for next iter + t1 = 3*in_near[i+7] + in_far[i+7]; + } + + t0 = t1; + t1 = 3*in_near[i] + in_far[i]; + out[i*2] = stbi__div16(3*t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} +#endif + +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + STBI_NOTUSED(in_far); + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) +{ + int i = 0; + +#ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); + __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); + __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); + __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); + __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i+7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i *) (out + 0), o0); + _mm_storeu_si128((__m128i *) (out + 16), o1); + out += 32; + } + } +#endif + +#ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); + int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); + int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); + int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); + + for (; i+7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8*4; + } + } +#endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg *j) +{ + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +#ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +#endif + +#ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +#endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg *j) +{ + stbi__free_jpeg_components(j, j->s->img_n, 0); +} + +typedef struct +{ + resample_row_func resample; + stbi_uc *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +// fast 0..255 * 0..255 => 0..255 rounded multiplication +static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) +{ + unsigned int t = x*y + 128; + return (stbi_uc) ((t + (t >>8)) >> 8); +} + +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; + + is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // nothing to do if no components requested; check this now to avoid + // accessing uninitialized coutput[0] later + if (decode_n <= 0) { stbi__cleanup_jpeg(z); return NULL; } + + // resample and color-convert + { + int k; + unsigned int i,j; + stbi_uc *output; + stbi_uc *coutput[4] = { NULL, NULL, NULL, NULL }; + + stbi__resample res_comp[4]; + + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs-1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; + else r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); + if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + // now go ahead and resample + for (j=0; j < z->s->img_y; ++j) { + stbi_uc *out = output + n * z->s->img_x * j; + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc *y = coutput[0]; + if (z->s->img_n == 3) { + if (is_rgb) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } else { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else if (z->s->img_n == 4) { + if (z->app14_color_transform == 0) { // CMYK + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(coutput[0][i], m); + out[1] = stbi__blinn_8x8(coutput[1][i], m); + out[2] = stbi__blinn_8x8(coutput[2][i], m); + out[3] = 255; + out += n; + } + } else if (z->app14_color_transform == 2) { // YCCK + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(255 - out[0], m); + out[1] = stbi__blinn_8x8(255 - out[1], m); + out[2] = stbi__blinn_8x8(255 - out[2], m); + out += n; + } + } else { // YCbCr + alpha? Ignore the fourth channel for now + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else + for (i=0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + if (is_rgb) { + if (n == 1) + for (i=0; i < z->s->img_x; ++i) + *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + else { + for (i=0; i < z->s->img_x; ++i, out += 2) { + out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + out[1] = 255; + } + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); + stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); + stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); + out[0] = stbi__compute_y(r, g, b); + out[1] = 255; + out += n; + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); + out[1] = 255; + out += n; + } + } else { + stbi_uc *y = coutput[0]; + if (n == 1) + for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; + else + for (i=0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; } + } + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output + return output; + } +} + +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + unsigned char* result; + stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__errpuc("outofmem", "Out of memory"); + STBI_NOTUSED(ri); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x,y,comp,req_comp); + STBI_FREE(j); + return result; +} + +static int stbi__jpeg_test(stbi__context *s) +{ + int r; + stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__err("outofmem", "Out of memory"); + j->s = s; + stbi__setup_jpeg(j); + r = stbi__decode_jpeg_header(j, STBI__SCAN_type); + stbi__rewind(s); + STBI_FREE(j); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) +{ + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind( j->s ); + return 0; + } + if (x) *x = j->s->img_x; + if (y) *y = j->s->img_y; + if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; + return 1; +} + +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) +{ + int result; + stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); + if (!j) return stbi__err("outofmem", "Out of memory"); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; +} +#endif + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +#ifndef STBI_NO_ZLIB + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) +#define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[STBI__ZNSYMS]; + stbi__uint16 value[STBI__ZNSYMS]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) +{ + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16-bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num) +{ + int i,k=0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i=0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i=1; i < 16; ++i) + if (sizes[i] > (1 << i)) + return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i=1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16) code; + z->firstsymbol[i] = (stbi__uint16) k; + code = (code + sizes[i]); + if (sizes[i]) + if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); + z->maxcode[i] = code << (16-i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i=0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); + z->size [c] = (stbi_uc ) s; + z->value[c] = (stbi__uint16) i; + if (s <= STBI__ZFAST_BITS) { + int j = stbi__bit_reverse(next_code[s],s); + while (j < (1 << STBI__ZFAST_BITS)) { + z->fast[j] = fastv; + j += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + stbi__uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static int stbi__zeof(stbi__zbuf *z) +{ + return (z->zbuffer >= z->zbuffer_end); +} + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) +{ + return stbi__zeof(z) ? 0 : *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf *z) +{ + do { + if (z->code_buffer >= (1U << z->num_bits)) { + z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ + return; + } + z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) +{ + unsigned int k; + if (z->num_bits < n) stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s,k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s=STBI__ZFAST_BITS+1; ; ++s) + if (k < z->maxcode[s]) + break; + if (s >= 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; + if (b >= STBI__ZNSYMS) return -1; // some data was corrupt somewhere! + if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s; + if (a->num_bits < 16) { + if (stbi__zeof(a)) { + return -1; /* report error for unexpected end of data. */ + } + stbi__fill_bits(a); + } + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes +{ + char *q; + unsigned int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); + cur = (unsigned int) (z->zout - z->zout_start); + limit = old_limit = (unsigned) (z->zout_end - z->zout_start); + if (UINT_MAX - cur < (unsigned) n) return stbi__err("outofmem", "Out of memory"); + while (cur + n > limit) { + if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); + limit *= 2; + } + q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static const int stbi__zlength_base[31] = { + 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,0,0 }; + +static const int stbi__zlength_extra[31]= +{ 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,0,0 }; + +static const int stbi__zdist_base[32] = { 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,0,0}; + +static const int stbi__zdist_extra[32] = +{ 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}; + +static int stbi__parse_huffman_block(stbi__zbuf *a) +{ + char *zout = a->zout; + for(;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) return 0; + zout = a->zout; + } + *zout++ = (char) z; + } else { + stbi_uc *p; + int len,dist; + if (z == 256) { + a->zout = zout; + return 1; + } + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); + if (zout + len > a->zout_end) { + if (!stbi__zexpand(a, zout, len)) return 0; + zout = a->zout; + } + p = (stbi_uc *) (zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { do *zout++ = v; while (--len); } + } else { + if (len) { do *zout++ = *p++; while (--len); } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf *a) +{ + static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286+32+137];//padding for maximum single op + stbi_uc codelength_sizes[19]; + int i,n; + + int hlit = stbi__zreceive(a,5) + 257; + int hdist = stbi__zreceive(a,5) + 1; + int hclen = stbi__zreceive(a,4) + 4; + int ntot = hlit + hdist; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = stbi__zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc) c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a,2)+3; + if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); + fill = lencodes[n-1]; + } else if (c == 17) { + c = stbi__zreceive(a,3)+3; + } else if (c == 18) { + c = stbi__zreceive(a,7)+11; + } else { + return stbi__err("bad codelengths", "Corrupt PNG"); + } + if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); + memset(lencodes+n, fill, c); + n += c; + } + } + if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf *a) +{ + stbi_uc header[4]; + int len,nlen,k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + if (a->num_bits < 0) return stbi__err("zlib corrupt","Corrupt PNG"); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf *a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if (stbi__zeof(a)) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = +{ + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8 +}; +static const stbi_uc stbi__zdefault_distance[32] = +{ + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +}; +/* +Init algorithm: +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} +*/ + +static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) +{ + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = stbi__zreceive(a,1); + type = stbi__zreceive(a,2); + if (type == 0) { + if (!stbi__parse_uncompressed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , STBI__ZNSYMS)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; + } else { + if (!stbi__compute_huffman_codes(a)) return 0; + } + if (!stbi__parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer+len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int) (a.zout - a.zout_start); + else + return -1; +} +#endif + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + +#ifndef STBI_NO_PNG +typedef struct +{ + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) +{ + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context *s) +{ + static const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; + int i; + for (i=0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); + return 1; +} + +typedef struct +{ + stbi__context *s; + stbi_uc *idata, *expanded, *out; + int depth; +} stbi__png; + + +enum { + STBI__F_none=0, + STBI__F_sub=1, + STBI__F_up=2, + STBI__F_avg=3, + STBI__F_paeth=4, + // synthetic filters used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static stbi_uc first_row_filter[5] = +{ + STBI__F_none, + STBI__F_sub, + STBI__F_none, + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static int stbi__paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p-a); + int pb = abs(p-b); + int pc = abs(p-c); + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) +{ + int bytes = (depth == 16? 2 : 1); + stbi__context *s = a->s; + stbi__uint32 i,j,stride = x*out_n*bytes; + stbi__uint32 img_len, img_width_bytes; + int k; + int img_n = s->img_n; // copy it into a local for later + + int output_bytes = out_n*bytes; + int filter_bytes = img_n*bytes; + int width = x; + + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); + a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into + if (!a->out) return stbi__err("outofmem", "Out of memory"); + + if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + img_len = (img_width_bytes + 1) * y; + + // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, + // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), + // so just check for raw_len < img_len always. + if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); + + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *prior; + int filter = *raw++; + + if (filter > 4) + return stbi__err("invalid filter","Corrupt PNG"); + + if (depth < 8) { + if (img_width_bytes > x) return stbi__err("invalid width","Corrupt PNG"); + cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place + filter_bytes = 1; + width = img_width_bytes; + } + prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above + + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + + // handle first byte explicitly + for (k=0; k < filter_bytes; ++k) { + switch (filter) { + case STBI__F_none : cur[k] = raw[k]; break; + case STBI__F_sub : cur[k] = raw[k]; break; + case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; + case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; + case STBI__F_avg_first : cur[k] = raw[k]; break; + case STBI__F_paeth_first: cur[k] = raw[k]; break; + } + } + + if (depth == 8) { + if (img_n != out_n) + cur[img_n] = 255; // first pixel + raw += img_n; + cur += out_n; + prior += out_n; + } else if (depth == 16) { + if (img_n != out_n) { + cur[filter_bytes] = 255; // first pixel top byte + cur[filter_bytes+1] = 255; // first pixel bottom byte + } + raw += filter_bytes; + cur += output_bytes; + prior += output_bytes; + } else { + raw += 1; + cur += 1; + prior += 1; + } + + // this is a little gross, so that we don't switch per-pixel or per-component + if (depth < 8 || img_n == out_n) { + int nk = (width - 1)*filter_bytes; + #define STBI__CASE(f) \ + case f: \ + for (k=0; k < nk; ++k) + switch (filter) { + // "none" filter turns into a memcpy here; make that explicit. + case STBI__F_none: memcpy(cur, raw, nk); break; + STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break; + STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break; + STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break; + STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break; + STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break; + } + #undef STBI__CASE + raw += nk; + } else { + STBI_ASSERT(img_n+1 == out_n); + #define STBI__CASE(f) \ + case f: \ + for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ + for (k=0; k < filter_bytes; ++k) + switch (filter) { + STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break; + STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break; + STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break; + STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break; + STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break; + STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break; + } + #undef STBI__CASE + + // the loop above sets the high byte of the pixels' alpha, but for + // 16 bit png files we also need the low byte set. we'll do that here. + if (depth == 16) { + cur = a->out + stride*j; // start at the beginning of the row again + for (i=0; i < x; ++i,cur+=output_bytes) { + cur[filter_bytes+1] = 255; + } + } + } + } + + // we make a separate pass to expand bits to pixels; for performance, + // this could run two scanlines behind the above code, so it won't + // intefere with filtering but will still be in the cache. + if (depth < 8) { + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *in = a->out + stride*j + x*out_n - img_width_bytes; + // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit + // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop + stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range + + // note that the final byte might overshoot and write more data than desired. + // we can allocate enough data that this never writes out of memory, but it + // could also overwrite the next scanline. can it overwrite non-empty data + // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. + // so we need to explicitly clamp the final ones + + if (depth == 4) { + for (k=x*img_n; k >= 2; k-=2, ++in) { + *cur++ = scale * ((*in >> 4) ); + *cur++ = scale * ((*in ) & 0x0f); + } + if (k > 0) *cur++ = scale * ((*in >> 4) ); + } else if (depth == 2) { + for (k=x*img_n; k >= 4; k-=4, ++in) { + *cur++ = scale * ((*in >> 6) ); + *cur++ = scale * ((*in >> 4) & 0x03); + *cur++ = scale * ((*in >> 2) & 0x03); + *cur++ = scale * ((*in ) & 0x03); + } + if (k > 0) *cur++ = scale * ((*in >> 6) ); + if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); + if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); + } else if (depth == 1) { + for (k=x*img_n; k >= 8; k-=8, ++in) { + *cur++ = scale * ((*in >> 7) ); + *cur++ = scale * ((*in >> 6) & 0x01); + *cur++ = scale * ((*in >> 5) & 0x01); + *cur++ = scale * ((*in >> 4) & 0x01); + *cur++ = scale * ((*in >> 3) & 0x01); + *cur++ = scale * ((*in >> 2) & 0x01); + *cur++ = scale * ((*in >> 1) & 0x01); + *cur++ = scale * ((*in ) & 0x01); + } + if (k > 0) *cur++ = scale * ((*in >> 7) ); + if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); + if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); + if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); + if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); + if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); + if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); + } + if (img_n != out_n) { + int q; + // insert alpha = 255 + cur = a->out + stride*j; + if (img_n == 1) { + for (q=x-1; q >= 0; --q) { + cur[q*2+1] = 255; + cur[q*2+0] = cur[q]; + } + } else { + STBI_ASSERT(img_n == 3); + for (q=x-1; q >= 0; --q) { + cur[q*4+3] = 255; + cur[q*4+2] = cur[q*3+2]; + cur[q*4+1] = cur[q*3+1]; + cur[q*4+0] = cur[q*3+0]; + } + } + } + } + } else if (depth == 16) { + // force the image data from big-endian to platform-native. + // this is done in a separate pass due to the decoding relying + // on the data being untouched, but could probably be done + // per-line during decode if care is taken. + stbi_uc *cur = a->out; + stbi__uint16 *cur16 = (stbi__uint16*)cur; + + for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) { + *cur16 = (cur[0] << 8) | cur[1]; + } + } + + return 1; +} + +static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) +{ + int bytes = (depth == 16 ? 2 : 1); + int out_bytes = out_n * bytes; + stbi_uc *final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); + + // de-interlacing + final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); + if (!final) return stbi__err("outofmem", "Out of memory"); + for (p=0; p < 7; ++p) { + int xorig[] = { 0,4,0,2,0,1,0 }; + int yorig[] = { 0,0,4,0,2,0,1 }; + int xspc[] = { 8,8,4,4,2,2,1 }; + int yspc[] = { 8,8,8,4,4,2,2 }; + int i,j,x,y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; + if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j=0; j < y; ++j) { + for (i=0; i < x; ++i) { + int out_y = j*yspc[p]+yorig[p]; + int out_x = i*xspc[p]+xorig[p]; + memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes, + a->out + (j*x+i)*out_bytes, out_bytes); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i=0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i=0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16 *p = (stbi__uint16*) z->out; + + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) +{ + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p += 3; + } + } else { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p[3] = palette[n+3]; + p += 4; + } + } + STBI_FREE(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load_global = 0; +static int stbi__de_iphone_flag_global = 0; + +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_global = flag_true_if_should_convert; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global +#define stbi__de_iphone_flag stbi__de_iphone_flag_global +#else +static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, stbi__unpremultiply_on_load_set; +static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, stbi__de_iphone_flag_set; + +STBIDEF void stbi__unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; + stbi__unpremultiply_on_load_set = 1; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_local = flag_true_if_should_convert; + stbi__de_iphone_flag_set = 1; +} + +#define stbi__unpremultiply_on_load (stbi__unpremultiply_on_load_set \ + ? stbi__unpremultiply_on_load_local \ + : stbi__unpremultiply_on_load_global) +#define stbi__de_iphone_flag (stbi__de_iphone_flag_set \ + ? stbi__de_iphone_flag_local \ + : stbi__de_iphone_flag_global) +#endif // STBI_THREAD_LOCAL + +static void stbi__de_iphone(stbi__png *z) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i=0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = ( t * 255 + half) / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +#define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) + +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n=0; + stbi_uc has_trans=0, tc[3]={0}; + stbi__uint16 tc16[3]; + stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k,interlace=0, color=0, is_iphone=0; + stbi__context *s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) return 0; + + if (scan == STBI__SCAN_type) return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C','g','B','I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I','H','D','R'): { + int comp,filter; + if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); + first = 0; + if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); + s->img_x = stbi__get32be(s); + s->img_y = stbi__get32be(s); + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); + comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); + filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); + interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); + if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); + if (scan == STBI__SCAN_header) return 1; + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); + // if SCAN_header, have to scan to see if we have a tRNS + } + break; + } + + case STBI__PNG_TYPE('P','L','T','E'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = stbi__get8(s); + palette[i*4+1] = stbi__get8(s); + palette[i*4+2] = stbi__get8(s); + palette[i*4+3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t','R','N','S'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); + if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); + has_trans = 1; + if (z->depth == 16) { + for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is + } else { + for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I','D','A','T'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); + if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; } + if ((int)(ioff + c.length) < (int)ioff) return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I','E','N','D'): { + stbi__uint32 raw_len, bpl; + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) return 1; + if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); + if (z->expanded == NULL) return 0; // zlib should set error + STBI_FREE(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + } else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) alpha + ++s->img_n; + } + STBI_FREE(z->expanded); z->expanded = NULL; + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + return 1; + } + + default: + // if critical, fail + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); + #endif + return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri) +{ + void *result=NULL; + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth <= 8) + ri->bits_per_channel = 8; + else if (p->depth == 16) + ri->bits_per_channel = 16; + else + return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + else + result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) *n = p->s->img_n; + } + STBI_FREE(p->out); p->out = NULL; + STBI_FREE(p->expanded); p->expanded = NULL; + STBI_FREE(p->idata); p->idata = NULL; + + return result; +} + +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x,y,comp,req_comp, ri); +} + +static int stbi__png_test(stbi__context *s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind( p->s ); + return 0; + } + if (x) *x = p->s->img_x; + if (y) *y = p->s->img_y; + if (comp) *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +static int stbi__png_is16(stbi__context *s) +{ + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) + return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; +} +#endif + +// Microsoft/Windows BMP image + +#ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context *s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') return 0; + if (stbi__get8(s) != 'M') return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context *s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) { n += 16; z >>= 16; } + if (z >= 0x00100) { n += 8; z >>= 8; } + if (z >= 0x00010) { n += 4; z >>= 4; } + if (z >= 0x00004) { n += 2; z >>= 2; } + if (z >= 0x00002) { n += 1;/* >>= 1;*/ } + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +// extract an arbitrarily-aligned N-bit value (N=bits) +// from v, and then make it 8-bits long and fractionally +// extend it to full full range. +static int stbi__shiftsigned(unsigned int v, int shift, int bits) +{ + static unsigned int mul_table[9] = { + 0, + 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, + 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, 0,0,1,0,2,4,6,0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v < 256); + v >>= (8-bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int) ((unsigned) v * mul_table[bits]) >> shift_table[bits]; +} + +typedef struct +{ + int bpp, offset, hsz; + unsigned int mr,mg,mb,ma, all_a; + int extra_read; +} stbi__bmp_data; + +static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress) +{ + // BI_BITFIELDS specifies masks explicitly, don't override + if (compress == 3) + return 1; + + if (compress == 0) { + if (info->bpp == 16) { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } else if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 + } else { + // otherwise, use defaults, which is all-0 + info->mr = info->mg = info->mb = info->ma = 0; + } + return 1; + } + return 0; // error +} + +static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) +{ + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + info->extra_read = 14; + + if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); + + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); + info->bpp = stbi__get16le(s); + if (hsz != 12) { + int compress = stbi__get32le(s); + if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + if (compress >= 4) return stbi__errpuc("BMP JPEG/PNG", "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes + if (compress == 3 && info->bpp != 16 && info->bpp != 32) return stbi__errpuc("bad BMP", "bad BMP"); // bitfields requires 16 or 32 bits/pixel + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (info->bpp == 16 || info->bpp == 32) { + if (compress == 0) { + stbi__bmp_set_mask_defaults(info, compress); + } else if (compress == 3) { + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->extra_read += 12; + // not documented, but generated by photoshop and handled by mspaint + if (info->mr == info->mg && info->mg == info->mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else { + // V4/V5 header + int i; + if (hsz != 108 && hsz != 124) + return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); + if (compress != 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs + stbi__bmp_set_mask_defaults(info, compress); + stbi__get32le(s); // discard color space + for (i=0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + } + return (void *) 1; +} + + +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + unsigned int mr=0,mg=0,mb=0,ma=0, all_a; + stbi_uc pal[256][4]; + int psize=0,i,j,width; + int flip_vertically, pad, target; + stbi__bmp_data info; + STBI_NOTUSED(ri); + + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set + + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; + + if (info.hsz == 12) { + if (info.bpp < 24) + psize = (info.offset - info.extra_read - 24) / 3; + } else { + if (info.bpp < 16) + psize = (info.offset - info.extra_read - info.hsz) >> 2; + } + if (psize == 0) { + if (info.offset != s->callback_already_read + (s->img_buffer - s->img_buffer_original)) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } + } + + if (info.bpp == 24 && ma == 0xff000000) + s->img_n = 3; + else + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) width = s->img_x; + else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + if (info.bpp == 1) { + for (j=0; j < (int) s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i=0; i < (int) s->img_x; ++i) { + int color = (v>>bit_offset)&0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + if((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } else { + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=stbi__get8(s),v2=0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (info.bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + stbi__skip(s, info.offset - info.extra_read - info.hsz); + if (info.bpp == 24) width = 3 * s->img_x; + else if (info.bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); + if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + unsigned char a; + out[z+2] = stbi__get8(s); + out[z+1] = stbi__get8(s); + out[z+0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) out[z++] = a; + } + } else { + int bpp = info.bpp; + for (i=0; i < (int) s->img_x; ++i) { + stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + all_a |= a; + if (target == 4) out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) + out[i] = 255; + + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i]; p1[i] = p2[i]; p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + return out; +} +#endif + +// Targa Truevision - TGA +// by Jonathan Dummer +#ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +{ + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) *is_rgb16 = 0; + switch(bits_per_pixel) { + case 8: return STBI_grey; + case 16: if(is_grey) return STBI_grey_alpha; + // fallthrough + case 15: if(is_rgb16) *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: return bits_per_pixel/8; + default: return 0; + } +} + +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) +{ + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if( tga_colormap_type > 1 ) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + tga_image_type = stbi__get8(s); // image type + if ( tga_colormap_type == 1 ) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s,9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } + tga_w = stbi__get16le(s); + if( tga_w < 1 ) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if( tga_h < 1 ) { + stbi__rewind(s); + return 0; // test height + } + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); + } + if(!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) *x = tga_w; + if (y) *y = tga_h; + if (comp) *comp = tga_comp; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context *s) +{ + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if ( tga_color_type == 1 ) { // colormapped (paletted) image + if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + stbi__skip(s,4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s,9); // skip colormap specification and image x/y origin + } + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 instead of 0 + +errorEnd: + stbi__rewind(s); + return res; +} + +// read 16bit value and convert to 24bit RGB +static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) +{ + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later + out[0] = (stbi_uc)((r * 255)/31); + out[1] = (stbi_uc)((g * 255)/31); + out[2] = (stbi_uc)((b * 255)/31); + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16=0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = {0}; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + STBI_NOTUSED(tga_x_origin); // @TODO + STBI_NOTUSED(tga_y_origin); // @TODO + + if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // do a tiny bit of precessing + if ( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette + if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); + + if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset ); + + if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { + for (i=0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height -i - 1 : i; + stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if ( tga_indexed) + { + if (tga_palette_len == 0) { /* you have to have at least one entry! */ + STBI_FREE(tga_data); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (tga_rgb16) { + stbi_uc *pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i=0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i=0; i < tga_width * tga_height; ++i) + { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if ( tga_is_RLE ) + { + if ( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if ( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if ( read_next_pixel ) + { + // load however much data we did have + if ( tga_indexed ) + { + // read in index, then perform the lookup + int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); + if ( pal_idx >= tga_palette_len ) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else if(tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i*tga_comp+j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if ( tga_inverted ) + { + for (j = 0; j*2 < tga_height; ++j) + { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if ( tga_palette != NULL ) + { + STBI_FREE( tga_palette ); + } + } + + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) + { + unsigned char* tga_pixel = tga_data; + for (i=0; i < tga_width * tga_height; ++i) + { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + STBI_NOTUSED(tga_palette_start); + // OK, done + return tga_data; +} +#endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) +{ + int count, nleft, len; + + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + + return 1; +} + +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w,h; + stbi_uc *out; + STBI_NOTUSED(ri); + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s,stbi__get32be(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s) ); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); + + // Create the destination image. + + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } else + out = (stbi_uc *) stbi__malloc(4 * w*h); + + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", "bad RLE data"); + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + stbi__uint16 val = channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) + *q = val; + } else { + stbi_uc *p = out+channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) + *p = val; + } + } else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16) stbi__get16be(s); + } else { + stbi_uc *p = out+channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; i++, p += 4) + *p = (stbi_uc) (stbi__get16be(s) >> 8); + } else { + for (i = 0; i < pixelCount; i++, p += 4) + *p = stbi__get8(s); + } + } + } + } + } + + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i=0; i < w*h; ++i) { + stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a); + pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a); + pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a); + } + } + } else { + for (i=0; i < w*h; ++i) { + unsigned char *pixel = out + 4*i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); + pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); + pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); + } + } + } + } + + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + if (comp) *comp = 4; + *y = h; + *x = w; + + return out; +} +#endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +#ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context *s,const char *str) +{ + int i; + for (i=0; i<4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context *s) +{ + int i; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) + return 0; + + for(i=0;i<84;++i) + stbi__get8(s); + + if (!stbi__pic_is4(s,"PICT")) + return 0; + + return 1; +} + +typedef struct +{ + stbi_uc size,type,channel; +} stbi__pic_packet; + +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) +{ + int mask=0x80, i; + + for (i=0; i<4; ++i, mask>>=1) { + if (channel & mask) { + if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); + dest[i]=stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) +{ + int mask=0x80,i; + + for (i=0;i<4; ++i, mask>>=1) + if (channel&mask) + dest[i]=src[i]; +} + +static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) +{ + int act_comp=0,num_packets=0,y,chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return stbi__errpuc("bad format","too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); + if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for(y=0; ytype) { + default: + return stbi__errpuc("bad format","packet has bad compression type"); + + case 0: {//uncompressed + int x; + + for(x=0;xchannel,dest)) + return 0; + break; + } + + case 1://Pure RLE + { + int left=width, i; + + while (left>0) { + stbi_uc count,value[4]; + + count=stbi__get8(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); + + if (count > left) + count = (stbi_uc) left; + + if (!stbi__readval(s,packet->channel,value)) return 0; + + for(i=0; ichannel,dest,value); + left -= count; + } + } + break; + + case 2: {//Mixed RLE + int left=width; + while (left>0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count==128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file","scanline overrun"); + + if (!stbi__readval(s,packet->channel,value)) + return 0; + + for(i=0;ichannel,dest,value); + } else { // Raw + ++count; + if (count>left) return stbi__errpuc("bad file","scanline overrun"); + + for(i=0;ichannel,dest)) + return 0; + } + left-=count; + } + break; + } + } + } + } + + return result; +} + +static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri) +{ + stbi_uc *result; + int i, x,y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) comp = &internal_comp; + + for (i=0; i<92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + + if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); + + stbi__get32be(s); //skip `ratio' + stbi__get16be(s); //skip `fields' + stbi__get16be(s); //skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); + if (!result) return stbi__errpuc("outofmem", "Out of memory"); + memset(result, 0xff, x*y*4); + + if (!stbi__pic_load_core(s,x,y,comp, result)) { + STBI_FREE(result); + result=0; + } + *px = x; + *py = y; + if (req_comp == 0) req_comp = *comp; + result=stbi__convert_format(result,4,req_comp,x,y); + + return result; +} + +static int stbi__pic_test(stbi__context *s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} +#endif + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb + +#ifndef STBI_NO_GIF +typedef struct +{ + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct +{ + int w,h; + stbi_uc *out; // output buffer (always 4 components) + stbi_uc *background; // The current "background" as far as a gif is concerned + stbi_uc *history; + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[8192]; + stbi_uc *color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; + int delay; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context *s) +{ + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') return 0; + if (stbi__get8(s) != 'a') return 0; + return 1; +} + +static int stbi__gif_test(stbi__context *s) +{ + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) +{ + int i; + for (i=0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) +{ + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (g->w > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (g->h > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + + if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments + + if (is_info) return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); + if (!g) return stbi__err("outofmem", "Out of memory"); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); + stbi__rewind( s ); + return 0; + } + if (x) *x = g->w; + if (y) *y = g->h; + STBI_FREE(g); + return 1; +} + +static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) +{ + stbi_uc *p, *c; + int idx; + + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) return; + + idx = g->cur_x + g->cur_y; + p = &g->out[idx]; + g->history[idx / 4] = 1; + + c = &g->color_table[g->codes[code].suffix * 4]; + if (c[3] > 128) { // don't render transparent pixels; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) +{ + stbi_uc lzw_cs; + stbi__int32 len, init_code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw *p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (init_code = 0; init_code < clear; init_code++) { + g->codes[init_code].prefix = -1; + g->codes[init_code].first = (stbi_uc) init_code; + g->codes[init_code].suffix = (stbi_uc) init_code; + } + + // support no starting clear code + avail = clear+2; + oldcode = -1; + + len = 0; + for(;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32) stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s,len); + return g->out; + } else if (code <= avail) { + if (first) { + return stbi__errpuc("no clear code", "Corrupt GIF"); + } + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 8192) { + return stbi__errpuc("too many codes", "Corrupt GIF"); + } + + p->prefix = (stbi__int16) oldcode; + p->first = g->codes[oldcode].first; + p->suffix = (code == avail) ? p->first : g->codes[code].first; + } else if (code == avail) + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16) code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +// this function is designed to support animated gifs, although stb_image doesn't support it +// two back is the image from two frames ago, used for a very specific disposal format +static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back) +{ + int dispose; + int first_frame; + int pi; + int pcount; + STBI_NOTUSED(req_comp); + + // on first frame, any non-written pixels get the background colour (non-transparent) + first_frame = 0; + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header + if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) + return stbi__errpuc("too large", "GIF image is too large"); + pcount = g->w * g->h; + g->out = (stbi_uc *) stbi__malloc(4 * pcount); + g->background = (stbi_uc *) stbi__malloc(4 * pcount); + g->history = (stbi_uc *) stbi__malloc(pcount); + if (!g->out || !g->background || !g->history) + return stbi__errpuc("outofmem", "Out of memory"); + + // image is treated as "transparent" at the start - ie, nothing overwrites the current background; + // background colour is only used for pixels that are not rendered first frame, after that "background" + // color refers to the color that was there the previous frame. + memset(g->out, 0x00, 4 * pcount); + memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) + memset(g->history, 0x00, pcount); // pixels that were affected previous frame + first_frame = 1; + } else { + // second frame - how do we dispose of the previous one? + dispose = (g->eflags & 0x1C) >> 2; + pcount = g->w * g->h; + + if ((dispose == 3) && (two_back == 0)) { + dispose = 2; // if I don't have an image to revert back to, default to the old background + } + + if (dispose == 3) { // use previous graphic + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 ); + } + } + } else if (dispose == 2) { + // restore what was changed last frame to background before that frame; + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 ); + } + } + } else { + // This is a non-disposal case eithe way, so just + // leave the pixels as is, and they will become the new background + // 1: do not dispose + // 0: not specified. + } + + // background is what out is after the undoing of the previou frame; + memcpy( g->background, g->out, 4 * g->w * g->h ); + } + + // clear my history; + memset( g->history, 0x00, g->w * g->h ); // pixels that were affected previous frame + + for (;;) { + int tag = stbi__get8(s); + switch (tag) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc *o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + // if the width of the specified rectangle is 0, that means + // we may not see *any* pixels or the image is malformed; + // to make sure this is caught, move the current y down to + // max_y (which is what out_gif_code checks). + if (w == 0) + g->cur_y = g->max_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc *) g->lpal; + } else if (g->flags & 0x80) { + g->color_table = (stbi_uc *) g->pal; + } else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (!o) return NULL; + + // if this was the first frame, + pcount = g->w * g->h; + if (first_frame && (g->bgindex > 0)) { + // if first frame, any pixel not drawn to gets the background color + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi] == 0) { + g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; + memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 ); + } + } + } + + return o; + } + + case 0x21: // Comment Extension. + { + int len; + int ext = stbi__get8(s); + if (ext == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. + + // unset old transparent + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 255; + } + if (g->eflags & 0x01) { + g->transparent = stbi__get8(s); + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 0; + } + } else { + // don't need transparent + stbi__skip(s, 1); + g->transparent = -1; + } + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) { + stbi__skip(s, len); + } + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc *) s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, int **delays) +{ + STBI_FREE(g->out); + STBI_FREE(g->history); + STBI_FREE(g->background); + + if (out) STBI_FREE(out); + if (delays && *delays) STBI_FREE(*delays); + return stbi__errpuc("outofmem", "Out of memory"); +} + +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + if (stbi__gif_test(s)) { + int layers = 0; + stbi_uc *u = 0; + stbi_uc *out = 0; + stbi_uc *two_back = 0; + stbi__gif g; + int stride; + int out_size = 0; + int delays_size = 0; + + STBI_NOTUSED(out_size); + STBI_NOTUSED(delays_size); + + memset(&g, 0, sizeof(g)); + if (delays) { + *delays = 0; + } + + do { + u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + + if (u) { + *x = g.w; + *y = g.h; + ++layers; + stride = g.w * g.h * 4; + + if (out) { + void *tmp = (stbi_uc*) STBI_REALLOC_SIZED( out, out_size, layers * stride ); + if (!tmp) + return stbi__load_gif_main_outofmem(&g, out, delays); + else { + out = (stbi_uc*) tmp; + out_size = layers * stride; + } + + if (delays) { + int *new_delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); + if (!new_delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + *delays = new_delays; + delays_size = layers * sizeof(int); + } + } else { + out = (stbi_uc*)stbi__malloc( layers * stride ); + if (!out) + return stbi__load_gif_main_outofmem(&g, out, delays); + out_size = layers * stride; + if (delays) { + *delays = (int*) stbi__malloc( layers * sizeof(int) ); + if (!*delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + delays_size = layers * sizeof(int); + } + } + memcpy( out + ((layers - 1) * stride), u, stride ); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); + + *z = layers; + return out; + } else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + STBI_NOTUSED(ri); + + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } else if (g.out) { + // if there was an error and we allocated an image buffer, free it! + STBI_FREE(g.out); + } + + // free buffers needed for multiple frame loading; + STBI_FREE(g.history); + STBI_FREE(g.background); + + return u; +} + +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) +{ + return stbi__gif_info_raw(s,x,y,comp); +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context *s, const char *signature) +{ + int i; + for (i=0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + stbi__rewind(s); + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if(!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); + } + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) +{ + int len=0; + char c = '\0'; + + c = (char) stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN-1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char) stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if ( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + const char *headerToken; + STBI_NOTUSED(ri); + + // Check identifier + headerToken = stbi__hdr_gettoken(s,buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int) strtol(token, NULL, 10); + + if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + + *x = width; + *y = height; + + if (comp) *comp = 3; + if (req_comp == 0) req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); + if (!hdr_data) + return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if ( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc) c1; + rgbe[1] = (stbi_uc) c2; + rgbe[2] = (stbi_uc) len; + rgbe[3] = (stbi_uc) stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) { + scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i=0; i < width; ++i) + stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + if (scanline) + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int dummy; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind( s ); + return 0; + } + + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) { + stbi__rewind( s ); + return 0; + } + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *y = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *x = (int) strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +#ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) +{ + void *p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + if (p == NULL) { + stbi__rewind( s ); + return 0; + } + if (x) *x = s->img_x; + if (y) *y = s->img_y; + if (comp) { + if (info.bpp == 24 && info.ma == 0xff000000) + *comp = 3; + else + *comp = info.ma ? 4 : 3; + } + return 1; +} +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) +{ + int channelCount, dummy, depth; + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind( s ); + return 0; + } + *comp = 4; + return 1; +} + +static int stbi__psd_is16(stbi__context *s) +{ + int channelCount, depth; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + STBI_NOTUSED(stbi__get32be(s)); + STBI_NOTUSED(stbi__get32be(s)); + depth = stbi__get16be(s); + if (depth != 16) { + stbi__rewind( s ); + return 0; + } + return 1; +} +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) +{ + int act_comp=0,num_packets=0,chained,dummy; + stbi__pic_packet packets[10]; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 88); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) { + stbi__rewind( s); + return 0; + } + if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind( s ); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind( s ); + return 0; + } + if (packet->size != 8) { + stbi__rewind( s ); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} +#endif + +// ************************************************************************************************* +// Portable Gray Map and Portable Pixel Map loader +// by Ken Miller +// +// PGM: http://netpbm.sourceforge.net/doc/pgm.html +// PPM: http://netpbm.sourceforge.net/doc/ppm.html +// +// Known limitations: +// Does not support comments in the header section +// Does not support ASCII image data (formats P2 and P3) + +#ifndef STBI_NO_PNM + +static int stbi__pnm_test(stbi__context *s) +{ + char p, t; + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind( s ); + return 0; + } + return 1; +} + +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + STBI_NOTUSED(ri); + + ri->bits_per_channel = stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); + if (ri->bits_per_channel == 0) + return 0; + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + + if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc *) stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8)); + + if (req_comp && req_comp != s->img_n) { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) +{ + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char) stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) + *c = (char) stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static int stbi__pnm_getinteger(stbi__context *s, char *c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value*10 + (*c - '0'); + *c = (char) stbi__get8(s); + } + + return value; +} + +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) +{ + int maxv, dummy; + char c, p, t; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char) stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + if (maxv > 65535) + return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); + else if (maxv > 255) + return 16; + else + return 8; +} + +static int stbi__pnm_is16(stbi__context *s) +{ + if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) + return 1; + return 0; +} +#endif + +static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) +{ + #ifndef STBI_NO_JPEG + if (stbi__jpeg_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNG + if (stbi__png_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_GIF + if (stbi__gif_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_BMP + if (stbi__bmp_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PIC + if (stbi__pic_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) return 1; + #endif + + // test tga last because it's a crappy test! + #ifndef STBI_NO_TGA + if (stbi__tga_info(s, x, y, comp)) + return 1; + #endif + return stbi__err("unknown image type", "Image not of any known type, or corrupt"); +} + +static int stbi__is_16_main(stbi__context *s) +{ + #ifndef STBI_NO_PNG + if (stbi__png_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_is16(s)) return 1; + #endif + return 0; +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s,x,y,comp); + fseek(f,pos,SEEK_SET); + return r; +} + +STBIDEF int stbi_is_16_bit(char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_is_16_bit_from_file(f); + fclose(f); + return result; +} + +STBIDEF int stbi_is_16_bit_from_file(FILE *f) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__is_16_main(&s); + fseek(f,pos,SEEK_SET); + return r; +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__is_16_main(&s); +} + +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__is_16_main(&s); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +/* + revision history: + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug + 1-bit BMP + *_is_16_bit api + avoid warnings + 2.16 (2017-07-23) all functions have 16-bit variants; + STBI_NO_STDIO works again; + compilation fixes; + fix rounding in unpremultiply; + optimize vertical flip; + disable raw_len validation; + documentation fixes + 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; + warning fixes; disable run-time SSE detection on gcc; + uniform handling of optional "return" values; + thread-safe initialization of zlib tables + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) allocate large structures on the stack + remove white matting for transparent PSD + fix reported channel count for PNG & BMP + re-enable SSE2 in non-gcc 64-bit + support RGB-formatted JPEG + read 16-bit PNGs (only as 8-bit) + 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED + 2.09 (2016-01-16) allow comments in PNM files + 16-bit-per-pixel TGA (not bit-per-component) + info() for TGA could break due to .hdr handling + info() for BMP to shares code instead of sloppy parse + can use STBI_REALLOC_SIZED if allocator doesn't support realloc + code cleanup + 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA + 2.07 (2015-09-13) fix compiler warnings + partial animated GIF support + limited 16-bpc PSD support + #ifdef unused functions + bug with < 92 byte PIC,PNM,HDR,TGA + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) extra corruption checking (mmozeiko) + stbi_set_flip_vertically_on_load (nguillemot) + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 + 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG + 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) + progressive JPEG (stb) + PGM/PPM support (Ken Miller) + STBI_MALLOC,STBI_REALLOC,STBI_FREE + GIF bugfix -- seemingly never worked + STBI_NO_*, STBI_ONLY_* + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) + optimize PNG (ryg) + fix bug in interlaced PNG with user-specified channel count (stb) + 1.46 (2014-08-26) + fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG + 1.45 (2014-08-16) + fix MSVC-ARM internal compiler error by wrapping malloc + 1.44 (2014-08-07) + various warning fixes from Ronny Chevalier + 1.43 (2014-07-15) + fix MSVC-only compiler problem in code changed in 1.42 + 1.42 (2014-07-09) + don't define _CRT_SECURE_NO_WARNINGS (affects user code) + fixes to stbi__cleanup_jpeg path + added STBI_ASSERT to avoid requiring assert.h + 1.41 (2014-06-25) + fix search&replace from 1.36 that messed up comments/error messages + 1.40 (2014-06-22) + fix gcc struct-initialization warning + 1.39 (2014-06-15) + fix to TGA optimization when req_comp != number of components in TGA; + fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) + add support for BMP version 5 (more ignored fields) + 1.38 (2014-06-06) + suppress MSVC warnings on integer casts truncating values + fix accidental rename of 'skip' field of I/O + 1.37 (2014-06-04) + remove duplicate typedef + 1.36 (2014-06-03) + convert to header file single-file library + if de-iphone isn't set, load iphone images color-swapped instead of returning NULL + 1.35 (2014-05-27) + various warnings + fix broken STBI_SIMD path + fix bug where stbi_load_from_file no longer left file pointer in correct place + fix broken non-easy path for 32-bit BMP (possibly never used) + TGA optimization by Arseny Kapoulkine + 1.34 (unknown) + use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case + 1.33 (2011-07-14) + make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements + 1.32 (2011-07-13) + support for "info" function for all supported filetypes (SpartanJ) + 1.31 (2011-06-20) + a few more leak fixes, bug in PNG handling (SpartanJ) + 1.30 (2011-06-11) + added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway + error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) + fix inefficiency in decoding 32-bit BMP (David Woo) + 1.29 (2010-08-16) + various warning fixes from Aurelien Pocheville + 1.28 (2010-08-01) + fix bug in GIF palette transparency (SpartanJ) + 1.27 (2010-08-01) + cast-to-stbi_uc to fix warnings + 1.26 (2010-07-24) + fix bug in file buffering for PNG reported by SpartanJ + 1.25 (2010-07-17) + refix trans_data warning (Won Chun) + 1.24 (2010-07-12) + perf improvements reading from files on platforms with lock-heavy fgetc() + minor perf improvements for jpeg + deprecated type-specific functions so we'll get feedback if they're needed + attempt to fix trans_data warning (Won Chun) + 1.23 fixed bug in iPhone support + 1.22 (2010-07-10) + removed image *writing* support + stbi_info support from Jetro Lauha + GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) + 1.21 fix use of 'stbi_uc' in header (reported by jon blow) + 1.20 added support for Softimage PIC, by Tom Seddon + 1.19 bug in interlaced PNG corruption check (found by ryg) + 1.18 (2008-08-02) + fix a threading bug (local mutable static) + 1.17 support interlaced PNG + 1.16 major bugfix - stbi__convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug + header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 (2006-11-19) + first released version +*/ + + +/* +------------------------------------------------------------------------------ +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/hittable.c b/hittable.c index 724723a..b4ca9a9 100644 --- a/hittable.c +++ b/hittable.c @@ -192,7 +192,7 @@ bool hittable_list_bounding_box(const HittableList *list, double time_start, } static void get_sphere_uv(Point3 p, double *u, double *v) { - double theta = acos(-p.x); + double theta = acos(-p.y); double phi = atan2(-p.z, p.x) + M_PI; *u = phi / (2 * M_PI); *v = theta / M_PI; diff --git a/main.c b/main.c index ef68576..3951426 100644 --- a/main.c +++ b/main.c @@ -19,8 +19,9 @@ #define SCENE_RANDOM 0 #define SCENE_TWO_SPHERES 1 #define SCENE_TWO_PERLIN_SPHERES 2 +#define SCENE_EARTH 3 -#define SCENE_SELECT SCENE_TWO_PERLIN_SPHERES +#define SCENE_SELECT SCENE_EARTH static Color ray_color(Ray r, const Hittable *world, int depth) { if (depth <= 0) @@ -143,6 +144,14 @@ static Hittable *two_perlin_spheres(Arena *arena) { return world; } +static Hittable *earth(Arena *arena) { + Texture *earth_texture = texture_create_image("assets/earthmap.jpg", arena); + Material *earth_surface = material_create_lambertian(earth_texture, arena); + Hittable *globe = hittable_create_sphere((Point3){0.0, 0.0, 0.0}, 2.0, + earth_surface, arena); + return globe; +} + int main(void) { srand(42); @@ -158,14 +167,14 @@ int main(void) { /* Image parameters */ const double aspect_ratio = 16.0 / 9.0; - const int image_width = 400; + const int image_width = 1200; const int image_height = (int)(image_width / aspect_ratio); - const int samples_per_pixel = 100; + const int samples_per_pixel = 500; const int max_depth = 50; /* World */ - Point3 look_from = {13.0, 2.0, 3.0}; + Point3 look_from = {0.0, 0.0, 1.0}; Point3 look_at = {0.0, 0.0, 0.0}; double vfov = 40.0; double aperture = 0.0; @@ -189,6 +198,11 @@ int main(void) { look_from = (Point3){13.0, 2.0, 3.0}; look_at = (Point3){0.0, 0.0, 0.0}; vfov = 20.0; +#elif SCENE_SELECT == SCENE_EARTH + world = earth(&arena); + look_from = (Point3){13.0, 2.0, 3.0}; + look_at = (Point3){0.0, 0.0, 0.0}; + vfov = 20.0; #endif Vec3 up = {0.0, 1.0, 0.0}; @@ -232,3 +246,6 @@ int main(void) { #include "texture.c" #include "utils.c" #include "vec3.c" + +#define STB_IMAGE_IMPLEMENTATION +#include "external/stb_image.h" diff --git a/texture.c b/texture.c index c402307..27c1ee9 100644 --- a/texture.c +++ b/texture.c @@ -1,9 +1,17 @@ #include "texture.h" #include "arena.h" #include "color.h" +#include "external/stb_image.h" #include "perlin.h" +#include "utils.h" #include +#include + +#define DEBUG_COLOR \ + (Color) { 1.0, 0.0, 1.0 } + +static const int image_bytes_per_pixel = 3; Texture *texture_create_solid_color(Color value, Arena *arena) { Texture *result = arena_alloc(arena, sizeof(Texture)); @@ -22,6 +30,13 @@ Texture *texture_create_checker(const Texture *odd, const Texture *even, return result; } +Texture *texture_create_checker_solid_color(Color odd, Color even, double size, + Arena *arena) { + Texture *odd_texture = texture_create_solid_color(odd, arena); + Texture *even_texture = texture_create_solid_color(even, arena); + return texture_create_checker(odd_texture, even_texture, size, arena); +} + Texture *texture_create_perlin_noise(double scale, int point_count, Arena *arena) { Texture *result = arena_alloc(arena, sizeof(Texture)); @@ -31,11 +46,68 @@ Texture *texture_create_perlin_noise(double scale, int point_count, return result; } -Texture *texture_create_checker_solid_color(Color odd, Color even, double size, - Arena *arena) { - Texture *odd_texture = texture_create_solid_color(odd, arena); - Texture *even_texture = texture_create_solid_color(even, arena); - return texture_create_checker(odd_texture, even_texture, size, arena); +Texture *texture_create_image(const char *filename, Arena *arena) { + Texture *result = arena_alloc(arena, sizeof(Texture)); + result->type = TEXTURE_IMAGE; + + int components_per_pixel = image_bytes_per_pixel; + result->image.data = + stbi_load(filename, &result->image.width, &result->image.height, + &components_per_pixel, components_per_pixel); + if (!result->image.data) { + fprintf(stderr, "Failed to load texture from image file %s\n", filename); + result->image.width = result->image.height = 0; + } + + result->image.bytes_per_scanline = + image_bytes_per_pixel * result->image.width; + + return result; +} + +static Color image_value(const ImageTexture *image, double u, double v) { + if (!image->data) + return DEBUG_COLOR; + + u = clamp(u, 0.0, 1.0); + v = 1.0 - clamp(v, 0.0, 1.0); + + int i = u * image->width; + int j = v * image->height; + + if (i >= image->width) + i = image->width - 1; + if (j >= image->height) + j = image->height - 1; + + const double color_scale = 1.0 / 255.0; + const unsigned char *pixel = + image->data + j * image->bytes_per_scanline + i * image_bytes_per_pixel; + + return (Color){color_scale * pixel[0], color_scale * pixel[1], + color_scale * pixel[2]}; +} + +static Color solid_color_value(const SolidColor *solid_color) { + return solid_color->value; +} + +static Color checker_value(const CheckerTexture *checker, double u, double v, + Point3 p) { + double sines = sin(checker->size * p.x) * sin(checker->size * p.y) * + sin(checker->size * p.z); + if (sines < 0.0) + return texture_value(checker->odd, u, v, p); + return texture_value(checker->even, u, v, p); +} + +static Color perlin_value(const PerlinNoiseTexture *perlin, Point3 p) { + double noise_value = + 0.5 * + (1.0 + sin(perlin->scale * p.z + + 10 * perlin_turbulence(perlin->data, p, + PERLIN_DEFAULT_TURBULENCE_DEPTH))); + return color_mul_const(noise_value, (Color){1.0, 1.0, 1.0}); } Color texture_value(const Texture *texture, double u, double v, Point3 p) { @@ -46,28 +118,8 @@ Color texture_value(const Texture *texture, double u, double v, Point3 p) { return checker_value(&texture->checker, u, v, p); case TEXTURE_PERLIN_NOISE: return perlin_value(&texture->noise, p); + case TEXTURE_IMAGE: + return image_value(&texture->image, u, v); } - return (Color){0.0, 0.0, 0.0}; -} - -Color solid_color_value(const SolidColor *solid_color) { - return solid_color->value; -} - -Color checker_value(const CheckerTexture *checker, double u, double v, - Point3 p) { - double sines = sin(checker->size * p.x) * sin(checker->size * p.y) * - sin(checker->size * p.z); - if (sines < 0.0) - return texture_value(checker->odd, u, v, p); - return texture_value(checker->even, u, v, p); -} - -Color perlin_value(const PerlinNoiseTexture *perlin, Point3 p) { - double noise_value = - 0.5 * - (1.0 + sin(perlin->scale * p.z + - 10 * perlin_turbulence(perlin->data, p, - PERLIN_DEFAULT_TURBULENCE_DEPTH))); - return color_mul_const(noise_value, (Color){1.0, 1.0, 1.0}); + return DEBUG_COLOR; } diff --git a/texture.h b/texture.h index b93d834..d3fe6b1 100644 --- a/texture.h +++ b/texture.h @@ -10,6 +10,7 @@ typedef enum TextureType { TEXTURE_SOLID_COLOR, TEXTURE_CHECKER, TEXTURE_PERLIN_NOISE, + TEXTURE_IMAGE, } TextureType; typedef struct Texture Texture; @@ -29,12 +30,19 @@ typedef struct PerlinNoiseTexture { double scale; } PerlinNoiseTexture; +typedef struct ImageTexture { + unsigned char *data; + int width, height; + int bytes_per_scanline; +} ImageTexture; + struct Texture { TextureType type; union { SolidColor solid_color; CheckerTexture checker; PerlinNoiseTexture noise; + ImageTexture image; }; }; @@ -45,14 +53,8 @@ Texture *texture_create_checker_solid_color(Color odd, Color even, double size, Arena *arena); Texture *texture_create_perlin_noise(double scale, int point_count, Arena *arena); +Texture *texture_create_image(const char *filename, Arena *arena); Color texture_value(const Texture *texture, double u, double v, Point3 p); -Color solid_color_value(const SolidColor *solid_color); - -Color checker_value(const CheckerTexture *checker, double u, double v, - Point3 p); - -Color perlin_value(const PerlinNoiseTexture *perlin, Point3 p); - #endif /* INCLUDED_TEXTURE_H */