@ -105,8 +105,9 @@ 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
Matvey Cherevko
Brad Weinberger Matvey Cherevko github : Michaelangel007
Blazej Dariusz Roszkowski
*/
# ifndef STBI_INCLUDE_STB_IMAGE_H
@ -944,11 +945,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 )
@ -966,12 +969,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 )
{
@ -1515,6 +1520,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 ) {
@ -1526,7 +1534,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 ) {
@ -1543,7 +1555,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 ) {
@ -1567,18 +1583,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
@ -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
# 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
@ -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 ) ;
}
# 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 ;
@ -1660,12 +1691,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 ;
@ -1709,6 +1748,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 )