|
|
|
@ -48,7 +48,7 @@ LICENSE |
|
|
|
|
|
|
|
|
|
RECENT REVISION HISTORY: |
|
|
|
|
|
|
|
|
|
2.27 ( ) document stbi_info better, 16-bit PNM support |
|
|
|
|
2.27 ( ) document stbi_info better, 16-bit PNM support, bug fixes |
|
|
|
|
2.26 (2020-07-13) many minor fixes |
|
|
|
|
2.25 (2020-02-02) fix warnings |
|
|
|
|
2.24 (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically |
|
|
|
@ -3936,6 +3936,7 @@ static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int re |
|
|
|
|
{ |
|
|
|
|
unsigned char* result; |
|
|
|
|
stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); |
|
|
|
|
if (!j) return stbi__errpuc("outofmem", "Out of memory"); |
|
|
|
|
STBI_NOTUSED(ri); |
|
|
|
|
j->s = s; |
|
|
|
|
stbi__setup_jpeg(j); |
|
|
|
@ -3948,6 +3949,7 @@ static int stbi__jpeg_test(stbi__context *s) |
|
|
|
|
{ |
|
|
|
|
int r; |
|
|
|
|
stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); |
|
|
|
|
if (!j) return stbi__err("outofmem", "Out of memory"); |
|
|
|
|
j->s = s; |
|
|
|
|
stbi__setup_jpeg(j); |
|
|
|
|
r = stbi__decode_jpeg_header(j, STBI__SCAN_type); |
|
|
|
@ -3972,6 +3974,7 @@ static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) |
|
|
|
|
{ |
|
|
|
|
int result; |
|
|
|
|
stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); |
|
|
|
|
if (!j) return stbi__err("outofmem", "Out of memory"); |
|
|
|
|
j->s = s; |
|
|
|
|
result = stbi__jpeg_info_raw(j, x, y, comp); |
|
|
|
|
STBI_FREE(j); |
|
|
|
@ -4771,6 +4774,7 @@ static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint3 |
|
|
|
|
|
|
|
|
|
// de-interlacing
|
|
|
|
|
final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); |
|
|
|
|
if (!final) return stbi__err("outofmem", "Out of memory"); |
|
|
|
|
for (p=0; p < 7; ++p) { |
|
|
|
|
int xorig[] = { 0,4,0,2,0,1,0 }; |
|
|
|
|
int yorig[] = { 0,0,4,0,2,0,1 }; |
|
|
|
@ -6354,6 +6358,7 @@ static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_c |
|
|
|
|
|
|
|
|
|
// intermediate buffer is RGBA
|
|
|
|
|
result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); |
|
|
|
|
if (!result) return stbi__errpuc("outofmem", "Out of memory"); |
|
|
|
|
memset(result, 0xff, x*y*4); |
|
|
|
|
|
|
|
|
|
if (!stbi__pic_load_core(s,x,y,comp, result)) { |
|
|
|
@ -6469,6 +6474,7 @@ static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_in |
|
|
|
|
static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) |
|
|
|
|
{ |
|
|
|
|
stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); |
|
|
|
|
if (!g) return stbi__err("outofmem", "Out of memory"); |
|
|
|
|
if (!stbi__gif_header(s, g, comp, 1)) { |
|
|
|
|
STBI_FREE(g); |
|
|
|
|
stbi__rewind( s ); |
|
|
|
@ -6778,6 +6784,17 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, int **delays) |
|
|
|
|
{ |
|
|
|
|
STBI_FREE(g->out); |
|
|
|
|
STBI_FREE(g->history); |
|
|
|
|
STBI_FREE(g->background); |
|
|
|
|
|
|
|
|
|
if (out) STBI_FREE(out); |
|
|
|
|
if (delays && *delays) STBI_FREE(*delays); |
|
|
|
|
return stbi__errpuc("outofmem", "Out of memory"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp) |
|
|
|
|
{ |
|
|
|
|
if (stbi__gif_test(s)) { |
|
|
|
@ -6810,12 +6827,8 @@ static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, |
|
|
|
|
|
|
|
|
|
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"); |
|
|
|
|
} |
|
|
|
|
if (!tmp) |
|
|
|
|
return stbi__load_gif_main_outofmem(&g, out, delays); |
|
|
|
|
else { |
|
|
|
|
out = (stbi_uc*) tmp; |
|
|
|
|
out_size = layers * stride; |
|
|
|
@ -6823,13 +6836,19 @@ static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, |
|
|
|
|
|
|
|
|
|
if (delays) { |
|
|
|
|
*delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); |
|
|
|
|
if (!*delays) |
|
|
|
|
return stbi__load_gif_main_outofmem(&g, out, delays); |
|
|
|
|
delays_size = layers * sizeof(int); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
out = (stbi_uc*)stbi__malloc( layers * stride ); |
|
|
|
|
if (!out) |
|
|
|
|
return stbi__load_gif_main_outofmem(&g, out, delays); |
|
|
|
|
out_size = layers * stride; |
|
|
|
|
if (delays) { |
|
|
|
|
*delays = (int*) stbi__malloc( layers * sizeof(int) ); |
|
|
|
|
if (!*delays) |
|
|
|
|
return stbi__load_gif_main_outofmem(&g, out, delays); |
|
|
|
|
delays_size = layers * sizeof(int); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|