|
@@ -105,8 +105,9 @@ RECENT REVISION HISTORY:
|
|
Oriol Ferrer Mesia Josh Tobin Matthew Gregan github:phprus
|
|
Oriol Ferrer Mesia Josh Tobin Matthew Gregan github:phprus
|
|
Julian Raschke Gregory Mullen Baldur Karlsson github:poppolopoppo
|
|
Julian Raschke Gregory Mullen Baldur Karlsson github:poppolopoppo
|
|
Christian Floisand Kevin Schmidt JR Smith github:darealshinji
|
|
Christian Floisand Kevin Schmidt JR Smith github:darealshinji
|
|
- Blazej Dariusz Roszkowski github:Michaelangel007
|
|
|
|
- Matvey Cherevko
|
|
|
|
|
|
+ Brad Weinberger Matvey Cherevko github:Michaelangel007
|
|
|
|
+ Blazej Dariusz Roszkowski
|
|
|
|
+
|
|
*/
|
|
*/
|
|
|
|
|
|
#ifndef STBI_INCLUDE_STB_IMAGE_H
|
|
#ifndef STBI_INCLUDE_STB_IMAGE_H
|
|
@@ -944,11 +945,13 @@ static int stbi__mul2sizes_valid(int a, int b)
|
|
return a <= INT_MAX/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
|
|
// 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)
|
|
static int stbi__mad2sizes_valid(int a, int b, int add)
|
|
{
|
|
{
|
|
return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, 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
|
|
// 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)
|
|
static int stbi__mad3sizes_valid(int a, int b, int c, int add)
|
|
@@ -966,12 +969,14 @@ static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add)
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR)
|
|
// mallocs with size overflow checking
|
|
// mallocs with size overflow checking
|
|
static void *stbi__malloc_mad2(int a, int b, int add)
|
|
static void *stbi__malloc_mad2(int a, int b, int add)
|
|
{
|
|
{
|
|
if (!stbi__mad2sizes_valid(a, b, add)) return NULL;
|
|
if (!stbi__mad2sizes_valid(a, b, add)) return NULL;
|
|
return stbi__malloc(a*b + add);
|
|
return stbi__malloc(a*b + add);
|
|
}
|
|
}
|
|
|
|
+#endif
|
|
|
|
|
|
static void *stbi__malloc_mad3(int a, int b, int c, int add)
|
|
static void *stbi__malloc_mad3(int a, int b, int c, int add)
|
|
{
|
|
{
|
|
@@ -1515,6 +1520,9 @@ stbi_inline static stbi_uc stbi__get8(stbi__context *s)
|
|
return 0;
|
|
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)
|
|
stbi_inline static int stbi__at_eof(stbi__context *s)
|
|
{
|
|
{
|
|
if (s->io.read) {
|
|
if (s->io.read) {
|
|
@@ -1526,7 +1534,11 @@ stbi_inline static int stbi__at_eof(stbi__context *s)
|
|
|
|
|
|
return s->img_buffer >= s->img_buffer_end;
|
|
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)
|
|
static void stbi__skip(stbi__context *s, int n)
|
|
{
|
|
{
|
|
if (n < 0) {
|
|
if (n < 0) {
|
|
@@ -1543,7 +1555,11 @@ static void stbi__skip(stbi__context *s, int n)
|
|
}
|
|
}
|
|
s->img_buffer += n;
|
|
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)
|
|
static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n)
|
|
{
|
|
{
|
|
if (s->io.read) {
|
|
if (s->io.read) {
|
|
@@ -1567,18 +1583,27 @@ static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n)
|
|
} else
|
|
} else
|
|
return 0;
|
|
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)
|
|
static int stbi__get16be(stbi__context *s)
|
|
{
|
|
{
|
|
int z = stbi__get8(s);
|
|
int z = stbi__get8(s);
|
|
return (z << 8) + 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)
|
|
static stbi__uint32 stbi__get32be(stbi__context *s)
|
|
{
|
|
{
|
|
stbi__uint32 z = stbi__get16be(s);
|
|
stbi__uint32 z = stbi__get16be(s);
|
|
return (z << 16) + stbi__get16be(s);
|
|
return (z << 16) + stbi__get16be(s);
|
|
}
|
|
}
|
|
|
|
+#endif
|
|
|
|
|
|
#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF)
|
|
#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF)
|
|
// nothing
|
|
// nothing
|
|
@@ -1600,7 +1625,9 @@ static stbi__uint32 stbi__get32le(stbi__context *s)
|
|
|
|
|
|
#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings
|
|
#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
|
|
// generic converter from built-in img_n to req_comp
|
|
@@ -1616,7 +1643,11 @@ static stbi_uc stbi__compute_y(int r, int g, int b)
|
|
{
|
|
{
|
|
return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8);
|
|
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)
|
|
static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y)
|
|
{
|
|
{
|
|
int i,j;
|
|
int i,j;
|
|
@@ -1660,12 +1691,20 @@ static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int r
|
|
STBI_FREE(data);
|
|
STBI_FREE(data);
|
|
return good;
|
|
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)
|
|
static stbi__uint16 stbi__compute_y_16(int r, int g, int b)
|
|
{
|
|
{
|
|
return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8);
|
|
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)
|
|
static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y)
|
|
{
|
|
{
|
|
int i,j;
|
|
int i,j;
|
|
@@ -1709,6 +1748,7 @@ static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int r
|
|
STBI_FREE(data);
|
|
STBI_FREE(data);
|
|
return good;
|
|
return good;
|
|
}
|
|
}
|
|
|
|
+#endif
|
|
|
|
|
|
#ifndef STBI_NO_LINEAR
|
|
#ifndef STBI_NO_LINEAR
|
|
static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp)
|
|
static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp)
|