From 58735a2813f99e2d8ec8c0f382f7b91e16205ce0 Mon Sep 17 00:00:00 2001 From: leejet <31925346+leejet@users.noreply.github.com> Date: Wed, 16 Aug 2023 01:48:07 +0800 Subject: [PATCH] feat: add img2img mode (#5) --- CMakeLists.txt | 2 +- README.md | 24 +- assets/img2img_output.png | Bin 0 -> 601031 bytes main.cpp | 119 +- stable-diffusion.cpp | 552 ++- stable-diffusion.h | 14 +- stb_image.h | 7987 +++++++++++++++++++++++++++++++++++++ 7 files changed, 8658 insertions(+), 40 deletions(-) create mode 100644 assets/img2img_output.png create mode 100644 stb_image.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3557b8c..158eeed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ set(SD_TARGET sd) add_subdirectory(ggml) add_library(${SD_LIB} stable-diffusion.h stable-diffusion.cpp) -add_executable(${SD_TARGET} main.cpp stb_image_write.h) +add_executable(${SD_TARGET} main.cpp stb_image.h stb_image_write.h) target_link_libraries(${SD_LIB} PUBLIC ggml) target_link_libraries(${SD_TARGET} ${SD_LIB}) diff --git a/README.md b/README.md index a2b02b5..dfc146d 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Inference of [Stable Diffusion](https://github.com/CompVis/stable-diffusion) in - 4-bit, 5-bit and 8-bit integer quantization support - Accelerated memory-efficient CPU inference - AVX, AVX2 and AVX512 support for x86 architectures -- Original `txt2img` mode +- Original `txt2img` and `img2img` mode - Negative prompt - Sampling method - `Euler A` @@ -24,7 +24,6 @@ Inference of [Stable Diffusion](https://github.com/CompVis/stable-diffusion) in ### TODO -- [ ] Original `img2img` mode - [ ] More sampling methods - [ ] GPU support - [ ] Make inference faster @@ -97,13 +96,17 @@ usage: ./sd [arguments] arguments: -h, --help show this help message and exit + -M, --mode [txt2img or img2img] generation mode (default: txt2img) -t, --threads N number of threads to use during computation (default: -1). - If threads <= 0, then threads will be set to the number of CPU cores + If threads <= 0, then threads will be set to the number of CPU physical cores -m, --model [MODEL] path to model + -i, --init-img [IMAGE] path to the input image, required by img2img -o, --output OUTPUT path to write result image to (default: .\output.png) -p, --prompt [PROMPT] the prompt to render -n, --negative-prompt PROMPT the negative prompt (default: "") --cfg-scale SCALE unconditional guidance scale: (default: 7.0) + --strength STRENGTH strength for noising/unnoising (default: 0.75) + 1.0 corresponds to full destruction of information in init image -H, --height H image height, in pixel space (default: 512) -W, --width W image width, in pixel space (default: 512) --sample-method SAMPLE_METHOD sample method (default: "eular a") @@ -112,7 +115,7 @@ arguments: -v, --verbose print extra info ``` -For example +#### txt2img example ``` ./sd -m ../models/sd-v1-4-ggml-model-f16.bin -p "a lovely cat" @@ -124,6 +127,19 @@ Using formats of different precisions will yield results of varying quality. | ---- |---- |---- |---- |---- |---- |---- | | ![](./assets/f32.png) |![](./assets/f16.png) |![](./assets/q8_0.png) |![](./assets/q5_0.png) |![](./assets/q5_1.png) |![](./assets/q4_0.png) |![](./assets/q4_1.png) | +#### img2img example + +- `./output.png` is the image generated from the above txt2img pipeline + + +``` +./sd --mode img2img -m ../models/sd-v1-4-ggml-model-f16.bin -p "cat with blue eyes" -i ./output.png -o ./img2img_output.png --strength 0.4 +``` + +

+ +

+ ## Memory/Disk Requirements | precision | f32 | f16 |q8_0 |q5_0 |q5_1 |q4_0 |q4_1 | diff --git a/assets/img2img_output.png b/assets/img2img_output.png new file mode 100644 index 0000000000000000000000000000000000000000..80579a184f1597d8eea1df05e5b8e94c67f2a907 GIT binary patch literal 601031 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
(SDt4+>O!da~$(?QbfwnNIhV6Gn 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 X^{*A#y?m)J*U^ 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

G4EE%}+H=sE@VPO6Hg_wQt6^}}^A|3QUdBDQug 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 z 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%0AJe~x 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 z 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 literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index 5622482..8f9d1e8 100644 --- a/main.cpp +++ b/main.cpp @@ -8,13 +8,16 @@ #include "stable-diffusion.h" +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" + #define STB_IMAGE_WRITE_IMPLEMENTATION #define STB_IMAGE_WRITE_STATIC #include "stb_image_write.h" #if defined(__APPLE__) && defined(__MACH__) -#include #include +#include #endif #if !defined(_WIN32) @@ -22,6 +25,9 @@ #include #endif +#define TXT2IMG "txt2img" +#define IMG2IMG "img2img" + // get_num_physical_cores is copy from // https://github.com/ggerganov/llama.cpp/blob/master/examples/common.cpp // LICENSE: https://github.com/ggerganov/llama.cpp/blob/master/LICENSE @@ -63,8 +69,10 @@ int32_t get_num_physical_cores() { struct Option { int n_threads = -1; + std::string mode = TXT2IMG; std::string model_path; std::string output_path = "output.png"; + std::string init_img; std::string prompt; std::string negative_prompt; float cfg_scale = 7.0f; @@ -72,14 +80,17 @@ struct Option { int h = 512; SampleMethod sample_method = EULAR_A; int sample_steps = 20; + float strength = 0.75f; int seed = 42; bool verbose = false; void print() { printf("Option: \n"); printf(" n_threads: %d\n", n_threads); + printf(" mode: %s\n", mode.c_str()); printf(" model_path: %s\n", model_path.c_str()); printf(" output_path: %s\n", output_path.c_str()); + printf(" init_img: %s\n", init_img.c_str()); printf(" prompt: %s\n", prompt.c_str()); printf(" negative_prompt: %s\n", negative_prompt.c_str()); printf(" cfg_scale: %.2f\n", cfg_scale); @@ -87,6 +98,7 @@ struct Option { printf(" height: %d\n", h); printf(" sample_method: %s\n", "eular a"); printf(" sample_steps: %d\n", sample_steps); + printf(" strength: %.2f\n", strength); printf(" seed: %d\n", seed); } }; @@ -96,13 +108,17 @@ void print_usage(int argc, const char* argv[]) { printf("\n"); printf("arguments:\n"); printf(" -h, --help show this help message and exit\n"); + printf(" -M, --mode [txt2img or img2img] generation mode (default: txt2img)\n"); printf(" -t, --threads N number of threads to use during computation (default: -1).\n"); printf(" If threads <= 0, then threads will be set to the number of CPU physical cores\n"); printf(" -m, --model [MODEL] path to model\n"); + printf(" -i, --init-img [IMAGE] path to the input image, required by img2img\n"); printf(" -o, --output OUTPUT path to write result image to (default: .\\output.png)\n"); printf(" -p, --prompt [PROMPT] the prompt to render\n"); printf(" -n, --negative-prompt PROMPT the negative prompt (default: \"\")\n"); printf(" --cfg-scale SCALE unconditional guidance scale: (default: 7.0)\n"); + printf(" --strength STRENGTH strength for noising/unnoising (default: 0.75)\n"); + printf(" 1.0 corresponds to full destruction of information in init image\n"); printf(" -H, --height H image height, in pixel space (default: 512)\n"); printf(" -W, --width W image width, in pixel space (default: 512)\n"); printf(" --sample-method SAMPLE_METHOD sample method (default: \"eular a\")\n"); @@ -123,12 +139,25 @@ void parse_args(int argc, const char* argv[], Option* opt) { break; } opt->n_threads = std::stoi(argv[i]); + } else if (arg == "-M" || arg == "--mode") { + if (++i >= argc) { + invalid_arg = true; + break; + } + opt->mode = argv[i]; + } else if (arg == "-m" || arg == "--model") { if (++i >= argc) { invalid_arg = true; break; } opt->model_path = argv[i]; + } else if (arg == "-i" || arg == "--init-img") { + if (++i >= argc) { + invalid_arg = true; + break; + } + opt->init_img = argv[i]; } else if (arg == "-o" || arg == "--output") { if (++i >= argc) { invalid_arg = true; @@ -153,6 +182,12 @@ void parse_args(int argc, const char* argv[], Option* opt) { break; } opt->cfg_scale = std::stof(argv[i]); + } else if (arg == "--strength") { + if (++i >= argc) { + invalid_arg = true; + break; + } + opt->strength = std::stof(argv[i]); } else if (arg == "-H" || arg == "--height") { if (++i >= argc) { invalid_arg = true; @@ -198,6 +233,12 @@ void parse_args(int argc, const char* argv[], Option* opt) { opt->n_threads = get_num_physical_cores(); } + if (opt->mode != TXT2IMG && opt->mode != IMG2IMG) { + fprintf(stderr, "error: invalid mode %s, must be one of ['%s', '%s']\n", + opt->mode.c_str(), TXT2IMG, IMG2IMG); + exit(1); + } + if (opt->prompt.length() == 0) { fprintf(stderr, "error: the following arguments are required: prompt\n"); print_usage(argc, argv); @@ -210,6 +251,12 @@ void parse_args(int argc, const char* argv[], Option* opt) { exit(1); } + if (opt->mode == IMG2IMG && opt->init_img.length() == 0) { + fprintf(stderr, "error: when using the img2img mode, the following arguments are required: init-img\n"); + print_usage(argc, argv); + exit(1); + } + if (opt->output_path.length() == 0) { fprintf(stderr, "error: the following arguments are required: output_path\n"); print_usage(argc, argv); @@ -230,6 +277,11 @@ void parse_args(int argc, const char* argv[], Option* opt) { fprintf(stderr, "error: the sample_steps must be greater than 0\n"); exit(1); } + + if (opt->strength < 0.f || opt->strength > 1.f) { + fprintf(stderr, "error: can only work with strength in [0.0, 1.0]\n"); + exit(1); + } } int main(int argc, const char* argv[]) { @@ -242,19 +294,66 @@ int main(int argc, const char* argv[]) { set_sd_log_level(SDLogLevel::DEBUG); } - StableDiffusion sd(opt.n_threads); + bool vae_decode_only = true; + std::vector init_img; + if (opt.mode == IMG2IMG) { + vae_decode_only = false; + + int c = 0; + unsigned char* img_data = stbi_load(opt.init_img.c_str(), &opt.w, &opt.h, &c, 3); + if (img_data == NULL) { + fprintf(stderr, "load image from '%s' failed\n", opt.init_img.c_str()); + return 1; + } + if (c != 3) { + fprintf(stderr, "input image must be a 3 channels RGB image, but got %d channels\n", c); + free(img_data); + return 1; + } + if (opt.w <= 0 || opt.w % 32 != 0) { + fprintf(stderr, "error: the width of image must be a multiple of 32\n"); + free(img_data); + return 1; + } + if (opt.h <= 0 || opt.h % 32 != 0) { + fprintf(stderr, "error: the height of image must be a multiple of 32\n"); + free(img_data); + return 1; + } + init_img.assign(img_data, img_data + (opt.w * opt.h * c)); + } + StableDiffusion sd(opt.n_threads, vae_decode_only); if (!sd.load_from_file(opt.model_path)) { return 1; } - std::vector img = sd.txt2img(opt.prompt, - opt.negative_prompt, - opt.cfg_scale, - opt.w, - opt.h, - opt.sample_method, - opt.sample_steps, - opt.seed); + std::vector img; + if (opt.mode == TXT2IMG) { + img = sd.txt2img(opt.prompt, + opt.negative_prompt, + opt.cfg_scale, + opt.w, + opt.h, + opt.sample_method, + opt.sample_steps, + opt.seed); + } else { + img = sd.img2img(init_img, + opt.prompt, + opt.negative_prompt, + opt.cfg_scale, + opt.w, + opt.h, + opt.sample_method, + opt.sample_steps, + opt.strength, + opt.seed); + } + + if (img.size() == 0) { + fprintf(stderr, "generate failed\n"); + return 1; + } stbi_write_png(opt.output_path.c_str(), opt.w, opt.h, 3, img.data(), 0); printf("save result image to '%s'\n", opt.output_path.c_str()); diff --git a/stable-diffusion.cpp b/stable-diffusion.cpp index c0f9db7..5820a63 100644 --- a/stable-diffusion.cpp +++ b/stable-diffusion.cpp @@ -1,7 +1,9 @@ #include #include +#include #include #include +#include #include #include #include @@ -10,8 +12,6 @@ #include #include #include -#include -#include #include "ggml/ggml.h" #include "stable-diffusion.h" @@ -128,7 +128,7 @@ void ggml_tensor_set_f32(struct ggml_tensor* tensor, float value, int l, int k = *(float*)((char*)(tensor->data) + i * tensor->nb[3] + j * tensor->nb[2] + k * tensor->nb[1] + l * tensor->nb[0]) = value; } -float ggml_tensor_get_f32(ggml_tensor* tensor, int l, int k = 0, int j = 0, int i = 0) { +float ggml_tensor_get_f32(const ggml_tensor* tensor, int l, int k = 0, int j = 0, int i = 0) { GGML_ASSERT(tensor->nb[0] == sizeof(float)); return *(float*)((char*)(tensor->data) + i * tensor->nb[3] + j * tensor->nb[2] + k * tensor->nb[1] + l * tensor->nb[0]); } @@ -213,7 +213,7 @@ std::vector ggml_to_image_vec(struct ggml_tensor* t) { int64_t h = t->ne[1]; int64_t c = t->ne[2]; std::vector vec; - vec.reserve(w * h * c); + vec.resize(w * h * c); uint8_t* data = (uint8_t*)vec.data(); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { @@ -233,6 +233,24 @@ std::vector ggml_to_image_vec(struct ggml_tensor* t) { return vec; } +void image_vec_to_ggml(const std::vector& vec, + struct ggml_tensor* t) { + int64_t w = t->ne[0]; + int64_t h = t->ne[1]; + int64_t c = t->ne[2]; + uint8_t* data = (uint8_t*)vec.data(); + for (int i = 0; i < h; i++) { + for (int j = 0; j < w; j++) { + for (int k = 0; k < c; k++) { + float value = *(data + i * w * c + j * c + k); + value = value / 255.f; + value = 2 * value - 1; + ggml_tensor_set_f32(t, value, j, i, k); + } + } + } +} + /*================================================== CLIPTokenizer ===================================================*/ const std::string UNK_TOKEN = "<|endoftext|>"; @@ -1139,6 +1157,8 @@ struct DownSample { struct ggml_tensor* op_w; // [out_channels, channels, 3, 3] struct ggml_tensor* op_b; // [out_channels,] + bool vae_downsample = false; + size_t compute_params_mem_size(ggml_type wtype) { double mem_size = 0; mem_size += out_channels * channels * 3 * 3 * ggml_type_sizef(GGML_TYPE_F16); // op_w @@ -1153,14 +1173,51 @@ struct DownSample { } void map_by_name(std::map& tensors, const std::string prefix) { - tensors[prefix + "op.weight"] = op_w; - tensors[prefix + "op.bias"] = op_b; + if (vae_downsample) { + tensors[prefix + "conv.weight"] = op_w; + tensors[prefix + "conv.bias"] = op_b; + } else { + tensors[prefix + "op.weight"] = op_w; + tensors[prefix + "op.bias"] = op_b; + } + } + + static void asymmetric_pad(struct ggml_tensor* dst, const struct ggml_tensor* a, const struct ggml_tensor* b) { + assert(sizeof(dst->nb[0]) == sizeof(float)); + assert(sizeof(a->nb[0]) == sizeof(float)); + assert(sizeof(b->nb[0]) == sizeof(float)); + float value = 0; + + for (int i = 0; i < dst->ne[3]; i++) { + for (int j = 0; j < dst->ne[2]; j++) { + for (int k = 0; k < dst->ne[1]; k++) { + for (int l = 0; l < dst->ne[0]; l++) { + if (k == dst->ne[1] - 1 || l == dst->ne[0] - 1) { + value = 0; + } else { + value = ggml_tensor_get_f32(b, l, k, j, i); + } + // printf("%d %d %d %d -> %f\n", i, j, k, l, value); + ggml_tensor_set_f32(dst, value, l, k, j, i); + } + } + } + } } struct ggml_tensor* forward(struct ggml_context* ctx, struct ggml_tensor* x) { // x: [N, channels, h, w] - x = ggml_conv_2d(ctx, op_w, x, 2, 2, 1, 1, 1, 1); + if (vae_downsample) { + bool dynamic = ggml_get_dynamic(ctx); + ggml_set_dynamic(ctx, false); + auto pad_x = ggml_new_tensor_4d(ctx, x->type, x->ne[0] + 1, x->ne[1] + 1, x->ne[2], x->ne[3]); + ggml_set_dynamic(ctx, dynamic); + x = ggml_map_custom2_inplace_f32(ctx, pad_x, x, asymmetric_pad); + x = ggml_conv_2d(ctx, op_w, x, 2, 2, 0, 0, 1, 1); + } else { + x = ggml_conv_2d(ctx, op_w, x, 2, 2, 1, 1, 1, 1); + } x = ggml_add(ctx, x, ggml_repeat(ctx, @@ -1861,6 +1918,193 @@ struct AttnBlock { } }; +// ldm.modules.diffusionmodules.model.Encoder +struct Encoder { + int embed_dim = 4; + int ch = 128; + int z_channels = 4; + int in_channels = 3; + int num_res_blocks = 2; + int ch_mult[4] = {1, 2, 4, 4}; + + struct ggml_tensor* conv_in_w; // [ch, in_channels, 3, 3] + struct ggml_tensor* conv_in_b; // [ch, ] + + ResnetBlock down_blocks[4][2]; + DownSample down_samples[3]; + + struct + { + ResnetBlock block_1; + AttnBlock attn_1; + ResnetBlock block_2; + } mid; + + // block_in = ch * ch_mult[len_mults - 1] + struct ggml_tensor* norm_out_w; // [block_in, ] + struct ggml_tensor* norm_out_b; // [block_in, ] + + struct ggml_tensor* conv_out_w; // [embed_dim*2, block_in, 3, 3] + struct ggml_tensor* conv_out_b; // [embed_dim*2, ] + + Encoder() { + int len_mults = sizeof(ch_mult) / sizeof(int); + + int block_in = 1; + for (int i = 0; i < len_mults; i++) { + if (i == 0) { + block_in = ch; + } else { + block_in = ch * ch_mult[i - 1]; + } + int block_out = ch * ch_mult[i]; + for (int j = 0; j < num_res_blocks; j++) { + down_blocks[i][j].in_channels = block_in; + down_blocks[i][j].out_channels = block_out; + block_in = block_out; + } + if (i != len_mults - 1) { + down_samples[i].channels = block_in; + down_samples[i].out_channels = block_in; + down_samples[i].vae_downsample = true; + } + } + + mid.block_1.in_channels = block_in; + mid.block_1.out_channels = block_in; + mid.attn_1.in_channels = block_in; + mid.block_2.in_channels = block_in; + mid.block_2.out_channels = block_in; + } + + size_t compute_params_mem_size(ggml_type wtype) { + double mem_size = 0; + int len_mults = sizeof(ch_mult) / sizeof(int); + int block_in = ch * ch_mult[len_mults - 1]; + + mem_size += ch * in_channels * 3 * 3 * ggml_type_sizef(GGML_TYPE_F16); // conv_in_w + mem_size += ch * ggml_type_sizef(GGML_TYPE_F32); // conv_in_b + + mem_size += 2 * block_in * ggml_type_sizef(GGML_TYPE_F32); // norm_out_w/b + + mem_size += z_channels * 2 * block_in * 3 * 3 * ggml_type_sizef(GGML_TYPE_F16); // conv_out_w + mem_size += z_channels * 2 * ggml_type_sizef(GGML_TYPE_F32); // conv_out_b + + mem_size += 6 * ggml_tensor_overhead(); // object overhead + + mem_size += mid.block_1.compute_params_mem_size(wtype); + mem_size += mid.attn_1.compute_params_mem_size(wtype); + mem_size += mid.block_2.compute_params_mem_size(wtype); + + for (int i = len_mults - 1; i >= 0; i--) { + for (int j = 0; j < num_res_blocks + 1; j++) { + mem_size += down_blocks[i][j].compute_params_mem_size(wtype); + } + if (i != 0) { + mem_size += down_samples[i - 1].compute_params_mem_size(wtype); + } + } + + return static_cast(mem_size); + } + + void init_params(struct ggml_context* ctx, ggml_type wtype) { + int len_mults = sizeof(ch_mult) / sizeof(int); + int block_in = ch * ch_mult[len_mults - 1]; + + conv_in_w = ggml_new_tensor_4d(ctx, GGML_TYPE_F16, 3, 3, in_channels, ch); + conv_in_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, ch); + + norm_out_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, block_in); + norm_out_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, block_in); + + conv_out_w = ggml_new_tensor_4d(ctx, GGML_TYPE_F16, 3, 3, block_in, z_channels * 2); + conv_out_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, z_channels * 2); + + mid.block_1.init_params(ctx, wtype); + mid.attn_1.init_params(ctx, wtype); + mid.block_2.init_params(ctx, wtype); + + for (int i = 0; i < len_mults; i++) { + for (int j = 0; j < num_res_blocks; j++) { + down_blocks[i][j].init_params(ctx, wtype); + } + if (i != len_mults - 1) { + down_samples[i].init_params(ctx, wtype); + } + } + } + + void map_by_name(std::map& tensors, const std::string prefix) { + tensors[prefix + "norm_out.weight"] = norm_out_w; + tensors[prefix + "norm_out.bias"] = norm_out_b; + tensors[prefix + "conv_in.weight"] = conv_in_w; + tensors[prefix + "conv_in.bias"] = conv_in_b; + tensors[prefix + "conv_out.weight"] = conv_out_w; + tensors[prefix + "conv_out.bias"] = conv_out_b; + + mid.block_1.map_by_name(tensors, prefix + "mid.block_1."); + mid.attn_1.map_by_name(tensors, prefix + "mid.attn_1."); + mid.block_2.map_by_name(tensors, prefix + "mid.block_2."); + + int len_mults = sizeof(ch_mult) / sizeof(int); + for (int i = 0; i < len_mults; i++) { + for (int j = 0; j < num_res_blocks; j++) { + down_blocks[i][j].map_by_name(tensors, prefix + "down." + std::to_string(i) + ".block." + std::to_string(j) + "."); + } + if (i != len_mults - 1) { + down_samples[i].map_by_name(tensors, prefix + "down." + std::to_string(i) + ".downsample."); + } + } + } + + struct ggml_tensor* forward(struct ggml_context* ctx, struct ggml_tensor* x) { + // x: [N, in_channels, h, w] + + // conv_in + auto h = ggml_conv_2d(ctx, conv_in_w, x, 1, 1, 1, 1, 1, 1); + h = ggml_add(ctx, + h, + ggml_repeat(ctx, + ggml_reshape_4d(ctx, conv_in_b, 1, 1, conv_in_b->ne[0], 1), + h)); // [N, ch, h, w] + int len_mults = sizeof(ch_mult) / sizeof(int); + for (int i = 0; i < len_mults; i++) { + for (int j = 0; j < num_res_blocks; j++) { + h = down_blocks[i][j].forward(ctx, h); + } + if (i != len_mults - 1) { + h = down_samples[i].forward(ctx, h); + } + } + + h = mid.block_1.forward(ctx, h); + h = mid.attn_1.forward(ctx, h); + h = mid.block_2.forward(ctx, h); // [N, block_in, h, w] + + // group norm 32 + h = ggml_group_norm(ctx, h); + h = ggml_add(ctx, + ggml_mul(ctx, ggml_repeat(ctx, ggml_reshape_4d(ctx, norm_out_w, 1, 1, norm_out_w->ne[0], 1), h), h), + ggml_repeat(ctx, ggml_reshape_4d(ctx, norm_out_b, 1, 1, norm_out_b->ne[0], 1), h)); + + // silu + // silu + h = ggml_silu_inplace(ctx, h); + + // conv_out + h = ggml_conv_2d(ctx, conv_out_w, h, 1, 1, 1, 1, 1, 1); + h = ggml_add(ctx, + h, + ggml_repeat(ctx, + ggml_reshape_4d(ctx, conv_out_b, 1, 1, conv_out_b->ne[0], 1), + h)); // [N, z_channels*2, h, w] + + return h; + } +}; + +// ldm.modules.diffusionmodules.model.Decoder struct Decoder { int embed_dim = 4; int ch = 128; @@ -2044,6 +2288,7 @@ struct Decoder { // ldm.models.autoencoder.AutoencoderKL struct AutoEncoderKL { + bool decode_only = true; int embed_dim = 4; struct { @@ -2056,14 +2301,46 @@ struct AutoEncoderKL { int num_res_blocks = 2; } dd_config; + struct ggml_tensor* quant_conv_w; // [2*embed_dim, 2*z_channels, 1, 1] + struct ggml_tensor* quant_conv_b; // [2*embed_dim, ] + struct ggml_tensor* post_quant_conv_w; // [z_channels, embed_dim, 1, 1] struct ggml_tensor* post_quant_conv_b; // [z_channels, ] + Encoder encoder; Decoder decoder; + AutoEncoderKL(bool decode_only = false) + : decode_only(decode_only) { + assert(sizeof(dd_config.ch_mult) == sizeof(encoder.ch_mult)); + assert(sizeof(dd_config.ch_mult) == sizeof(decoder.ch_mult)); + + encoder.embed_dim = embed_dim; + decoder.embed_dim = embed_dim; + encoder.ch = dd_config.ch; + decoder.ch = dd_config.ch; + encoder.z_channels = dd_config.z_channels; + decoder.z_channels = dd_config.z_channels; + encoder.in_channels = dd_config.in_channels; + decoder.out_ch = dd_config.out_ch; + encoder.num_res_blocks = dd_config.num_res_blocks; + + int len_mults = sizeof(dd_config.ch_mult) / sizeof(int); + for (int i = 0; i < len_mults; i++) { + encoder.ch_mult[i] = dd_config.ch_mult[i]; + decoder.ch_mult[i] = dd_config.ch_mult[i]; + } + } + size_t compute_params_mem_size(ggml_type wtype) { double mem_size = 0; + if (!decode_only) { + mem_size += 2 * embed_dim * 2 * dd_config.z_channels * 1 * 1 * ggml_type_sizef(GGML_TYPE_F16); // quant_conv_w + mem_size += 2 * embed_dim * ggml_type_sizef(GGML_TYPE_F32); // quant_conv_b + mem_size += encoder.compute_params_mem_size(wtype); + } + mem_size += dd_config.z_channels * embed_dim * 1 * 1 * ggml_type_sizef(GGML_TYPE_F16); // post_quant_conv_w mem_size += dd_config.z_channels * ggml_type_sizef(GGML_TYPE_F32); // post_quant_conv_b @@ -2072,15 +2349,26 @@ struct AutoEncoderKL { } void init_params(struct ggml_context* ctx, ggml_type wtype) { + if (!decode_only) { + quant_conv_w = ggml_new_tensor_4d(ctx, GGML_TYPE_F16, 1, 1, 2 * dd_config.z_channels, 2 * embed_dim); + quant_conv_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 2 * embed_dim); + encoder.init_params(ctx, wtype); + } + post_quant_conv_w = ggml_new_tensor_4d(ctx, GGML_TYPE_F16, 1, 1, embed_dim, dd_config.z_channels); post_quant_conv_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, dd_config.z_channels); decoder.init_params(ctx, wtype); } void map_by_name(std::map& tensors, const std::string prefix) { + if (!decode_only) { + tensors[prefix + "quant_conv.weight"] = quant_conv_w; + tensors[prefix + "quant_conv.bias"] = quant_conv_b; + encoder.map_by_name(tensors, prefix + "encoder."); + } + tensors[prefix + "post_quant_conv.weight"] = post_quant_conv_w; tensors[prefix + "post_quant_conv.bias"] = post_quant_conv_b; - decoder.map_by_name(tensors, prefix + "decoder."); } @@ -2097,6 +2385,19 @@ struct AutoEncoderKL { h = decoder.forward(ctx, h); return h; } + + struct ggml_tensor* encode(struct ggml_context* ctx, struct ggml_tensor* x) { + // x: [N, in_channels, h, w] + auto h = encoder.forward(ctx, x); // [N, 2*z_channels, h/8, w/8] + // quant_conv + h = ggml_conv_2d(ctx, quant_conv_w, h, 1, 1, 0, 0, 1, 1); + h = ggml_add(ctx, + h, + ggml_repeat(ctx, + ggml_reshape_4d(ctx, quant_conv_b, 1, 1, quant_conv_b->ne[0], 1), + h)); // [N, 2*embed_dim, h/8, w/8] + return h; + } }; /*================================================= CompVisDenoiser ==================================================*/ @@ -2167,6 +2468,7 @@ class StableDiffusionGGML { public: ggml_context* params_ctx = NULL; bool dynamic = true; + bool vae_decode_only = true; int32_t ftype = 1; int n_threads = -1; float scale_factor = 0.18215f; @@ -2180,6 +2482,13 @@ class StableDiffusionGGML { std::map tensors; + StableDiffusionGGML() = default; + + StableDiffusionGGML(int n_threads, bool vae_decode_only) + : n_threads(n_threads), vae_decode_only(vae_decode_only) { + first_stage_model.decode_only = vae_decode_only; + } + ~StableDiffusionGGML() { if (params_ctx != NULL) { ggml_free(params_ctx); @@ -2339,6 +2648,11 @@ class StableDiffusionGGML { } else { if (name.find("quant") == std::string::npos && name.find("first_stage_model.encoder.") == std::string::npos) { LOG_WARN("unknown tensor '%s' in model file", name.data()); + } else { + if (!vae_decode_only) { + LOG_WARN("unknown tensor '%s' in model file", name.data()); + return false; + } } file.ignore(nelements * ggml_type_size((ggml_type)ttype)); continue; @@ -2472,14 +2786,14 @@ class StableDiffusionGGML { copy_ggml_tensor(result, hidden_states); // print_ggml_tensor(result); - size_t rt_size = ctx_size + ggml_max_dynamic_size(); + size_t rt_size = ctx_size + ggml_curr_max_dynamic_size(); if (rt_size > max_rt_size) { max_rt_size = rt_size; } LOG_INFO("condition graph use %.2fMB of memory: static %.2fMB, dynamic = %.2fMB", rt_size * 1.0f / 1024 / 1024, ctx_size * 1.0f / 1024 / 1024, - ggml_max_dynamic_size() * 1.0f / 1024 / 1024); + ggml_curr_max_dynamic_size() * 1.0f / 1024 / 1024); LOG_DEBUG("%zu bytes of dynamic memory has not been released yet", ggml_dynamic_size()); ggml_free(ctx); @@ -2493,7 +2807,8 @@ class StableDiffusionGGML { ggml_tensor* uc, float cfg_scale, SampleMethod method, - int steps) { + const std::vector& sigmas) { + size_t steps = sigmas.size() - 1; // x_t = load_tensor_from_file(res_ctx, "./rand0.bin"); // print_ggml_tensor(x_t); struct ggml_tensor* x_out = ggml_dup_tensor(res_ctx, x_t); @@ -2578,8 +2893,6 @@ class StableDiffusionGGML { struct ggml_tensor* d = ggml_dup_tensor(ctx, x_out); ggml_set_dynamic(ctx, params.dynamic); - std::vector sigmas = denoiser.get_sigmas(steps); - // x_out = x_out * sigmas[0] { float* vec = (float*)x_out->data; @@ -2675,20 +2988,20 @@ class StableDiffusionGGML { int64_t t1 = ggml_time_ms(); LOG_INFO("step %d sampling completed, taking %.2fs", i + 1, (t1 - t0) * 1.0f / 1000); LOG_DEBUG("diffusion graph use %.2fMB of memory: static %.2fMB, dynamic = %.2fMB", - (ctx_size + ggml_max_dynamic_size()) * 1.0f / 1024 / 1024, + (ctx_size + ggml_curr_max_dynamic_size()) * 1.0f / 1024 / 1024, ctx_size * 1.0f / 1024 / 1024, - ggml_max_dynamic_size() * 1.0f / 1024 / 1024); + ggml_curr_max_dynamic_size() * 1.0f / 1024 / 1024); LOG_DEBUG("%zu bytes of dynamic memory has not been released yet", ggml_dynamic_size()); } } - size_t rt_size = ctx_size + ggml_max_dynamic_size(); + size_t rt_size = ctx_size + ggml_curr_max_dynamic_size(); if (rt_size > max_rt_size) { max_rt_size = rt_size; } LOG_INFO("diffusion graph use %.2fMB of memory: static %.2fMB, dynamic = %.2fMB", rt_size * 1.0f / 1024 / 1024, ctx_size * 1.0f / 1024 / 1024, - ggml_max_dynamic_size() * 1.0f / 1024 / 1024); + ggml_curr_max_dynamic_size() * 1.0f / 1024 / 1024); LOG_DEBUG("%zu bytes of dynamic memory has not been released yet", ggml_dynamic_size()); ggml_free(ctx); @@ -2696,6 +3009,113 @@ class StableDiffusionGGML { return x_out; } + ggml_tensor* encode_first_stage(ggml_context* res_ctx, ggml_tensor* x) { + int64_t W = x->ne[0]; + int64_t H = x->ne[1]; + struct ggml_tensor* result = NULL; + + // calculate the amount of memory required + size_t ctx_size = 1 * 1024 * 1024; + { + struct ggml_init_params params; + params.mem_size = ctx_size; + params.mem_buffer = NULL; + params.no_alloc = true; + params.dynamic = dynamic; + + struct ggml_context* ctx = ggml_init(params); + if (!ctx) { + LOG_ERROR("ggml_init() failed"); + return NULL; + } + + struct ggml_tensor* moments = first_stage_model.encode(ctx, x); + ctx_size += ggml_used_mem(ctx) + ggml_used_mem_of_data(ctx); + + struct ggml_cgraph vae_graph = ggml_build_forward(moments); + struct ggml_cplan cplan = ggml_graph_plan(&vae_graph, n_threads); + + ctx_size += cplan.work_size; + LOG_DEBUG("vae context need %.2fMB static memory, with work_size needing %.2fMB", + ctx_size * 1.0f / 1024 / 1024, + cplan.work_size * 1.0f / 1024 / 1024); + + ggml_free(ctx); + } + + { + struct ggml_init_params params; + params.mem_size = ctx_size; + params.mem_buffer = NULL; + params.no_alloc = false; + params.dynamic = dynamic; + + struct ggml_context* ctx = ggml_init(params); + if (!ctx) { + LOG_ERROR("ggml_init() failed"); + return NULL; + } + + struct ggml_tensor* moments = first_stage_model.encode(ctx, x); + struct ggml_cgraph vae_graph = ggml_build_forward(moments); + + int64_t t0 = ggml_time_ms(); + ggml_graph_compute_with_ctx(ctx, &vae_graph, n_threads); + int64_t t1 = ggml_time_ms(); + LOG_DEBUG("computing vae graph completed, taking %.2fs", (t1 - t0) * 1.0f / 1000); + + result = ggml_dup_tensor(res_ctx, moments); + copy_ggml_tensor(result, moments); + + size_t rt_size = ctx_size + ggml_curr_max_dynamic_size(); + if (rt_size > max_rt_size) { + max_rt_size = rt_size; + } + LOG_INFO("vae graph use %.2fMB of memory: static %.2fMB, dynamic = %.2fMB", + rt_size * 1.0f / 1024 / 1024, + ctx_size * 1.0f / 1024 / 1024, + ggml_curr_max_dynamic_size() * 1.0f / 1024 / 1024); + LOG_DEBUG("%zu bytes of dynamic memory has not been released yet", ggml_dynamic_size()); + + ggml_free(ctx); + } + + return result; + } + + // ldm.models.diffusion.ddpm.LatentDiffusion.get_first_stage_encoding + ggml_tensor* get_first_stage_encoding(ggml_context* res_ctx, ggml_tensor* moments) { + // ldm.modules.distributions.distributions.DiagonalGaussianDistribution.sample + ggml_tensor* latent = ggml_new_tensor_4d(res_ctx, moments->type, moments->ne[0], + moments->ne[1], moments->ne[2] / 2, moments->ne[3]); + struct ggml_tensor* noise = ggml_dup_tensor(res_ctx, latent); + ggml_tensor_set_f32_randn(noise); + // noise = load_tensor_from_file(res_ctx, "noise.bin"); + { + float mean = 0; + float logvar = 0; + float value = 0; + float std_ = 0; + for (int i = 0; i < latent->ne[3]; i++) { + for (int j = 0; j < latent->ne[2]; j++) { + for (int k = 0; k < latent->ne[1]; k++) { + for (int l = 0; l < latent->ne[0]; l++) { + mean = ggml_tensor_get_f32(moments, l, k, j, i); + logvar = ggml_tensor_get_f32(moments, l, k, j + (int)latent->ne[2], i); + logvar = std::max(-30.0f, std::min(logvar, 20.0f)); + std_ = std::exp(0.5f * logvar); + value = mean + std_ * ggml_tensor_get_f32(noise, l, k, j, i); + value = value * scale_factor; + // printf("%d %d %d %d -> %f\n", i, j, k, l, value); + ggml_tensor_set_f32(latent, value, l, k, j, i); + } + } + } + } + } + return latent; + } + ggml_tensor* decode_first_stage(ggml_context* res_ctx, ggml_tensor* z) { int64_t W = z->ne[0]; int64_t H = z->ne[1]; @@ -2761,14 +3181,14 @@ class StableDiffusionGGML { result_img = ggml_dup_tensor(res_ctx, img); copy_ggml_tensor(result_img, img); - size_t rt_size = ctx_size + ggml_max_dynamic_size(); + size_t rt_size = ctx_size + ggml_curr_max_dynamic_size(); if (rt_size > max_rt_size) { max_rt_size = rt_size; } LOG_INFO("vae graph use %.2fMB of memory: static %.2fMB, dynamic = %.2fMB", rt_size * 1.0f / 1024 / 1024, ctx_size * 1.0f / 1024 / 1024, - ggml_max_dynamic_size() * 1.0f / 1024 / 1024); + ggml_curr_max_dynamic_size() * 1.0f / 1024 / 1024); LOG_DEBUG("%zu bytes of dynamic memory has not been released yet", ggml_dynamic_size()); ggml_free(ctx); @@ -2780,9 +3200,8 @@ class StableDiffusionGGML { /*================================================= StableDiffusion ==================================================*/ -StableDiffusion::StableDiffusion(int n_threads) { - sd = std::make_shared(); - sd->n_threads = n_threads; +StableDiffusion::StableDiffusion(int n_threads, bool vae_decode_only) { + sd = std::make_shared(n_threads, vae_decode_only); } bool StableDiffusion::load_from_file(const std::string& file_path) { @@ -2829,9 +3248,11 @@ std::vector StableDiffusion::txt2img(const std::string& prompt, struct ggml_tensor* x_t = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, W, H, C, 1); ggml_tensor_set_f32_randn(x_t); + std::vector sigmas = sd->denoiser.get_sigmas(sample_steps); + LOG_INFO("start sampling"); - struct ggml_tensor* x_0 = sd->sample(ctx, x_t, c, uc, cfg_scale, sample_method, sample_steps); - // struct ggml_tensor *x_0 = load_tensor_from_file(ctx, "samples_ddim.bin"); + struct ggml_tensor* x_0 = sd->sample(ctx, x_t, c, uc, cfg_scale, sample_method, sigmas); + // struct ggml_tensor* x_0 = load_tensor_from_file(ctx, "samples_ddim.bin"); // print_ggml_tensor(x_0); int64_t t2 = ggml_time_ms(); LOG_INFO("sampling completed, taking %.2fs", (t2 - t1) * 1.0f / 1000); @@ -2849,6 +3270,89 @@ std::vector StableDiffusion::txt2img(const std::string& prompt, sd->max_rt_size * 1.0f / 1024 / 1024, ggml_used_mem(sd->params_ctx) * 1.0f / 1024 / 1024); + ggml_free(ctx); + return result; +} + +std::vector StableDiffusion::img2img(const std::vector& init_img_vec, + const std::string& prompt, + const std::string& negative_prompt, + float cfg_scale, + int width, + int height, + SampleMethod sample_method, + int sample_steps, + float strength, + int seed) { + std::vector result; + if (init_img_vec.size() != width * height * 3) { + return result; + } + LOG_INFO("img2img %dx%d", width, height); + + std::vector sigmas = sd->denoiser.get_sigmas(sample_steps); + size_t t_enc = static_cast(sample_steps * strength); + LOG_INFO("target t_enc is %zu steps", t_enc); + std::vector sigma_sched; + sigma_sched.assign(sigmas.begin() + sample_steps - t_enc - 1, sigmas.end()); + + struct ggml_init_params params; + params.mem_size = static_cast(10 * 1024) * 1024; // 10M + params.mem_size += width * height * 3 * sizeof(float) * 2; + params.mem_buffer = NULL; + params.no_alloc = false; + params.dynamic = false; + struct ggml_context* ctx = ggml_init(params); + if (!ctx) { + LOG_ERROR("ggml_init() failed"); + return result; + } + + if (seed < 0) { + seed = (int)time(NULL); + } + set_random_seed(seed); + + ggml_tensor* init_img = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, width, height, 3, 1); + image_vec_to_ggml(init_img_vec, init_img); + + int64_t t0 = ggml_time_ms(); + ggml_tensor* moments = sd->encode_first_stage(ctx, init_img); + ggml_tensor* init_latent = sd->get_first_stage_encoding(ctx, moments); + // print_ggml_tensor(init_latent); + int64_t t1 = ggml_time_ms(); + LOG_INFO("encode_first_stage completed, taking %.2fs", (t1 - t0) * 1.0f / 1000); + + ggml_reset_curr_max_dynamic_size(); // reset counter + + ggml_tensor* c = sd->get_learned_condition(ctx, prompt); + struct ggml_tensor* uc = NULL; + if (cfg_scale != 1.0) { + uc = sd->get_learned_condition(ctx, negative_prompt); + } + int64_t t2 = ggml_time_ms(); + LOG_INFO("get_learned_condition completed, taking %.2fs", (t2 - t1) * 1.0f / 1000); + + LOG_INFO("start sampling"); + struct ggml_tensor* x_0 = sd->sample(ctx, init_latent, c, uc, cfg_scale, sample_method, sigma_sched); + // struct ggml_tensor *x_0 = load_tensor_from_file(ctx, "samples_ddim.bin"); + // print_ggml_tensor(x_0); + int64_t t3 = ggml_time_ms(); + LOG_INFO("sampling completed, taking %.2fs", (t3 - t2) * 1.0f / 1000); + + struct ggml_tensor* img = sd->decode_first_stage(ctx, x_0); + if (img != NULL) { + result = ggml_to_image_vec(img); + } + int64_t t4 = ggml_time_ms(); + LOG_INFO("decode_first_stage completed, taking %.2fs", (t4 - t3) * 1.0f / 1000); + LOG_INFO( + "img2img completed in %.2fs, " + "with a runtime memory usage of %.2fMB and parameter memory usage of %.2fMB", + (t4 - t0) * 1.0f / 1000, + sd->max_rt_size * 1.0f / 1024 / 1024, + ggml_used_mem(sd->params_ctx) * 1.0f / 1024 / 1024); + ggml_free(ctx); return result; diff --git a/stable-diffusion.h b/stable-diffusion.h index 84c8d80..4d15fa8 100644 --- a/stable-diffusion.h +++ b/stable-diffusion.h @@ -22,7 +22,8 @@ class StableDiffusion { std::shared_ptr sd; public: - StableDiffusion(int n_threads = -1); + StableDiffusion(int n_threads = -1, + bool vae_decode_only = false); bool load_from_file(const std::string& file_path); std::vector txt2img( const std::string& prompt, @@ -33,6 +34,17 @@ class StableDiffusion { SampleMethod sample_method, int sample_steps, int seed); + std::vector img2img( + const std::vector& init_img, + const std::string& prompt, + const std::string& negative_prompt, + float cfg_scale, + int width, + int height, + SampleMethod sample_method, + int sample_steps, + float strength, + int seed); }; void set_sd_log_level(SDLogLevel level); diff --git a/stb_image.h b/stb_image.h new file mode 100644 index 0000000..5e807a0 --- /dev/null +++ b/stb_image.h @@ -0,0 +1,7987 @@ +/* stb_image - v2.28 - public domain image loader - http://nothings.org/stb + no warranty implied; use at your own risk + + Do this: + #define STB_IMAGE_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define STB_IMAGE_IMPLEMENTATION + #include "stb_image.h" + + You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. + And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free + + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib) + PNG 1/2/4/8/16-bit-per-channel + + TGA (not sure what subset, if a subset) + BMP non-1bpp, non-RLE + PSD (composited view only, no extra channels, 8/16 bit-per-channel) + + GIF (*comp always reports as 4-channel) + HDR (radiance rgbE format) + PIC (Softimage PIC) + PNM (PPM and PGM binary only) + + Animated GIF still needs a proper API, but here's one way to do it: + http://gist.github.com/urraka/685d9a6340b26b830d49 + + - decode from memory or through FILE (define STBI_NO_STDIO to remove code) + - decode from arbitrary I/O callbacks + - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) + + Full documentation under "DOCUMENTATION" below. + + +LICENSE + + See end of file for license information. + +RECENT REVISION HISTORY: + + 2.28 (2023-01-29) many error fixes, security errors, just tons of stuff + 2.27 (2021-07-11) document stbi_info better, 16-bit PNM support, bug fixes + 2.26 (2020-07-13) many minor fixes + 2.25 (2020-02-02) fix warnings + 2.24 (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically + 2.23 (2019-08-11) fix clang static analysis warning + 2.22 (2019-03-04) gif fixes, fix warnings + 2.21 (2019-02-25) fix typo in comment + 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) bugfix, 1-bit BMP, 16-bitness query, fix warnings + 2.16 (2017-07-23) all functions have 16-bit variants; optimizations; bugfixes + 2.15 (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-12-04) experimental 16-bit API, only for PNG so far; fixes + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 + RGB-format JPEG; remove white matting in PSD; + allocate large structures on the stack; + correct channel count for PNG & BMP + 2.10 (2016-01-22) avoid warning introduced in 2.09 + 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED + + See end of file for full revision history. + + + ============================ Contributors ========================= + + Image formats Extensions, features + Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) + Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) + Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) + Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) + Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) + Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) + Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) + github:urraka (animated gif) Junggon Kim (PNM comments) + Christopher Forseth (animated gif) Daniel Gibson (16-bit TGA) + socks-the-fox (16-bit PNG) + Jeremy Sawicki (handle all ImageNet JPGs) + Optimizations & bugfixes Mikhail Morozov (1-bit BMP) + Fabian "ryg" Giesen Anael Seghezzi (is-16-bit query) + Arseny Kapoulkine Simon Breuss (16-bit PNM) + John-Mark Allen + Carmelo J Fdez-Aguera + + Bug & warning fixes + Marc LeBlanc David Woo Guillaume George Martins Mozeiko + Christpher Lloyd Jerry Jansson Joseph Thomson Blazej Dariusz Roszkowski + Phil Jordan Dave Moore Roy Eltham + Hayaki Saito Nathan Reed Won Chun + Luke Graham Johan Duparc Nick Verigakis the Horde3D community + Thomas Ruf Ronny Chevalier github:rlyeh + Janez Zemva John Bartholomew Michal Cichon github:romigrou + Jonathan Blow Ken Hamada Tero Hanninen github:svdijk + Eugene Golushkov Laurent Gomila Cort Stratton github:snagar + Aruelien Pocheville Sergio Gonzalez Thibault Reuille github:Zelex + Cass Everitt Ryamond Barbiero github:grim210 + Paul Du Bois Engin Manap Aldo Culquicondor github:sammyhw + Philipp Wiesemann Dale Weiler Oriol Ferrer Mesia github:phprus + Josh Tobin Neil Bickford Matthew Gregan github:poppolopoppo + Julian Raschke Gregory Mullen Christian Floisand github:darealshinji + Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 + Brad Weinberger Matvey Cherevko github:mosra + Luca Sas Alexander Veselov Zack Middleton [reserved] + Ryan C. Gordon [reserved] [reserved] + DO NOT ADD YOUR NAME HERE + + Jacko Dirks + + To add your name to the credits, pick a random blank space in the middle and fill it. + 80% of merge conflicts on stb PRs are due to people adding their name at the end + of the credits. +*/ + +#ifndef STBI_INCLUDE_STB_IMAGE_H +#define STBI_INCLUDE_STB_IMAGE_H + +// DOCUMENTATION +// +// Limitations: +// - no 12-bit-per-channel JPEG +// - no JPEGs with arithmetic coding +// - GIF always returns *comp=4 +// +// Basic usage (see HDR discussion below for HDR usage): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you said 0 +// stbi_image_free(data); +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *channels_in_file -- outputs # of image components in image file +// int desired_channels -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data, or NULL on an allocation failure or if the image is +// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'desired_channels' if desired_channels is non-zero, or +// *channels_in_file otherwise. If desired_channels is non-zero, +// *channels_in_file has the number of components that _would_ have been +// output otherwise. E.g. if you set desired_channels to 4, you will always +// get RGBA output, but you can check *channels_in_file to see if it's trivially +// opaque because e.g. there were only 3 channels in the source image. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *channels_in_file will be unchanged. The function +// stbi_failure_reason() can be queried for an extremely brief, end-user +// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS +// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. +// +// To query the width, height and component count of an image without having to +// decode the full file, you can use the stbi_info family of functions: +// +// int x,y,n,ok; +// ok = stbi_info(filename, &x, &y, &n); +// // returns ok=1 and sets x, y, n if image is a supported format, +// // 0 otherwise. +// +// Note that stb_image pervasively uses ints in its public API for sizes, +// including sizes of memory buffers. This is now part of the API and thus +// hard to change without causing breakage. As a result, the various image +// loaders all have certain limits on image size; these differ somewhat +// by format but generally boil down to either just under 2GB or just under +// 1GB. When the decoded image would be larger than this, stb_image decoding +// will fail. +// +// Additionally, stb_image will reject image files that have any of their +// dimensions set to a larger value than the configurable STBI_MAX_DIMENSIONS, +// which defaults to 2**24 = 16777216 pixels. Due to the above memory limit, +// the only way to have an image with such dimensions load correctly +// is for it to have a rather extreme aspect ratio. Either way, the +// assumption here is that such larger images are likely to be malformed +// or malicious. If you do need to load an image with individual dimensions +// larger than that, and it still fits in the overall size limit, you can +// #define STBI_MAX_DIMENSIONS on your own to be something larger. +// +// =========================================================================== +// +// UNICODE: +// +// If compiling for Windows and you wish to use Unicode filenames, compile +// with +// #define STBI_WINDOWS_UTF8 +// and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert +// Windows wchar_t filenames to utf8. +// +// =========================================================================== +// +// Philosophy +// +// stb libraries are designed with the following priorities: +// +// 1. easy to use +// 2. easy to maintain +// 3. good performance +// +// Sometimes I let "good performance" creep up in priority over "easy to maintain", +// and for best performance I may provide less-easy-to-use APIs that give higher +// performance, in addition to the easy-to-use ones. Nevertheless, it's important +// to keep in mind that from the standpoint of you, a client of this library, +// all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all. +// +// Some secondary priorities arise directly from the first two, some of which +// provide more explicit reasons why performance can't be emphasized. +// +// - Portable ("ease of use") +// - Small source code footprint ("easy to maintain") +// - No dependencies ("ease of use") +// +// =========================================================================== +// +// I/O callbacks +// +// I/O callbacks allow you to read from arbitrary sources, like packaged +// files or some other source. Data read from callbacks are processed +// through a small internal buffer (currently 128 bytes) to try to reduce +// overhead. +// +// The three functions you must define are "read" (reads some bytes of data), +// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). +// +// =========================================================================== +// +// SIMD support +// +// The JPEG decoder will try to automatically use SIMD kernels on x86 when +// supported by the compiler. For ARM Neon support, you must explicitly +// request it. +// +// (The old do-it-yourself SIMD API is no longer supported in the current +// code.) +// +// On x86, SSE2 will automatically be used when available based on a run-time +// test; if not, the generic C versions are used as a fall-back. On ARM targets, +// the typical path is to have separate builds for NEON and non-NEON devices +// (at least this is true for iOS and Android). Therefore, the NEON support is +// toggled by a build flag: define STBI_NEON to get NEON loops. +// +// If for some reason you do not want to use any of SIMD code, or if +// you have issues compiling it, you can disable it entirely by +// defining STBI_NO_SIMD. +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image supports loading HDR images in general, and currently the Radiance +// .HDR file format specifically. You can still load any file through the existing +// interface; if you attempt to load an HDR file, it will be automatically remapped +// to LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); +// +// =========================================================================== +// +// iPhone PNG support: +// +// We optionally support converting iPhone-formatted PNGs (which store +// premultiplied BGRA) back to RGB, even though they're internally encoded +// differently. To enable this conversion, call +// stbi_convert_iphone_png_to_rgb(1). +// +// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per +// pixel to remove any premultiplied alpha *only* if the image file explicitly +// says there's premultiplied data (currently only happens in iPhone images, +// and only if iPhone convert-to-rgb processing is on). +// +// =========================================================================== +// +// ADDITIONAL CONFIGURATION +// +// - You can suppress implementation of any of the decoders to reduce +// your code footprint by #defining one or more of the following +// symbols before creating the implementation. +// +// STBI_NO_JPEG +// STBI_NO_PNG +// STBI_NO_BMP +// STBI_NO_PSD +// STBI_NO_TGA +// STBI_NO_GIF +// STBI_NO_HDR +// STBI_NO_PIC +// STBI_NO_PNM (.ppm and .pgm) +// +// - You can request *only* certain decoders and suppress all other ones +// (this will be more forward-compatible, as addition of new decoders +// doesn't require you to disable them explicitly): +// +// STBI_ONLY_JPEG +// STBI_ONLY_PNG +// STBI_ONLY_BMP +// STBI_ONLY_PSD +// STBI_ONLY_TGA +// STBI_ONLY_GIF +// STBI_ONLY_HDR +// STBI_ONLY_PIC +// STBI_ONLY_PNM (.ppm and .pgm) +// +// - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still +// want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB +// +// - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greater +// than that size (in either width or height) without further processing. +// This is to let programs in the wild set an upper bound to prevent +// denial-of-service attacks on untrusted data, as one could generate a +// valid image of gigantic dimensions and force stb_image to allocate a +// huge block of memory and spend disproportionate time decoding it. By +// default this is set to (1 << 24), which is 16777216, but that's still +// very big. + +#ifndef STBI_NO_STDIO +#include +#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 + +#if defined(_MSC_VER) || defined(__SYMBIAN32__) +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 + +// returns 1 if the sum of two signed ints is valid (between -2^31 and 2^31-1 inclusive), 0 on overflow. +static int stbi__addints_valid(int a, int b) +{ + if ((a >= 0) != (b >= 0)) return 1; // a and b have different signs, so no overflow + if (a < 0 && b < 0) return a >= INT_MIN - b; // same as a + b >= INT_MIN; INT_MIN - b cannot overflow since b < 0. + return a <= INT_MAX - b; +} + +// returns 1 if the product of two signed shorts is valid, 0 on overflow. +static int stbi__mul2shorts_valid(short a, short b) +{ + if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow + if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_valid + if (b < 0) return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN + return a >= SHRT_MIN / b; +} + +// 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); + if(k >= 257) return stbi__err("bad size list","Corrupt JPEG"); + } + } + 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]; + if(c < 0 || c >= 256) // symbol id out of bounds! + return -1; + 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); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing + + 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); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing + 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); + if (j->code_bits < 1) return 0; // ran out of bits from stream, return 0s intead of continuing + 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; + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta","Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, dequant[0])) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + 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 + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); + 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; + + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta", "Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + 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 + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); + 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]; + } + if(n > 256) return stbi__err("bad DHT header","Corrupt JPEG"); // Loop over i < n would write past end of values! + 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; +} + +static int stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) +{ + // some JPEGs have junk at end, skip over it but if we find what looks + // like a valid marker, resume there + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + while (x == 255) { // might be a marker + if (stbi__at_eof(j->s)) return STBI__MARKER_none; + x = stbi__get8(j->s); + if (x != 0x00 && x != 0xff) { + // not a stuffed zero or lead-in to another marker, looks + // like an actual marker, return it + return x; + } + // stuffed zero has x=0 now which ends the loop, meaning we go + // back to regular scan loop. + // repeated 0xff keeps trying to read the next byte of the marker. + } + } + return STBI__MARKER_none; +} + +// 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 ) { + j->marker = stbi__skip_jpeg_junk_at_end(j); + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + m = stbi__get_marker(j); + if (STBI__RESTART(m)) + m = stbi__get_marker(j); + } 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"); + m = stbi__get_marker(j); + } else { + if (!stbi__process_marker(j, m)) return 1; + 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"); + memset(j, 0, sizeof(stbi__jpeg)); + 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"); + memset(j, 0, sizeof(stbi__jpeg)); + 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"); + memset(j, 0, sizeof(stbi__jpeg)); + 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; + } + if (z >= 286) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data + 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 || z >= 30) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not appear in compressed data + 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_set_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"); + } 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"); + } + // even with 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; + // non-paletted with tRNS = constant alpha. if header-scanning, we can stop now. + if (scan == STBI__SCAN_header) { ++s->img_n; return 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) { + // header scan definitely stops at first IDAT + if (pal_img_n) + s->img_n = pal_img_n; + return 1; + } + if (c.length > (1u << 30)) return stbi__err("IDAT size limit", "IDAT section larger than 2^30 bytes"); + 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) { + // accept some number of extra bytes after the header, but if the offset points either to before + // the header ends or implies a large amount of extra data, reject the file as malformed + int bytes_read_so_far = s->callback_already_read + (int)(s->img_buffer - s->img_buffer_original); + int header_limit = 1024; // max we actually read is below 256 bytes currently. + int extra_data_limit = 256*4; // what ordinarily goes here is a palette; 256 entries*4 bytes is its max size. + if (bytes_read_so_far <= 0 || bytes_read_so_far > header_limit) { + return stbi__errpuc("bad header", "Corrupt BMP"); + } + // we established that bytes_read_so_far is positive and sensible. + // the first half of this test rejects offsets that are either too small positives, or + // negative, and guarantees that info.offset >= bytes_read_so_far > 0. this in turn + // ensures the number computed in the second half of the test can't overflow. + if (info.offset < bytes_read_so_far || info.offset - bytes_read_so_far > extra_data_limit) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } else { + stbi__skip(s, info.offset - bytes_read_so_far); + } + } + + 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 == 0) || (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 == 0) || (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"); + if (!stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8))) { + STBI_FREE(out); + return stbi__errpuc("bad PNM", "PNM file truncated"); + } + + if (req_comp && req_comp != s->img_n) { + if (ri->bits_per_channel == 16) { + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, s->img_n, req_comp, s->img_x, s->img_y); + } else { + 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); + if((value > 214748364) || (value == 214748364 && *c > '7')) + return stbi__err("integer parse overflow", "Parsing an integer in the PPM header overflowed a 32-bit int"); + } + + 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 + if(*x == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + if (*y == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + 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. +------------------------------------------------------------------------------ +*/

_*xKOccZ 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∈AH|CI4skt017cx-nQYA|+Pbie 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