Skip to content

Commit 7a01aaa

Browse files
GIF decoder works
1 parent 1919a34 commit 7a01aaa

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

MCGalaxy/util/Imaging/GifDecoder.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ void ReadImage(byte[] src, SimpleBitmap bmp) {
209209
dict[availCode].len = 1;
210210
}
211211

212-
availCode += 2; // "clear code" and "stop code" entries
212+
availCode++; // "clear code" and "stop code" entries
213213
prevCode = -1;
214214

215215
for (;;)
@@ -222,7 +222,9 @@ void ReadImage(byte[] src, SimpleBitmap bmp) {
222222
bufLen += 8;
223223
}
224224

225-
if (bufLen < codeLen) Fail("not enough bits for code");
225+
if (bufLen < codeLen) {
226+
Fail("not enough bits for code");
227+
}
226228
}
227229

228230
int code = (int)(bufVal & codeMask);
@@ -241,13 +243,15 @@ void ReadImage(byte[] src, SimpleBitmap bmp) {
241243
dict[availCode].len = 1;
242244
}
243245

244-
availCode += 2; // "clear code" and "stop code" entries
246+
availCode++; // "clear code" and "stop code" entries
245247
prevCode = -1;
246248
} else if (code == stopCode) {
247249
break;
248250
}
249251

250-
if (code > availCode) Fail("invalid code");
252+
if (code > availCode) {
253+
Fail("invalid code");
254+
}
251255

252256
// Add new entry to code table unless it's full
253257
// GIF spec allows this as per 'deferred clear codes'
@@ -263,15 +267,15 @@ void ReadImage(byte[] src, SimpleBitmap bmp) {
263267
dict[availCode].value = dict[firstCode].value;
264268
dict[availCode].prev = (short)prevCode;
265269
dict[availCode].len = (short)(dict[prevCode].len + 1);
270+
availCode++;
266271

267272
// Check if inserted code in last free entry of table
268273
// If this is the case, then the table is immediately expanded
269-
if (availCode == codeMask && availCode != (MAX_CODES - 1)) {
274+
if ((availCode & codeMask) == 0 && availCode != (MAX_CODES - 1)) {
270275
codeLen++;
271276
codeMask = (1 << codeLen) - 1;
272277
Array.Resize(ref dict, 1 << codeLen);
273278
}
274-
availCode++;
275279
}
276280

277281
prevCode = code;
@@ -315,6 +319,7 @@ int ReadNextByte() {
315319
subBlocksEnd = true;
316320
return -1;
317321
}
322+
AdvanceOffset(curSubBlockLeft);
318323
}
319324

320325
curSubBlockLeft--;

0 commit comments

Comments
 (0)