296{
297 size_t dc = jd->
dctr;
299 unsigned int d, flg = 0;
300
301#if JD_FASTDECODE == 0
306
307
309 d = 0; bl = 16;
310 do {
311 if (!bm) {
312 if (!dc) {
315 if (!dc)
return 0 - (int)
JDR_INP;
316 } else {
317 dp++;
318 }
319 dc--;
320 if (flg) {
321 flg = 0;
322 if (*dp != 0)
return 0 - (int)
JDR_FMT1;
323 *dp = 0xFF;
324 } else {
325 if (*dp == 0xFF) {
326 flg = 1; continue;
327 }
328 }
329 bm = 0x80;
330 }
331 d <<= 1;
332 if (*dp & bm) d++;
333 bm >>= 1;
334
335 for (nd = *hb++; nd; nd--) {
336 if (d == *hc++) {
338 return *hd;
339 }
340 hd++;
341 }
342 bl--;
343 } while (bl);
344
345#else
348 unsigned int nc, bl, wbit = jd->
dbit % 32;
349 uint32_t w = jd->wreg & ((1UL << wbit) - 1);
350
351
352 while (wbit < 16) {
353 if (jd->marker) {
354 d = 0xFF;
355 } else {
356 if (!dc) {
359 if (!dc)
return 0 - (int)
JDR_INP;
360 }
361 d = *dp++; dc--;
362 if (flg) {
363 flg = 0;
364 if (d != 0) jd->marker = d;
365 d = 0xFF;
366 } else {
367 if (d == 0xFF) {
368 flg = 1; continue;
369 }
370 }
371 }
372 w = w << 8 | d;
373 wbit += 8;
374 }
376 jd->wreg = w;
377
378#if JD_FASTDECODE == 2
379
380 d = (unsigned int)(w >> (wbit - HUFF_BIT));
381 if (cls) {
382 d = jd->hufflut_ac[id][d];
383 if (d != 0xFFFF) {
384 jd->
dbit = wbit - (d >> 8);
385 return d & 0xFF;
386 }
387 } else {
388 d = jd->hufflut_dc[id][d];
389 if (d != 0xFF) {
390 jd->
dbit = wbit - (d >> 4);
391 return d & 0xF;
392 }
393 }
394
395
396 hb = jd->
huffbits[id][cls] + HUFF_BIT;
397 hc = jd->
huffcode[id][cls] + jd->longofs[id][cls];
398 hd = jd->
huffdata[id][cls] + jd->longofs[id][cls];
399 bl = HUFF_BIT + 1;
400#else
401
405 bl = 1;
406#endif
407 for ( ; bl <= 16; bl++) {
408 nc = *hb++;
409 if (nc) {
410 d = w >> (wbit - bl);
411 do {
412 if (d == *hc++) {
413 jd->
dbit = wbit - bl;
414 return *hd;
415 }
416 hd++;
417 } while (--nc);
418 }
419 }
420#endif
421
423}
size_t(* infunc)(JDEC *, uint8_t *, size_t)
uint16_t * huffcode[2][2]