436{
437 size_t dc = jd->
dctr;
439 unsigned int d, flg = 0;
440
441#if JD_FASTDECODE == 0
443
444 d = 0;
445 do {
446 if (!mbit) {
447 if (!dc) {
450 if (!dc)
return 0 - (int)
JDR_INP;
451 } else {
452 dp++;
453 }
454 dc--;
455 if (flg) {
456 flg = 0;
457 if (*dp != 0)
return 0 - (int)
JDR_FMT1;
458 *dp = 0xFF;
459 } else {
460 if (*dp == 0xFF) {
461 flg = 1; continue;
462 }
463 }
464 mbit = 0x80;
465 }
466 d <<= 1;
467 if (*dp & mbit) d |= 1;
468 mbit >>= 1;
469 nbit--;
470 } while (nbit);
471
473 return (int)d;
474
475#else
476 unsigned int wbit = jd->
dbit % 32;
477 uint32_t w = jd->wreg & ((1UL << wbit) - 1);
478
479
480 while (wbit < nbit) {
481 if (jd->marker) {
482 d = 0xFF;
483 } else {
484 if (!dc) {
487 if (!dc)
return 0 - (int)
JDR_INP;
488 }
489 d = *dp++; dc--;
490 if (flg) {
491 flg = 0;
492 if (d != 0) jd->marker = d;
493 d = 0xFF;
494 } else {
495 if (d == 0xFF) {
496 flg = 1; continue;
497 }
498 }
499 }
500 w = w << 8 | d;
501 wbit += 8;
502 }
503 jd->wreg = w; jd->
dbit = wbit - nbit;
505
506 return (int)(w >> ((wbit - nbit) % 32));
507#endif
508}
size_t(* infunc)(JDEC *, uint8_t *, size_t)