|
@@ -1,4 +1,4 @@
|
|
-/* stb_image - v2.03 - public domain image loader - http://nothings.org/stb_image.h
|
|
|
|
|
|
+/* stb_image - v2.05 - public domain image loader - http://nothings.org/stb_image.h
|
|
no warranty implied; use at your own risk
|
|
no warranty implied; use at your own risk
|
|
|
|
|
|
Do this:
|
|
Do this:
|
|
@@ -143,6 +143,8 @@
|
|
|
|
|
|
|
|
|
|
Latest revision history:
|
|
Latest revision history:
|
|
|
|
+ 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning
|
|
|
|
+ 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit
|
|
2.03 (2015-04-12) additional corruption checking
|
|
2.03 (2015-04-12) additional corruption checking
|
|
stbi_set_flip_vertically_on_load
|
|
stbi_set_flip_vertically_on_load
|
|
fix NEON support; fix mingw support
|
|
fix NEON support; fix mingw support
|
|
@@ -159,8 +161,6 @@
|
|
1.47 (2014-12-14) 1/2/4-bit PNG support (both grayscale and paletted)
|
|
1.47 (2014-12-14) 1/2/4-bit PNG support (both grayscale and paletted)
|
|
optimize PNG
|
|
optimize PNG
|
|
fix bug in interlaced PNG with user-specified channel count
|
|
fix bug in interlaced PNG with user-specified channel count
|
|
- 1.46 (2014-08-26) fix broken tRNS chunk in non-paletted PNG
|
|
|
|
- 1.45 (2014-08-16) workaround MSVC-ARM internal compiler error by wrapping malloc
|
|
|
|
|
|
|
|
See end of file for full revision history.
|
|
See end of file for full revision history.
|
|
|
|
|
|
@@ -633,11 +633,14 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1];
|
|
#endif
|
|
#endif
|
|
|
|
|
|
// x86/x64 detection
|
|
// x86/x64 detection
|
|
-#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86)
|
|
|
|
|
|
+#if defined(__x86_64__) || defined(_M_X64)
|
|
|
|
+#define STBI__X64_TARGET
|
|
|
|
+#elif defined(__i386) || defined(_M_IX86)
|
|
#define STBI__X86_TARGET
|
|
#define STBI__X86_TARGET
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD)
|
|
|
|
|
|
+#if defined(__GNUC__) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) && !defined(__SSE2__) && !defined(STBI_NO_SIMD)
|
|
|
|
+// NOTE: not clear do we actually need this for the 64-bit path?
|
|
// gcc doesn't support sse2 intrinsics unless you compile with -msse2,
|
|
// gcc doesn't support sse2 intrinsics unless you compile with -msse2,
|
|
// (but compiling with -msse2 allows the compiler to use SSE2 everywhere;
|
|
// (but compiling with -msse2 allows the compiler to use SSE2 everywhere;
|
|
// this is just broken and gcc are jerks for not fixing it properly
|
|
// this is just broken and gcc are jerks for not fixing it properly
|
|
@@ -646,6 +649,8 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1];
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD)
|
|
#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD)
|
|
|
|
+// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET
|
|
|
|
+//
|
|
// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the
|
|
// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the
|
|
// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant.
|
|
// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant.
|
|
// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not
|
|
// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not
|
|
@@ -1640,7 +1645,7 @@ stbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n)
|
|
|
|
|
|
sgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB
|
|
sgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB
|
|
k = stbi_lrot(j->code_buffer, n);
|
|
k = stbi_lrot(j->code_buffer, n);
|
|
- STBI_ASSERT(n >= 0 && n < sizeof(stbi__bmask)/sizeof(*stbi__bmask));
|
|
|
|
|
|
+ STBI_ASSERT(n >= 0 && n < (int) (sizeof(stbi__bmask)/sizeof(*stbi__bmask)));
|
|
j->code_buffer = k & ~stbi__bmask[n];
|
|
j->code_buffer = k & ~stbi__bmask[n];
|
|
k &= stbi__bmask[n];
|
|
k &= stbi__bmask[n];
|
|
j->code_bits -= n;
|
|
j->code_bits -= n;
|
|
@@ -1846,8 +1851,11 @@ static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__
|
|
if (r)
|
|
if (r)
|
|
j->eob_run += stbi__jpeg_get_bits(j, r);
|
|
j->eob_run += stbi__jpeg_get_bits(j, r);
|
|
r = 64; // force end of block
|
|
r = 64; // force end of block
|
|
- } else
|
|
|
|
- r = 16; // r=15 is the code for 16 0s
|
|
|
|
|
|
+ } else {
|
|
|
|
+ // r=15 s=0 should write 16 0s, so we just do
|
|
|
|
+ // a run of 15 0s and then write s (which is 0),
|
|
|
|
+ // so we don't have to do anything special here
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG");
|
|
if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG");
|
|
// sign bit
|
|
// sign bit
|
|
@@ -1859,7 +1867,7 @@ static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__
|
|
|
|
|
|
// advance by r
|
|
// advance by r
|
|
while (k <= j->spec_end) {
|
|
while (k <= j->spec_end) {
|
|
- short *p = &data[stbi__jpeg_dezigzag[k]];
|
|
|
|
|
|
+ short *p = &data[stbi__jpeg_dezigzag[k++]];
|
|
if (*p != 0) {
|
|
if (*p != 0) {
|
|
if (stbi__jpeg_get_bit(j))
|
|
if (stbi__jpeg_get_bit(j))
|
|
if ((*p & bit)==0) {
|
|
if ((*p & bit)==0) {
|
|
@@ -1868,15 +1876,12 @@ static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__
|
|
else
|
|
else
|
|
*p -= bit;
|
|
*p -= bit;
|
|
}
|
|
}
|
|
- ++k;
|
|
|
|
} else {
|
|
} else {
|
|
if (r == 0) {
|
|
if (r == 0) {
|
|
- if (s)
|
|
|
|
- data[stbi__jpeg_dezigzag[k++]] = (short) s;
|
|
|
|
|
|
+ *p = (short) s;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
--r;
|
|
--r;
|
|
- ++k;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} while (k <= j->spec_end);
|
|
} while (k <= j->spec_end);
|
|
@@ -6287,6 +6292,8 @@ STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int
|
|
|
|
|
|
/*
|
|
/*
|
|
revision history:
|
|
revision history:
|
|
|
|
+ 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning
|
|
|
|
+ 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit
|
|
2.03 (2015-04-12) extra corruption checking (mmozeiko)
|
|
2.03 (2015-04-12) extra corruption checking (mmozeiko)
|
|
stbi_set_flip_vertically_on_load (nguillemot)
|
|
stbi_set_flip_vertically_on_load (nguillemot)
|
|
fix NEON support; fix mingw support
|
|
fix NEON support; fix mingw support
|