From 5e8d693758d15d28f9140c2f1d10eb50cc03a00e Mon Sep 17 00:00:00 2001 From: Dane Johnson Date: Sun, 17 Jan 2021 14:36:38 -0600 Subject: [PATCH] Textures and colors passed to shader via Uniforms --- CMakeLists.txt | 3 + container.png | Bin 0 -> 422829 bytes core/Ball.cpp | 16 +- core/Drawable.h | 2 + core/Material.cpp | 47 + core/Material.h | 34 + core/Mesh.cpp | 13 +- core/Mesh.h | 1 + core/Shader.cpp | 19 +- core/Shader.h | 5 + core/Vertex.cpp | 12 + core/Vertex.h | 2 + core/couch.cpp | 18 +- main.lua | 8 + scripting/couch.i | 2 + shaders/flat.frag | 19 +- shaders/flat.vert | 4 + thirdparty/CMakeLists.txt | 7 + thirdparty/stb/.#CMakeLists.txt | 1 + thirdparty/stb/CMakeLists.txt | 1 + thirdparty/stb/stb_image.h | 7762 +++++++++++++++++++++++++++++++ 21 files changed, 7960 insertions(+), 16 deletions(-) create mode 100644 container.png create mode 100644 core/Material.cpp create mode 100644 core/Material.h create mode 100644 thirdparty/CMakeLists.txt create mode 120000 thirdparty/stb/.#CMakeLists.txt create mode 100644 thirdparty/stb/CMakeLists.txt create mode 100644 thirdparty/stb/stb_image.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d810fe..7575d0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,10 @@ swig_add_library(couchlua target_link_libraries(couchlua ${LUA_LIBRARIES}) target_link_libraries(couch couchlua) +add_subdirectory(thirdparty) + if(WIN32) target_link_libraries(couch glfw3dll) + target_link_libraries(couch ssp) set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") endif(WIN32) diff --git a/container.png b/container.png new file mode 100644 index 0000000000000000000000000000000000000000..22f962764aee22f30c6d613956831ef952b3d090 GIT binary patch literal 422829 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

