|
|
|
@ -105,7 +105,7 @@ RECENT REVISION HISTORY: |
|
|
|
|
Oriol Ferrer Mesia Josh Tobin Matthew Gregan github:phprus |
|
|
|
|
Julian Raschke Gregory Mullen Baldur Karlsson github:poppolopoppo |
|
|
|
|
Christian Floisand Kevin Schmidt JR Smith github:darealshinji |
|
|
|
|
Blazej Dariusz Roszkowski github:Michaelangel007 |
|
|
|
|
Brad Weinberger Blazej Dariusz Roszkowski github:Michaelangel007 |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#ifndef STBI_INCLUDE_STB_IMAGE_H |
|
|
|
@ -924,11 +924,13 @@ static int stbi__mul2sizes_valid(int a, int 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) |
|
|
|
@ -946,12 +948,14 @@ static int stbi__mad4sizes_valid(int a, int b, int c, int d, int 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) |
|
|
|
|
{ |
|
|
|
@ -1477,6 +1481,9 @@ stbi_inline static stbi_uc stbi__get8(stbi__context *s) |
|
|
|
|
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) { |
|
|
|
@ -1488,7 +1495,11 @@ stbi_inline static int stbi__at_eof(stbi__context *s) |
|
|
|
|
|
|
|
|
|
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) { |
|
|
|
@ -1505,7 +1516,11 @@ static void stbi__skip(stbi__context *s, int 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) |
|
|
|
|
{ |
|
|
|
|
if (s->io.read) { |
|
|
|
@ -1529,18 +1544,27 @@ static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) |
|
|
|
|
} 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
|
|
|
|
@ -1562,7 +1586,9 @@ static stbi__uint32 stbi__get32le(stbi__context *s) |
|
|
|
|
|
|
|
|
|
#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
|
|
|
|
@ -1578,7 +1604,11 @@ 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; |
|
|
|
@ -1622,12 +1652,20 @@ static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int r |
|
|
|
|
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; |
|
|
|
@ -1671,6 +1709,7 @@ static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int r |
|
|
|
|
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) |
|
|
|
|