FastLED 3.9.15
Loading...
Searching...
No Matches

◆ bitext()

static int fl::third_party::bitext ( JDEC * jd,
unsigned int nbit )
static

Definition at line 432 of file tjpgd.cpp.hpp.

436{
437 size_t dc = jd->dctr;
438 uint8_t *dp = jd->dptr;
439 unsigned int d, flg = 0;
440
441#if JD_FASTDECODE == 0
442 uint8_t mbit = jd->dbit;
443
444 d = 0;
445 do {
446 if (!mbit) { /* Next byte? */
447 if (!dc) { /* No input data is available, re-fill input buffer */
448 dp = jd->inbuf; /* Top of input buffer */
449 dc = jd->infunc(jd, dp, JD_SZBUF);
450 if (!dc) return 0 - (int)JDR_INP; /* Err: read error or wrong stream termination */
451 } else {
452 dp++; /* Next data ptr */
453 }
454 dc--; /* Decrement number of available bytes */
455 if (flg) { /* In flag sequence? */
456 flg = 0; /* Exit flag sequence */
457 if (*dp != 0) return 0 - (int)JDR_FMT1; /* Err: unexpected flag is detected (may be collapted data) */
458 *dp = 0xFF; /* The flag is a data 0xFF */
459 } else {
460 if (*dp == 0xFF) { /* Is start of flag sequence? */
461 flg = 1; continue; /* Enter flag sequence */
462 }
463 }
464 mbit = 0x80; /* Read from MSB */
465 }
466 d <<= 1; /* Get a bit */
467 if (*dp & mbit) d |= 1;
468 mbit >>= 1;
469 nbit--;
470 } while (nbit);
471
472 jd->dbit = mbit; jd->dctr = dc; jd->dptr = dp;
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) { /* Prepare nbit bits into the working register */
481 if (jd->marker) {
482 d = 0xFF; /* Input stream stalled, generate stuff bits */
483 } else {
484 if (!dc) { /* Buffer empty, re-fill input buffer */
485 dp = jd->inbuf; /* Top of input buffer */
486 dc = jd->infunc(jd, dp, JD_SZBUF);
487 if (!dc) return 0 - (int)JDR_INP; /* Err: read error or wrong stream termination */
488 }
489 d = *dp++; dc--;
490 if (flg) { /* In flag sequence? */
491 flg = 0; /* Exit flag sequence */
492 if (d != 0) jd->marker = d; /* Not an escape of 0xFF but a marker */
493 d = 0xFF;
494 } else {
495 if (d == 0xFF) { /* Is start of flag sequence? */
496 flg = 1; continue; /* Enter flag sequence, get trailing byte */
497 }
498 }
499 }
500 w = w << 8 | d; /* Get 8 bits into the working register */
501 wbit += 8;
502 }
503 jd->wreg = w; jd->dbit = wbit - nbit;
504 jd->dctr = dc; jd->dptr = dp;
505
506 return (int)(w >> ((wbit - nbit) % 32));
507#endif
508}
fl::u32 uint32_t
Definition coder.h:219
unsigned char uint8_t
Definition coder.h:209
uint8_t * dptr
Definition tjpgd.h:52
size_t(* infunc)(JDEC *, uint8_t *, size_t)
Definition tjpgd.h:79
uint8_t * inbuf
Definition tjpgd.h:53
#define JD_SZBUF
Definition tjpgdcnf.h:5

References FL_NOEXCEPT, JD_SZBUF, JDR_FMT1, and JDR_INP.

Referenced by mcu_load().

+ Here is the caller graph for this function: