MCPcopy Create free account
hub / github.com/ARM-software/ComputeLibrary / stbi__process_gif_raster

Function stbi__process_gif_raster

include/stb/stb_image.h:6691–6774  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6689}
6690
6691static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g)
6692{
6693 stbi_uc lzw_cs;
6694 stbi__int32 len, init_code;
6695 stbi__uint32 first;
6696 stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear;
6697 stbi__gif_lzw *p;
6698
6699 lzw_cs = stbi__get8(s);
6700 if (lzw_cs > 12) return NULL;
6701 clear = 1 << lzw_cs;
6702 first = 1;
6703 codesize = lzw_cs + 1;
6704 codemask = (1 << codesize) - 1;
6705 bits = 0;
6706 valid_bits = 0;
6707 for (init_code = 0; init_code < clear; init_code++) {
6708 g->codes[init_code].prefix = -1;
6709 g->codes[init_code].first = (stbi_uc) init_code;
6710 g->codes[init_code].suffix = (stbi_uc) init_code;
6711 }
6712
6713 // support no starting clear code
6714 avail = clear+2;
6715 oldcode = -1;
6716
6717 len = 0;
6718 for(;;) {
6719 if (valid_bits < codesize) {
6720 if (len == 0) {
6721 len = stbi__get8(s); // start new block
6722 if (len == 0)
6723 return g->out;
6724 }
6725 --len;
6726 bits |= (stbi__int32) stbi__get8(s) << valid_bits;
6727 valid_bits += 8;
6728 } else {
6729 stbi__int32 code = bits & codemask;
6730 bits >>= codesize;
6731 valid_bits -= codesize;
6732 // @OPTIMIZE: is there some way we can accelerate the non-clear path?
6733 if (code == clear) { // clear code
6734 codesize = lzw_cs + 1;
6735 codemask = (1 << codesize) - 1;
6736 avail = clear + 2;
6737 oldcode = -1;
6738 first = 0;
6739 } else if (code == clear + 1) { // end of stream code
6740 stbi__skip(s, len);
6741 while ((len = stbi__get8(s)) > 0)
6742 stbi__skip(s,len);
6743 return g->out;
6744 } else if (code <= avail) {
6745 if (first) {
6746 return stbi__errpuc("no clear code", "Corrupt GIF");
6747 }
6748

Callers 1

stbi__gif_load_nextFunction · 0.85

Calls 3

stbi__get8Function · 0.85
stbi__skipFunction · 0.85
stbi__out_gif_codeFunction · 0.85

Tested by

no test coverage detected