|
|
@ -143,6 +143,7 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Latest revision history: |
|
|
|
Latest revision history: |
|
|
|
|
|
|
|
2.07 (2015-09-13) fix compiler warnings |
|
|
|
2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value |
|
|
|
2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value |
|
|
|
2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning |
|
|
|
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.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit |
|
|
@ -203,6 +204,7 @@ |
|
|
|
Martins Mozeiko |
|
|
|
Martins Mozeiko |
|
|
|
Joseph Thomson |
|
|
|
Joseph Thomson |
|
|
|
Phil Jordan |
|
|
|
Phil Jordan |
|
|
|
|
|
|
|
Nathan Reed |
|
|
|
|
|
|
|
|
|
|
|
LICENSE |
|
|
|
LICENSE |
|
|
|
|
|
|
|
|
|
|
@ -3502,10 +3504,10 @@ static int stbi__zbuild_huffman(stbi__zhuffman *z, stbi_uc *sizelist, int num) |
|
|
|
z->size [c] = (stbi_uc ) s; |
|
|
|
z->size [c] = (stbi_uc ) s; |
|
|
|
z->value[c] = (stbi__uint16) i; |
|
|
|
z->value[c] = (stbi__uint16) i; |
|
|
|
if (s <= STBI__ZFAST_BITS) { |
|
|
|
if (s <= STBI__ZFAST_BITS) { |
|
|
|
k = stbi__bit_reverse(next_code[s],s); |
|
|
|
int j = stbi__bit_reverse(next_code[s],s); |
|
|
|
while (k < (1 << STBI__ZFAST_BITS)) { |
|
|
|
while (j < (1 << STBI__ZFAST_BITS)) { |
|
|
|
z->fast[k] = fastv; |
|
|
|
z->fast[j] = fastv; |
|
|
|
k += (1 << s); |
|
|
|
j += (1 << s); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
++next_code[s]; |
|
|
|
++next_code[s]; |
|
|
@ -5556,7 +5558,7 @@ static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) |
|
|
|
static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) |
|
|
|
static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) |
|
|
|
{ |
|
|
|
{ |
|
|
|
stbi_uc lzw_cs; |
|
|
|
stbi_uc lzw_cs; |
|
|
|
stbi__int32 len, code; |
|
|
|
stbi__int32 len, init_code; |
|
|
|
stbi__uint32 first; |
|
|
|
stbi__uint32 first; |
|
|
|
stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; |
|
|
|
stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; |
|
|
|
stbi__gif_lzw *p; |
|
|
|
stbi__gif_lzw *p; |
|
|
@ -5569,10 +5571,10 @@ static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) |
|
|
|
codemask = (1 << codesize) - 1; |
|
|
|
codemask = (1 << codesize) - 1; |
|
|
|
bits = 0; |
|
|
|
bits = 0; |
|
|
|
valid_bits = 0; |
|
|
|
valid_bits = 0; |
|
|
|
for (code = 0; code < clear; code++) { |
|
|
|
for (init_code = 0; init_code < clear; init_code++) { |
|
|
|
g->codes[code].prefix = -1; |
|
|
|
g->codes[init_code].prefix = -1; |
|
|
|
g->codes[code].first = (stbi_uc) code; |
|
|
|
g->codes[init_code].first = (stbi_uc) init_code; |
|
|
|
g->codes[code].suffix = (stbi_uc) code; |
|
|
|
g->codes[init_code].suffix = (stbi_uc) init_code; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// support no starting clear code
|
|
|
|
// support no starting clear code
|
|
|
@ -5591,7 +5593,7 @@ static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) |
|
|
|
bits |= (stbi__int32) stbi__get8(s) << valid_bits; |
|
|
|
bits |= (stbi__int32) stbi__get8(s) << valid_bits; |
|
|
|
valid_bits += 8; |
|
|
|
valid_bits += 8; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
code = bits & codemask; |
|
|
|
stbi__int32 code = bits & codemask; |
|
|
|
bits >>= codesize; |
|
|
|
bits >>= codesize; |
|
|
|
valid_bits -= codesize; |
|
|
|
valid_bits -= codesize; |
|
|
|
// @OPTIMIZE: is there some way we can accelerate the non-clear path?
|
|
|
|
// @OPTIMIZE: is there some way we can accelerate the non-clear path?
|
|
|
|