J8fvk^r>40-hMok~n!^_t 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%0ASIHNLh`;-4Tr= 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 literal 0 HcmV?d00001 diff --git a/core/Ball.cpp b/core/Ball.cpp index be4d8b8..05ce039 100644 --- a/core/Ball.cpp +++ b/core/Ball.cpp @@ -3,15 +3,15 @@ Ball::Ball() { // It's a cube really // Front - vertices.push_back(Vertex(1.0f, 1.0f, 1.0f)); - vertices.push_back(Vertex(1.0f, -1.0f, 1.0f)); - vertices.push_back(Vertex(-1.0f, 1.0f, 1.0f)); - vertices.push_back(Vertex(-1.0f, -1.0f, 1.0f)); + vertices.push_back(Vertex(1.0f, 1.0f, 1.0f, 0.0f, 1.0f)); + vertices.push_back(Vertex(1.0f, -1.0f, 1.0f, 0.0f, 0.0f)); + vertices.push_back(Vertex(-1.0f, 1.0f, 1.0f, 1.0f, 1.0f)); + vertices.push_back(Vertex(-1.0f, -1.0f, 1.0f, 1.0f, 0.0f)); // Back - vertices.push_back(Vertex(1.0f, 1.0f, -1.0f)); - vertices.push_back(Vertex(1.0f, -1.0f, -1.0f)); - vertices.push_back(Vertex(-1.0f, 1.0f, -1.0f)); - vertices.push_back(Vertex(-1.0f, -1.0f, -1.0f)); + vertices.push_back(Vertex(1.0f, 1.0f, -1.0f, 0.0f, 0.0f)); + vertices.push_back(Vertex(1.0f, -1.0f, -1.0f, 0.0f, 1.0f)); + vertices.push_back(Vertex(-1.0f, 1.0f, -1.0f, 1.0f, 0.0f)); + vertices.push_back(Vertex(-1.0f, -1.0f, -1.0f, 1.0f, 1.0f)); //Front indices.push_back(Index(0, 1, 2)); diff --git a/core/Drawable.h b/core/Drawable.h index 9c0f558..638485b 100644 --- a/core/Drawable.h +++ b/core/Drawable.h @@ -2,11 +2,13 @@ #define DRAWABLE_H #include "Node.h" +#include "Material.h" class Drawable : virtual public Node { public: virtual bool IsDrawable() const {return true;} virtual void Draw() = 0; + Material *material; }; #endif /* DRAWABLE_H */ diff --git a/core/Material.cpp b/core/Material.cpp new file mode 100644 index 0000000..a11469e --- /dev/null +++ b/core/Material.cpp @@ -0,0 +1,47 @@ +#include "Material.h" + +Color::Color() { + this->r = 0.0f; + this->g = 0.0f; + this->b = 0.0f; +} + +Color::Color(cfloat r, cfloat g, cfloat b) { + this->r = r; + this->g = g; + this->b = b; +} + +Texture::Texture() {} + +Texture Texture::FromFile(const char *filename) { + // Lotta hocus pocus + // https://learnopengl.com/Getting-started/Textures + Texture tex; + glGenTextures(1, &tex.id); + glBindTexture(GL_TEXTURE_2D, tex.id); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + int nrChannels; + unsigned char* data = stbi_load(filename, &tex.width, &tex.height, &nrChannels, 0); + if (data) { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex.width, tex.height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); + glGenerateMipmap(GL_TEXTURE_2D); + } else { + std::cout << "Error loading texture file: " << filename << std::endl; + exit(1); + } + + stbi_image_free(data); + + return tex; +} + +Material::Material() { + usesColor = false; + usesTex = false; +} diff --git a/core/Material.h b/core/Material.h new file mode 100644 index 0000000..96c727e --- /dev/null +++ b/core/Material.h @@ -0,0 +1,34 @@ +#ifndef MATERIAL_H +#define MATERIAL_H + +#include +#include + +#include +#include "stb_image.h" + +#include "types.h" + +struct Color { + cfloat r, g, b; + Color(); + Color(cfloat r, cfloat g, cfloat b); +}; + +class Texture { +public: + int width, height; + Id id; + static Texture FromFile(const char *filename); + Texture(); +}; + +struct Material { + Color color; + bool usesColor; + Texture tex; + bool usesTex; + Material(); +}; + +#endif /* MATERIAL_H */ diff --git a/core/Mesh.cpp b/core/Mesh.cpp index b498847..f460904 100644 --- a/core/Mesh.cpp +++ b/core/Mesh.cpp @@ -1,6 +1,12 @@ #include "Mesh.h" -Mesh::Mesh() {} +Mesh::Mesh() { + material = new Material(); +} + +Mesh::~Mesh() { + delete material; +} Mesh::Mesh(VertexList vertices, IndexList indices) { this->vertices = vertices; @@ -24,7 +30,10 @@ void Mesh::SetupMesh() { // Vertex positions glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*) 0); - // TODO normals, uv + // Vertex UV + glEnableVertexAttribArray(1); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)(3 * sizeof(float))); + // TODO normals glBindVertexArray(0); } diff --git a/core/Mesh.h b/core/Mesh.h index 751fcc6..ad9f769 100644 --- a/core/Mesh.h +++ b/core/Mesh.h @@ -14,6 +14,7 @@ public: VertexList vertices; IndexList indices; Mesh(); + ~Mesh(); Mesh(VertexList vertices, IndexList indices); virtual void Draw(); virtual void SetupMesh(); diff --git a/core/Shader.cpp b/core/Shader.cpp index a3d33c5..f13f5a4 100644 --- a/core/Shader.cpp +++ b/core/Shader.cpp @@ -67,8 +67,6 @@ Shader::Shader(const char* vertexPath, const char* fragmentPath) { glDeleteShader(fragment); } - - void Shader::Use() { glUseProgram(id); } @@ -85,6 +83,23 @@ void Shader::UpdateProjection(Matrix projection) { glUniformMatrix4fv(glGetUniformLocation(id, "PROJECTION"), 1, GL_FALSE, glm::value_ptr(projection)); } +void Shader::UpdateColor(bool usesColor) { + glUniform1i(glGetUniformLocation(id, "material.usesColor"), (int) usesColor); +} + +void Shader::UpdateColor(bool usesColor, Color color) { + glUniform1i(glGetUniformLocation(id, "material.usesColor"), (int) usesColor); + glUniform3f(glGetUniformLocation(id, "material.color"), color.r, color.g, color.b); +} + +void Shader::UpdateTex(bool usesTex) { + glUniform1i(glGetUniformLocation(id, "material.usesTex"), (int) usesTex); +} +void Shader::UpdateTex(bool usesTex, Texture tex) { + glUniform1i(glGetUniformLocation(id, "material.usesTex"), (int) usesTex); + glBindTexture(GL_TEXTURE_2D, tex.id); +} + Name Shader::GetName() const { return "Unnamed Shader"; } diff --git a/core/Shader.h b/core/Shader.h index 0b8c55e..bb5b30e 100644 --- a/core/Shader.h +++ b/core/Shader.h @@ -9,6 +9,7 @@ #include #include "types.h" +#include "Material.h" class Shader { public: @@ -19,6 +20,10 @@ public: void UpdateView(Matrix view); void UpdateModel(Matrix model); void UpdateProjection(Matrix projection); + void UpdateColor(bool usesColor); + void UpdateColor(bool usesColor, Color color); + void UpdateTex(bool usesTex); + void UpdateTex(bool usesTex, Texture tex); virtual Name GetName() const; }; diff --git a/core/Vertex.cpp b/core/Vertex.cpp index 86891bf..eb6c5e9 100644 --- a/core/Vertex.cpp +++ b/core/Vertex.cpp @@ -4,10 +4,22 @@ Vertex::Vertex() { x = 0.0f; y = 0.0f; z = 0.0f; + u = 0.0f; + v = 0.0f; } Vertex::Vertex(cfloat x, cfloat y, cfloat z) { this->x = x; this->y = y; this->z = z; + this->u = 0.0f; + this->v = 0.0f; +} + +Vertex::Vertex(cfloat x, cfloat y, cfloat z, cfloat u, cfloat v) { + this->x = x; + this->y = y; + this->z = z; + this->u = u; + this->v = v; } diff --git a/core/Vertex.h b/core/Vertex.h index 38d3af1..1d39081 100644 --- a/core/Vertex.h +++ b/core/Vertex.h @@ -8,7 +8,9 @@ struct Vertex { Vertex(); Vertex(cfloat x, cfloat y, cfloat z); + Vertex(cfloat x, cfloat y, cfloat z, cfloat u, cfloat v); cfloat x, y, z; + cfloat u, v; }; typedef std::vector VertexList; diff --git a/core/couch.cpp b/core/couch.cpp index c13f7c8..b9d0173 100644 --- a/core/couch.cpp +++ b/core/couch.cpp @@ -15,6 +15,10 @@ #include "Node.h" #include "Lua.h" +// Thirdparty Includes +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" + Window *window; const int width = 800; @@ -33,6 +37,16 @@ void render(Node *curr, Shader *shader, Matrix model) { shader->UpdateModel(model); } Drawable *drawable = dynamic_cast(curr); + if (drawable->material->usesColor) { + shader->UpdateColor(true, drawable->material->color); + } else { + shader->UpdateColor(false); + } + if (drawable->material->usesTex) { + shader->UpdateTex(true, drawable->material->tex); + } else { + shader->UpdateTex(false); + } drawable->Draw(); } for (Node *child : curr->children) { @@ -66,6 +80,7 @@ int main() { } glViewport(0, 0, width, height); + glEnable(GL_DEPTH_TEST); root = Node::GetRoot(); @@ -76,7 +91,6 @@ int main() { FlatShader *shader = new FlatShader(); shader->Use(); - shader->UpdateColor(Vector3(0.0f, 1.0f, 0.0f)); Matrix projection = glm::perspective(glm::radians(45.0f), 800.0f/600.0f, 0.1f, 100.0f); shader->UpdateProjection(projection); @@ -90,7 +104,7 @@ int main() { while(!glfwWindowShouldClose(window)) { glClearColor(0.5f, 0.5f, 0.5f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); lua->Update(delta); diff --git a/main.lua b/main.lua index 827dc35..602b89b 100644 --- a/main.lua +++ b/main.lua @@ -20,15 +20,23 @@ local cam_rot_y = 0.0 local SPEED = 30 +local RED = couch.Color(1.0, 0.0, 0.0) +local BLUE = couch.Color(0.0, 0.0, 1.0) + function init() camera = couch.Camera() camera:MakeCurrent() camera.transform:Translate(0.0, 0.0, 10.0) ball = couch.Ball() ball:SetupMesh() + ball.material.color = RED + ball.material.usesColor = true couch.Node.GetRoot().children:Append(ball) ball1 = couch.Ball() ball1:SetupMesh() + ball1.material.tex = couch.Texture.FromFile("container.png") + ball1.material.usesTex = true + print(ball1.material.tex.width, ball1.material.tex.height) couch.Node.GetRoot().children:Append(ball1) ball1.transform:Translate(0.0, 3.0, 0.0) diff --git a/scripting/couch.i b/scripting/couch.i index cc39296..9580319 100644 --- a/scripting/couch.i +++ b/scripting/couch.i @@ -8,6 +8,7 @@ #include "Transform.h" #include "Spatial.h" #include "Drawable.h" +#include "Material.h" #include "Mesh.h" #include "Ball.h" #include "Camera.h" @@ -36,6 +37,7 @@ public: %include "Spatial.h" %include "Transform.h" %include "Drawable.h" +%include "Material.h" %include "Mesh.h" %include "Ball.h" %include "Camera.h" diff --git a/shaders/flat.frag b/shaders/flat.frag index 64b3003..c01559c 100644 --- a/shaders/flat.frag +++ b/shaders/flat.frag @@ -1,9 +1,24 @@ #version 330 core -uniform vec3 color; +in vec2 UV; out vec4 FragColor; +struct Material { + vec3 color; + bool usesColor; + sampler2D tex; + bool usesTex; +}; + +uniform Material material; + void main() { - FragColor = vec4(color, 1.0); + FragColor = vec4(0.0); + if (material.usesColor) { + FragColor += vec4(material.color, 1.0); + } + if (material.usesTex) { + FragColor += texture(material.tex, UV); + } } diff --git a/shaders/flat.vert b/shaders/flat.vert index 81a7b73..bce7223 100644 --- a/shaders/flat.vert +++ b/shaders/flat.vert @@ -1,11 +1,15 @@ #version 330 core layout (location = 0) in vec3 pos; +layout (location = 1) in vec2 uv; uniform mat4 MODEL; uniform mat4 VIEW; uniform mat4 PROJECTION; +out vec2 UV; + void main() { gl_Position = PROJECTION * VIEW * MODEL * vec4(pos, 1.0); + UV = uv; } diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt new file mode 100644 index 0000000..8315bf5 --- /dev/null +++ b/thirdparty/CMakeLists.txt @@ -0,0 +1,7 @@ +project(Couch) + +target_include_directories(couch + PUBLIC stb) + +target_include_directories(couchlua + PUBLIC stb) diff --git a/thirdparty/stb/.#CMakeLists.txt b/thirdparty/stb/.#CMakeLists.txt new file mode 120000 index 0000000..175b667 --- /dev/null +++ b/thirdparty/stb/.#CMakeLists.txt @@ -0,0 +1 @@ +dane@sweetdee.1314:1610908086 \ No newline at end of file diff --git a/thirdparty/stb/CMakeLists.txt b/thirdparty/stb/CMakeLists.txt new file mode 100644 index 0000000..54f5b9f --- /dev/null +++ b/thirdparty/stb/CMakeLists.txt @@ -0,0 +1 @@ +Project(stb) diff --git a/thirdparty/stb/stb_image.h b/thirdparty/stb/stb_image.h new file mode 100644 index 0000000..accef48 --- /dev/null +++ b/thirdparty/stb/stb_image.h @@ -0,0 +1,7762 @@ +/* stb_image - v2.26 - 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.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 + 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 + 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 Matthew Gregan github:poppolopoppo + Julian Raschke Gregory Mullen Christian Floisand github:darealshinji + Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 + Brad Weinberger Matvey Cherevko [reserved] + Luca Sas Alexander Veselov Zack Middleton [reserved] + Ryan C. Gordon [reserved] [reserved] + DO NOT ADD YOUR NAME HERE + + 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. +// +// =========================================================================== +// +// 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: +// +// By default we convert iphone-formatted PNGs back to RGB, even though +// they are internally encoded differently. You can disable this conversion +// by calling stbi_convert_iphone_png_to_rgb(0), in which case +// you will always just get the native iphone "format" through (which +// is BGR stored in RGB). +// +// 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_flip_vertically_on_load_thread(int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); +STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ + || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ + || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ + || defined(STBI_ONLY_ZLIB) + #ifndef STBI_ONLY_JPEG + #define STBI_NO_JPEG + #endif + #ifndef STBI_ONLY_PNG + #define STBI_NO_PNG + #endif + #ifndef STBI_ONLY_BMP + #define STBI_NO_BMP + #endif + #ifndef STBI_ONLY_PSD + #define STBI_NO_PSD + #endif + #ifndef STBI_ONLY_TGA + #define STBI_NO_TGA + #endif + #ifndef STBI_ONLY_GIF + #define STBI_NO_GIF + #endif + #ifndef STBI_ONLY_HDR + #define STBI_NO_HDR + #endif + #ifndef STBI_ONLY_PIC + #define STBI_NO_PIC + #endif + #ifndef STBI_ONLY_PNM + #define STBI_NO_PNM + #endif +#endif + +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) +#define STBI_NO_ZLIB +#endif + + +#include +#include // ptrdiff_t on osx +#include +#include +#include + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +#include // ldexp, pow +#endif + +#ifndef STBI_NO_STDIO +#include +#endif + +#ifndef STBI_ASSERT +#include +#define STBI_ASSERT(x) assert(x) +#endif + +#ifdef __cplusplus +#define STBI_EXTERN extern "C" +#else +#define STBI_EXTERN extern +#endif + + +#ifndef _MSC_VER + #ifdef __cplusplus + #define stbi_inline inline + #else + #define stbi_inline + #endif +#else + #define stbi_inline __forceinline +#endif + +#ifndef STBI_NO_THREAD_LOCALS + #if defined(__cplusplus) && __cplusplus >= 201103L + #define STBI_THREAD_LOCAL thread_local + #elif defined(__GNUC__) && __GNUC__ < 5 + #define STBI_THREAD_LOCAL __thread + #elif defined(_MSC_VER) + #define STBI_THREAD_LOCAL __declspec(thread) + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) + #define STBI_THREAD_LOCAL _Thread_local + #endif + + #ifndef STBI_THREAD_LOCAL + #if defined(__GNUC__) + #define STBI_THREAD_LOCAL __thread + #endif + #endif +#endif + +#ifdef _MSC_VER +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL + #define stbi_lrot(x,y) _lrotl(x,y) +#else + #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y)))) +#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 +// assume GCC or Clang on ARM targets +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +#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); +#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) +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) +static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) +{ + if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; + return stbi__malloc(a*b*c*d + add); +} +#endif + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS + #define stbi__err(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define stbi__err(x,y) stbi__err(y) +#else + #define stbi__err(x,y) stbi__err(x) +#endif + +#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) +#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) + +STBIDEF void stbi_image_free(void *retval_from_stbi_load) +{ + STBI_FREE(retval_from_stbi_load); +} + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_HDR +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +static int stbi__vertically_flip_on_load_global = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_global = flag_true_if_should_flip; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global +#else +static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; + +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_local = flag_true_if_should_flip; + stbi__vertically_flip_on_load_set = 1; +} + +#define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ + ? stbi__vertically_flip_on_load_local \ + : stbi__vertically_flip_on_load_global) +#endif // STBI_THREAD_LOCAL + +static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed + ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order + ri->num_channels = 0; + + #ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri); + #endif + #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 + #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(_MSC_VER) && 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(_MSC_VER) && 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(_MSC_VER) && defined(STBI_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode))) + return 0; + +#if _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); + return z + (stbi__get16le(s) << 16); +} +#endif + +#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=255; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 stbi__compute_y_16(int r, int g, int b) +{ + return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + stbi__uint16 *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + stbi__uint16 *src = data + j * x * img_n ; + stbi__uint16 *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=0xffff; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=0xffff; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=0xffff; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = 0xffff; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*) stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output; + if (!data) return NULL; + output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + } + } + if (n < comp) { + for (i=0; i < x*y; ++i) { + output[i*comp + n] = data[i*comp + n]/255.0f; + } + } + STBI_FREE(data); + return output; +} +#endif + +#ifndef STBI_NO_HDR +#define stbi__float2int(x) ((int) (x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output; + if (!data) return NULL; + output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +#ifndef STBI_NO_JPEG + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct +{ + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + stbi_uc *data; + void *raw_data, *raw_coeff; + stbi_uc *linebuf; + short *coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; + + int scan_n, order[4]; + int restart_interval, todo; + +// kernels + void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); + stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman *h, int *count) +{ + int i,j,k=0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) + for (j=0; j < count[i]; ++j) + h->size[k++] = (stbi_uc) (i+1); + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16) (code++); + if (code-1 >= (1u << j)) return stbi__err("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (stbi_uc) i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) +{ + int i; + for (i=0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = (stbi__int16) ((k * 256) + (run * 16) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) +{ + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static const stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); + + sgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB + k = stbi_lrot(j->code_buffer, n); + if (n < 0 || n >= (int) (sizeof(stbi__bmask)/sizeof(*stbi__bmask))) return 0; + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & ~sgn); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) +{ + unsigned int k; + if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) +{ + unsigned int k; + if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static const stbi_uc stbi__jpeg_dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant) +{ + int diff,dc,k; + int t; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) (dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) +{ + int diff,dc; + int t; + if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data,0,64*sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + if (t == -1) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + diff = t ? stbi__extend_receive(j, t) : 0; + + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) (dc << j->succ_low); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short) (1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) +{ + int k; + if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) << 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) << shift); + } + } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients + + short bit = (short) (1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short *p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } else { + k = j->spec_start; + do { + int r,s; + int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short *p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short) s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (stbi_uc) x; +} + +#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) +#define stbi__fsh(x) ((x) * 4096) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3*stbi__f2f(-1.847759065f); \ + t3 = p1 + p2*stbi__f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2+p3); \ + t1 = stbi__fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ + t0 = t0*stbi__f2f( 0.298631336f); \ + t1 = t1*stbi__f2f( 2.053119869f); \ + t2 = t2*stbi__f2f( 3.072711026f); \ + t3 = t3*stbi__f2f( 1.501321110f); \ + p1 = p5 + p1*stbi__f2f(-0.899976223f); \ + p2 = p5 + p2*stbi__f2f(-2.562915447f); \ + p3 = p3*stbi__f2f(-1.961570560f); \ + p4 = p4*stbi__f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) +{ + int i,val[64],*v=val; + stbi_uc *o; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0]*4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128<<17); + x1 += 65536 + (128<<17); + x2 += 65536 + (128<<17); + x3 += 65536 + (128<<17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0+t3) >> 17); + o[7] = stbi__clamp((x0-t3) >> 17); + o[1] = stbi__clamp((x1+t2) >> 17); + o[6] = stbi__clamp((x1-t2) >> 17); + o[2] = stbi__clamp((x2+t1) >> 17); + o[5] = stbi__clamp((x2-t1) >> 17); + o[3] = stbi__clamp((x3+t0) >> 17); + o[4] = stbi__clamp((x3-t0) >> 17); + } +} + +#ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + + // dot product constant: even elems=x, odd elems=y + #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) + + // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) + // out(1) = c1[even]*x + c1[odd]*y + #define dct_rot(out0,out1, x,y,c0,c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + + // out = in << 12 (in 16-bit, out 32-bit) + #define dct_widen(out, in) \ + __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + + // wide add + #define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + + // wide sub + #define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + + // butterfly a/b, add bias, then shift by "s" and pack + #define dct_bfly32o(out0, out1, a,b,bias,s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ + } + + // 8-bit interleave step (for transposes) + #define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + + // 16-bit interleave step (for transposes) + #define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + + #define dct_pass(bias,shift) \ + { \ + /* even part */ \ + dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ + dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0,row7, x0,x7,bias,shift); \ + dct_bfly32o(row1,row6, x1,x6,bias,shift); \ + dct_bfly32o(row2,row5, x2,x5,bias,shift); \ + dct_bfly32o(row3,row4, x3,x4,bias,shift); \ + } + + __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); + __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); + __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); + __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); + __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); + __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); + + // load + row0 = _mm_load_si128((const __m128i *) (data + 0*8)); + row1 = _mm_load_si128((const __m128i *) (data + 1*8)); + row2 = _mm_load_si128((const __m128i *) (data + 2*8)); + row3 = _mm_load_si128((const __m128i *) (data + 3*8)); + row4 = _mm_load_si128((const __m128i *) (data + 4*8)); + row5 = _mm_load_si128((const __m128i *) (data + 5*8)); + row6 = _mm_load_si128((const __m128i *) (data + 6*8)); + row7 = _mm_load_si128((const __m128i *) (data + 7*8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i *) out, p0); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p2); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p1); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p3); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); + } + +#undef dct_const +#undef dct_rot +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_interleave8 +#undef dct_interleave16 +#undef dct_pass +} + +#endif // STBI_SSE2 + +#ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); + +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ + dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ + dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ + dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ + } + + // load + row0 = vld1q_s16(data + 0*8); + row1 = vld1q_s16(data + 1*8); + row2 = vld1q_s16(data + 2*8); + row3 = vld1q_s16(data + 3*8); + row4 = vld1q_s16(data + 4*8); + row5 = vld1q_s16(data + 5*8); + row6 = vld1q_s16(data + 6*8); + row7 = vld1q_s16(data + 7*8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } +#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +#undef dct_trn16 +#undef dct_trn32 +#undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } +#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); out += out_stride; + vst1_u8(out, p1); out += out_stride; + vst1_u8(out, p2); out += out_stride; + vst1_u8(out, p3); out += out_stride; + vst1_u8(out, p4); out += out_stride; + vst1_u8(out, p5); out += out_stride; + vst1_u8(out, p6); out += out_stride; + vst1_u8(out, p7); + +#undef dct_trn8_8 +#undef dct_trn8_16 +#undef dct_trn8_32 + } + +#undef dct_long_mul +#undef dct_long_mac +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_pass +} + +#endif // STBI_NEON + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg *j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } + x = stbi__get8(j->s); + if (x != 0xff) return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) +{ + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i,j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + STBI_SIMD_ALIGN(short, data[64]); + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } else { + if (z->scan_n == 1) { + int i,j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x); + int y2 = (j*z->img_comp[n].v + y); + short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) +{ + int i; + for (i=0; i < 64; ++i) + data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg *z) +{ + if (z->progressive) { + // dequantize and idct the data + int i,j,n; + for (n=0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg *z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker","Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s)-2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15,i; + if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG"); + if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); + + for (i=0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); + L -= (sixteen ? 129 : 65); + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s)-2; + while (L > 0) { + stbi_uc *v; + int sizes[16],i,n=0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L==0; + } + + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len","Corrupt JPEG"); + else + return stbi__err("bad APP len","Corrupt JPEG"); + } + L -= 2; + + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static const unsigned char tag[5] = {'J','F','I','F','\0'}; + int ok = 1; + int i; + for (i=0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 5; + if (ok) + z->jfif = 1; + } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static const unsigned char tag[6] = {'A','d','o','b','e','\0'}; + int ok = 1; + int i; + for (i=0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker","Corrupt JPEG"); +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg *z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) return 0; // no match + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) +{ + int i; + for (i=0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } + } + return why; +} + +static int stbi__process_frame_header(stbi__jpeg *z, int scan) +{ + stbi__context *s = z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG + p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG"); + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); + + z->rgb = 0; + for (i=0; i < s->img_n; ++i) { + static const unsigned char rgb[3] = { 'R', 'G', 'B' }; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) + ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) + // so these muls can't overflow with 32-bit ints (which we require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) + +#define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) +{ + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); + if (scan == STBI__SCAN_type) return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z,m)) return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) return 0; + return 1; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg *j) +{ + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) return 0; + if (!stbi__parse_entropy_coded_data(j)) return 0; + if (j->marker == STBI__MARKER_none ) { + // handle 0s at the end of image data from IP Kamera 9060 + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + if (x == 255) { + j->marker = stbi__get8(j->s); + break; + } + } + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + } else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); + } else { + if (!stbi__process_marker(j, m)) return 0; + } + m = stbi__get_marker(j); + } + if (j->progressive) + stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) + +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i=0; i < w; ++i) + out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = stbi__div4(n+input[i-1]); + out[i*2+1] = stbi__div4(n+input[i+1]); + } + out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) + +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = stbi__div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i=0,t0,t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w-1) & ~7); i += 8) { +#if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i *) (out + i*2), outv); +#elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i*2, o); +#endif + + // "previous" value for next iter + t1 = 3*in_near[i+7] + in_far[i+7]; + } + + t0 = t1; + t1 = 3*in_near[i] + in_far[i]; + out[i*2] = stbi__div16(3*t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} +#endif + +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + STBI_NOTUSED(in_far); + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) +{ + int i = 0; + +#ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); + __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); + __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); + __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); + __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i+7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i *) (out + 0), o0); + _mm_storeu_si128((__m128i *) (out + 16), o1); + out += 32; + } + } +#endif + +#ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); + int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); + int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); + int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); + + for (; i+7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8*4; + } + } +#endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg *j) +{ + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +#ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +#endif + +#ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +#endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg *j) +{ + stbi__free_jpeg_components(j, j->s->img_n, 0); +} + +typedef struct +{ + resample_row_func resample; + stbi_uc *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +// fast 0..255 * 0..255 => 0..255 rounded multiplication +static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) +{ + unsigned int t = x*y + 128; + return (stbi_uc) ((t + (t >>8)) >> 8); +} + +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; + + is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // 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)); + 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)); + 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))); + 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) + +// 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[288]; + stbi__uint16 value[288]; +} 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 >= sizeof (z->size)) return -1; // some data was corrupt somewhere! + if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s; + if (a->num_bits < 16) { + if (stbi__zeof(a)) { + return -1; /* report error for unexpected end of data. */ + } + stbi__fill_bits(a); + } + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes +{ + char *q; + unsigned int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); + cur = (unsigned int) (z->zout - z->zout_start); + limit = old_limit = (unsigned) (z->zout_end - z->zout_start); + if (UINT_MAX - cur < (unsigned) n) return stbi__err("outofmem", "Out of memory"); + while (cur + n > limit) { + if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); + limit *= 2; + } + q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static const int stbi__zlength_base[31] = { + 3,4,5,6,7,8,9,10,11,13, + 15,17,19,23,27,31,35,43,51,59, + 67,83,99,115,131,163,195,227,258,0,0 }; + +static const int stbi__zlength_extra[31]= +{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + +static const int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, +257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + +static const int stbi__zdist_extra[32] = +{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static int stbi__parse_huffman_block(stbi__zbuf *a) +{ + char *zout = a->zout; + for(;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) return 0; + zout = a->zout; + } + *zout++ = (char) z; + } else { + stbi_uc *p; + int len,dist; + if (z == 256) { + a->zout = zout; + return 1; + } + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); + if (zout + len > a->zout_end) { + if (!stbi__zexpand(a, zout, len)) return 0; + zout = a->zout; + } + p = (stbi_uc *) (zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { do *zout++ = v; while (--len); } + } else { + if (len) { do *zout++ = *p++; while (--len); } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf *a) +{ + static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286+32+137];//padding for maximum single op + stbi_uc codelength_sizes[19]; + int i,n; + + int hlit = stbi__zreceive(a,5) + 257; + int hdist = stbi__zreceive(a,5) + 1; + int hclen = stbi__zreceive(a,4) + 4; + int ntot = hlit + hdist; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = stbi__zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc) c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a,2)+3; + if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); + fill = lencodes[n-1]; + } else if (c == 17) { + c = stbi__zreceive(a,3)+3; + } else if (c == 18) { + c = stbi__zreceive(a,7)+11; + } else { + return stbi__err("bad codelengths", "Corrupt PNG"); + } + if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); + memset(lencodes+n, fill, c); + n += c; + } + } + if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf *a) +{ + stbi_uc header[4]; + int len,nlen,k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + if (a->num_bits < 0) return stbi__err("zlib corrupt","Corrupt PNG"); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf *a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if (stbi__zeof(a)) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +static const stbi_uc stbi__zdefault_length[288] = +{ + 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 , 288)) 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); + 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 = 0; +static int stbi__de_iphone_flag = 0; + +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag = flag_true_if_should_convert; +} + +static void stbi__de_iphone(stbi__png *z) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i=0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = ( t * 255 + half) / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +#define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) + +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n=0; + stbi_uc has_trans=0, tc[3]={0}; + stbi__uint16 tc16[3]; + stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k,interlace=0, color=0, is_iphone=0; + stbi__context *s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) return 0; + + if (scan == STBI__SCAN_type) return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C','g','B','I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I','H','D','R'): { + int comp,filter; + if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); + first = 0; + if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); + s->img_x = stbi__get32be(s); + s->img_y = stbi__get32be(s); + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); + comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); + filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); + interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); + if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); + if (scan == STBI__SCAN_header) return 1; + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); + // if SCAN_header, have to scan to see if we have a tRNS + } + break; + } + + case STBI__PNG_TYPE('P','L','T','E'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = stbi__get8(s); + palette[i*4+1] = stbi__get8(s); + palette[i*4+2] = stbi__get8(s); + palette[i*4+3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t','R','N','S'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); + if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); + has_trans = 1; + if (z->depth == 16) { + for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is + } else { + for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I','D','A','T'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); + if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; } + if ((int)(ioff + c.length) < (int)ioff) return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I','E','N','D'): { + stbi__uint32 raw_len, bpl; + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) return 1; + if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); + if (z->expanded == NULL) return 0; // zlib should set error + STBI_FREE(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + } else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) alpha + ++s->img_n; + } + STBI_FREE(z->expanded); z->expanded = NULL; + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + return 1; + } + + default: + // if critical, fail + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); + #endif + return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri) +{ + void *result=NULL; + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth <= 8) + ri->bits_per_channel = 8; + else if (p->depth == 16) + ri->bits_per_channel = 16; + else + return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + else + result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) *n = p->s->img_n; + } + STBI_FREE(p->out); p->out = NULL; + STBI_FREE(p->expanded); p->expanded = NULL; + STBI_FREE(p->idata); p->idata = NULL; + + return result; +} + +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x,y,comp,req_comp, ri); +} + +static int stbi__png_test(stbi__context *s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind( p->s ); + return 0; + } + if (x) *x = p->s->img_x; + if (y) *y = p->s->img_y; + if (comp) *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +static int stbi__png_is16(stbi__context *s) +{ + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) + return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; +} +#endif + +// Microsoft/Windows BMP image + +#ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context *s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') return 0; + if (stbi__get8(s) != 'M') return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context *s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) { n += 16; z >>= 16; } + if (z >= 0x00100) { n += 8; z >>= 8; } + if (z >= 0x00010) { n += 4; z >>= 4; } + if (z >= 0x00004) { n += 2; z >>= 2; } + if (z >= 0x00002) { n += 1;/* >>= 1;*/ } + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +// extract an arbitrarily-aligned N-bit value (N=bits) +// from v, and then make it 8-bits long and fractionally +// extend it to full full range. +static int stbi__shiftsigned(unsigned int v, int shift, int bits) +{ + static unsigned int mul_table[9] = { + 0, + 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, + 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, 0,0,1,0,2,4,6,0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v < 256); + v >>= (8-bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int) ((unsigned) v * mul_table[bits]) >> shift_table[bits]; +} + +typedef struct +{ + int bpp, offset, hsz; + unsigned int mr,mg,mb,ma, all_a; + int extra_read; +} stbi__bmp_data; + +static 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"); + 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) { + 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 { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } + } 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 { + 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); + 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) { + STBI_ASSERT(info.offset == s->callback_already_read + (int) (s->img_buffer - s->img_buffer_original)); + if (info.offset != s->callback_already_read + (s->img_buffer - s->buffer_start)) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } + } + + if (info.bpp == 24 && ma == 0xff000000) + s->img_n = 3; + else + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) width = s->img_x; + else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + if (info.bpp == 1) { + for (j=0; j < (int) s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i=0; i < (int) s->img_x; ++i) { + int color = (v>>bit_offset)&0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + if((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } else { + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=stbi__get8(s),v2=0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (info.bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + stbi__skip(s, info.offset - info.extra_read - info.hsz); + if (info.bpp == 24) width = 3 * s->img_x; + else if (info.bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); + if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + unsigned char a; + out[z+2] = stbi__get8(s); + out[z+1] = stbi__get8(s); + out[z+0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) out[z++] = a; + } + } else { + int bpp = info.bpp; + for (i=0; i < (int) s->img_x; ++i) { + stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + all_a |= a; + if (target == 4) out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) + out[i] = 255; + + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i]; p1[i] = p2[i]; p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + return out; +} +#endif + +// Targa Truevision - TGA +// by Jonathan Dummer +#ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +{ + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) *is_rgb16 = 0; + switch(bits_per_pixel) { + case 8: return STBI_grey; + case 16: if(is_grey) return STBI_grey_alpha; + // fallthrough + case 15: if(is_rgb16) *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: return bits_per_pixel/8; + default: return 0; + } +} + +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) +{ + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if( tga_colormap_type > 1 ) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + tga_image_type = stbi__get8(s); // image type + if ( tga_colormap_type == 1 ) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s,9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } + tga_w = stbi__get16le(s); + if( tga_w < 1 ) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if( tga_h < 1 ) { + stbi__rewind(s); + return 0; // test height + } + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); + } + if(!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) *x = tga_w; + if (y) *y = tga_h; + if (comp) *comp = tga_comp; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context *s) +{ + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if ( tga_color_type == 1 ) { // colormapped (paletted) image + if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + stbi__skip(s,4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s,9); // skip colormap specification and image x/y origin + } + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 instead of 0 + +errorEnd: + stbi__rewind(s); + return res; +} + +// read 16bit value and convert to 24bit RGB +static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) +{ + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later + out[0] = (stbi_uc)((r * 255)/31); + out[1] = (stbi_uc)((g * 255)/31); + out[2] = (stbi_uc)((b * 255)/31); + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16=0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = {0}; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + STBI_NOTUSED(tga_x_origin); // @TODO + STBI_NOTUSED(tga_y_origin); // @TODO + + if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // do a tiny bit of precessing + if ( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette + if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); + + if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset ); + + if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { + for (i=0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height -i - 1 : i; + stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if ( tga_indexed) + { + if (tga_palette_len == 0) { /* you have to have at least one entry! */ + STBI_FREE(tga_data); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (tga_rgb16) { + stbi_uc *pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i=0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i=0; i < tga_width * tga_height; ++i) + { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if ( tga_is_RLE ) + { + if ( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if ( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if ( read_next_pixel ) + { + // load however much data we did have + if ( tga_indexed ) + { + // read in index, then perform the lookup + int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); + if ( pal_idx >= tga_palette_len ) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else if(tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i*tga_comp+j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if ( tga_inverted ) + { + for (j = 0; j*2 < tga_height; ++j) + { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if ( tga_palette != NULL ) + { + STBI_FREE( tga_palette ); + } + } + + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) + { + unsigned char* tga_pixel = tga_data; + for (i=0; i < tga_width * tga_height; ++i) + { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + STBI_NOTUSED(tga_palette_start); + // OK, done + return tga_data; +} +#endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) +{ + int count, nleft, len; + + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + + return 1; +} + +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w,h; + stbi_uc *out; + STBI_NOTUSED(ri); + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s,stbi__get32be(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s) ); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); + + // Create the destination image. + + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } else + out = (stbi_uc *) stbi__malloc(4 * w*h); + + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", "bad RLE data"); + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + stbi__uint16 val = channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) + *q = val; + } else { + stbi_uc *p = out+channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) + *p = val; + } + } else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16) stbi__get16be(s); + } else { + stbi_uc *p = out+channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; i++, p += 4) + *p = (stbi_uc) (stbi__get16be(s) >> 8); + } else { + for (i = 0; i < pixelCount; i++, p += 4) + *p = stbi__get8(s); + } + } + } + } + } + + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i=0; i < w*h; ++i) { + stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a); + pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a); + pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a); + } + } + } else { + for (i=0; i < w*h; ++i) { + unsigned char *pixel = out + 4*i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); + pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); + pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); + } + } + } + } + + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + if (comp) *comp = 4; + *y = h; + *x = w; + + return out; +} +#endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +#ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context *s,const char *str) +{ + int i; + for (i=0; i<4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context *s) +{ + int i; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) + return 0; + + for(i=0;i<84;++i) + stbi__get8(s); + + if (!stbi__pic_is4(s,"PICT")) + return 0; + + return 1; +} + +typedef struct +{ + stbi_uc size,type,channel; +} stbi__pic_packet; + +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) +{ + int mask=0x80, i; + + for (i=0; i<4; ++i, mask>>=1) { + if (channel & mask) { + if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); + dest[i]=stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) +{ + int mask=0x80,i; + + for (i=0;i<4; ++i, mask>>=1) + if (channel&mask) + dest[i]=src[i]; +} + +static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) +{ + int act_comp=0,num_packets=0,y,chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return stbi__errpuc("bad format","too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); + if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for(y=0; ytype) { + default: + return stbi__errpuc("bad format","packet has bad compression type"); + + case 0: {//uncompressed + int x; + + for(x=0;xchannel,dest)) + return 0; + break; + } + + case 1://Pure RLE + { + int left=width, i; + + while (left>0) { + stbi_uc count,value[4]; + + count=stbi__get8(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); + + if (count > left) + count = (stbi_uc) left; + + if (!stbi__readval(s,packet->channel,value)) return 0; + + for(i=0; ichannel,dest,value); + left -= count; + } + } + break; + + case 2: {//Mixed RLE + int left=width; + while (left>0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count==128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file","scanline overrun"); + + if (!stbi__readval(s,packet->channel,value)) + return 0; + + for(i=0;ichannel,dest,value); + } else { // Raw + ++count; + if (count>left) return stbi__errpuc("bad file","scanline overrun"); + + for(i=0;ichannel,dest)) + return 0; + } + left-=count; + } + break; + } + } + } + } + + return result; +} + +static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri) +{ + stbi_uc *result; + int i, x,y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) comp = &internal_comp; + + for (i=0; i<92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + + if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); + + stbi__get32be(s); //skip `ratio' + stbi__get16be(s); //skip `fields' + stbi__get16be(s); //skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); + 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 (!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(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; + 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 (NULL == tmp) { + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + return stbi__errpuc("outofmem", "Out of memory"); + } + else { + out = (stbi_uc*) tmp; + out_size = layers * stride; + } + + if (delays) { + *delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); + delays_size = layers * sizeof(int); + } + } else { + out = (stbi_uc*)stbi__malloc( layers * stride ); + out_size = layers * stride; + if (delays) { + *delays = (int*) stbi__malloc( layers * sizeof(int) ); + delays_size = layers * sizeof(int); + } + } + memcpy( out + ((layers - 1) * stride), u, stride ); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); + + *z = layers; + return out; + } else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + STBI_NOTUSED(ri); + + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } else if (g.out) { + // if there was an error and we allocated an image buffer, free it! + STBI_FREE(g.out); + } + + // free buffers needed for multiple frame loading; + STBI_FREE(g.history); + STBI_FREE(g.background); + + return u; +} + +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) +{ + return stbi__gif_info_raw(s,x,y,comp); +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context *s, const char *signature) +{ + int i; + for (i=0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + stbi__rewind(s); + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if(!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); + } + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) +{ + int len=0; + char c = '\0'; + + c = (char) stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN-1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char) stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if ( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + const char *headerToken; + STBI_NOTUSED(ri); + + // Check identifier + headerToken = stbi__hdr_gettoken(s,buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int) strtol(token, NULL, 10); + + if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + + *x = width; + *y = height; + + if (comp) *comp = 3; + if (req_comp == 0) req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); + if (!hdr_data) + return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if ( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc) c1; + rgbe[1] = (stbi_uc) c2; + rgbe[2] = (stbi_uc) len; + rgbe[3] = (stbi_uc) stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) { + scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i=0; i < width; ++i) + stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + if (scanline) + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int dummy; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind( s ); + return 0; + } + + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) { + stbi__rewind( s ); + return 0; + } + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *y = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *x = (int) strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +#ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) +{ + void *p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + stbi__rewind( s ); + if (p == NULL) + 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; + } + (void) stbi__get32be(s); + (void) 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) +// Does not support 16-bit-per-channel + +#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); + + if (!stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n)) + 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__mad3sizes_valid(s->img_n, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc *) stbi__malloc_mad3(s->img_n, s->img_x, s->img_y, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + stbi__getn(s, out, s->img_n * s->img_x * s->img_y); + + if (req_comp && req_comp != s->img_n) { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) +{ + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char) stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) + *c = (char) stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static int stbi__pnm_getinteger(stbi__context *s, char *c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value*10 + (*c - '0'); + *c = (char) stbi__get8(s); + } + + return value; +} + +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) +{ + int maxv, dummy; + char c, p, t; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char) stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + + if (maxv > 255) + return stbi__err("max value > 255", "PPM image not 8-bit"); + else + return 1; +} +#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 + + 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. +------------------------------------------------------------------------------ +*/