155 lines
5.7 KiB
Diff
155 lines
5.7 KiB
Diff
--- stb/stb_image.h 2021-09-16 11:52:38.284782000 -0700k
|
|
+++ stb_image.h 2021-09-16 13:45:48.159770000 -0700
|
|
@@ -488,14 +488,14 @@
|
|
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_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, float *gamma);
|
|
+STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, float *gamma);
|
|
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_info (char const *filename, int *x, int *y, int *comp, float *gamma);
|
|
+STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp, float *gamma);
|
|
STBIDEF int stbi_is_16_bit (char const *filename);
|
|
STBIDEF int stbi_is_16_bit_from_file(FILE *f);
|
|
#endif
|
|
@@ -911,7 +911,7 @@
|
|
#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_info(stbi__context *s, int *x, int *y, int *comp, float *gamma);
|
|
static int stbi__png_is16(stbi__context *s);
|
|
#endif
|
|
|
|
@@ -4554,6 +4554,7 @@
|
|
stbi__context *s;
|
|
stbi_uc *idata, *expanded, *out;
|
|
int depth;
|
|
+ float gamma = 0;
|
|
} stbi__png;
|
|
|
|
|
|
@@ -5112,6 +5113,13 @@
|
|
break;
|
|
}
|
|
|
|
+ case STBI__PNG_TYPE('g','A','M','A'): {
|
|
+ if (first) return stbi__err("first not IHDR", "Corrupt PNG");
|
|
+ if (4 != c.length) return stbi__err("invalid gAMA","Corrupt PNG");
|
|
+ z->gamma = stbi__get32be(s) / 100000.0f;
|
|
+ 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");
|
|
@@ -5243,7 +5251,7 @@
|
|
return r;
|
|
}
|
|
|
|
-static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp)
|
|
+static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp, float *gamma)
|
|
{
|
|
if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) {
|
|
stbi__rewind( p->s );
|
|
@@ -5252,21 +5260,22 @@
|
|
if (x) *x = p->s->img_x;
|
|
if (y) *y = p->s->img_y;
|
|
if (comp) *comp = p->s->img_n;
|
|
+ if (gamma) *gamma = p->gamma;
|
|
return 1;
|
|
}
|
|
|
|
-static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp)
|
|
+static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp, float *gamma)
|
|
{
|
|
stbi__png p;
|
|
p.s = s;
|
|
- return stbi__png_info_raw(&p, x, y, comp);
|
|
+ return stbi__png_info_raw(&p, x, y, comp, gamma);
|
|
}
|
|
|
|
static int stbi__png_is16(stbi__context *s)
|
|
{
|
|
stbi__png p;
|
|
p.s = s;
|
|
- if (!stbi__png_info_raw(&p, NULL, NULL, NULL))
|
|
+ if (!stbi__png_info_raw(&p, NULL, NULL, NULL, NULL))
|
|
return 0;
|
|
if (p.depth != 16) {
|
|
stbi__rewind(p.s);
|
|
@@ -7538,14 +7547,14 @@
|
|
}
|
|
#endif
|
|
|
|
-static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp)
|
|
+static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp, float *gamma)
|
|
{
|
|
#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;
|
|
+ if (stbi__png_info(s, x, y, comp, gamma)) return 1;
|
|
#endif
|
|
|
|
#ifndef STBI_NO_GIF
|
|
@@ -7597,23 +7606,23 @@
|
|
}
|
|
|
|
#ifndef STBI_NO_STDIO
|
|
-STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp)
|
|
+STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp, float *gamma)
|
|
{
|
|
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);
|
|
+ result = stbi_info_from_file(f, x, y, comp, gamma);
|
|
fclose(f);
|
|
return result;
|
|
}
|
|
|
|
-STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp)
|
|
+STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp, float *gamma)
|
|
{
|
|
int r;
|
|
stbi__context s;
|
|
long pos = ftell(f);
|
|
stbi__start_file(&s, f);
|
|
- r = stbi__info_main(&s,x,y,comp);
|
|
+ r = stbi__info_main(&s,x,y,comp, gamma);
|
|
fseek(f,pos,SEEK_SET);
|
|
return r;
|
|
}
|
|
@@ -7640,18 +7649,18 @@
|
|
}
|
|
#endif // !STBI_NO_STDIO
|
|
|
|
-STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp)
|
|
+STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, float *gamma)
|
|
{
|
|
stbi__context s;
|
|
stbi__start_mem(&s,buffer,len);
|
|
- return stbi__info_main(&s,x,y,comp);
|
|
+ return stbi__info_main(&s,x,y,comp, gamma);
|
|
}
|
|
|
|
-STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp)
|
|
+STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp, float *gamma)
|
|
{
|
|
stbi__context s;
|
|
stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user);
|
|
- return stbi__info_main(&s,x,y,comp);
|
|
+ return stbi__info_main(&s,x,y,comp, gamma);
|
|
}
|
|
|
|
STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len)
|