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

◆ restart()

static JRESULT fl::third_party::restart ( JDEC * jd,
uint16_t rstn )
static

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

521{
522 unsigned int i;
523 uint8_t *dp = jd->dptr;
524 size_t dc = jd->dctr;
525
526#if JD_FASTDECODE == 0
527 uint16_t d = 0;
528
529 /* Get two bytes from the input stream */
530 for (i = 0; i < 2; i++) {
531 if (!dc) { /* No input data is available, re-fill input buffer */
532 dp = jd->inbuf;
533 dc = jd->infunc(jd, dp, JD_SZBUF);
534 if (!dc) return JDR_INP;
535 } else {
536 dp++;
537 }
538 dc--;
539 d = d << 8 | *dp; /* Get a byte */
540 }
541 jd->dptr = dp; jd->dctr = dc; jd->dbit = 0;
542
543 /* Check the marker */
544 if ((d & 0xFFD8) != 0xFFD0 || (d & 7) != (rstn & 7)) {
545 return JDR_FMT1; /* Err: expected RSTn marker is not detected (may be collapted data) */
546 }
547
548#else
549 uint16_t marker;
550
551
552 if (jd->marker) { /* Generate a maker if it has been detected */
553 marker = 0xFF00 | jd->marker;
554 jd->marker = 0;
555 } else {
556 marker = 0;
557 for (i = 0; i < 2; i++) { /* Get a restart marker */
558 if (!dc) { /* No input data is available, re-fill input buffer */
559 dp = jd->inbuf;
560 dc = jd->infunc(jd, dp, JD_SZBUF);
561 if (!dc) return JDR_INP;
562 }
563 marker = (marker << 8) | *dp++; /* Get a byte */
564 dc--;
565 }
566 jd->dptr = dp; jd->dctr = dc;
567 }
568
569 /* Check the marker */
570 if ((marker & 0xFFD8) != 0xFFD0 || (marker & 7) != (rstn & 7)) {
571 return JDR_FMT1; /* Err: expected RSTn marker was not detected (may be collapted data) */
572 }
573
574 jd->dbit = 0; /* Discard stuff bits */
575#endif
576
577 jd->dcv[2] = jd->dcv[1] = jd->dcv[0] = 0; /* Reset DC offset */
578 return JDR_OK;
579}
fl::u16 uint16_t
Definition coder.h:214
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
int16_t dcv[3]
Definition tjpgd.h:59
uint8_t * inbuf
Definition tjpgd.h:53
#define JD_SZBUF
Definition tjpgdcnf.h:5

References FL_NOEXCEPT, JD_SZBUF, JDR_FMT1, JDR_INP, and JDR_OK.

Referenced by jd_decomp(), and jd_decomp_progressive().

+ Here is the caller graph for this function: