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

◆ block_idct()

static void fl::third_party::block_idct ( int32_t * src,
jd_yuv_t * dst )
static

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

592{
593 const int32_t M13 = (int32_t)(1.41421*4096), M2 = (int32_t)(1.08239*4096), M4 = (int32_t)(2.61313*4096), M5 = (int32_t)(1.84776*4096);
594 int32_t v0, v1, v2, v3, v4, v5, v6, v7;
595 int32_t t10, t11, t12, t13;
596 int i;
597
598 /* Process columns */
599 for (i = 0; i < 8; i++) {
600 v0 = src[8 * 0]; /* Get even elements */
601 v1 = src[8 * 2];
602 v2 = src[8 * 4];
603 v3 = src[8 * 6];
604
605 t10 = v0 + v2; /* Process the even elements */
606 t12 = v0 - v2;
607 t11 = (v1 - v3) * M13 >> 12;
608 v3 += v1;
609 t11 -= v3;
610 v0 = t10 + v3;
611 v3 = t10 - v3;
612 v1 = t11 + t12;
613 v2 = t12 - t11;
614
615 v4 = src[8 * 7]; /* Get odd elements */
616 v5 = src[8 * 1];
617 v6 = src[8 * 5];
618 v7 = src[8 * 3];
619
620 t10 = v5 - v4; /* Process the odd elements */
621 t11 = v5 + v4;
622 t12 = v6 - v7;
623 v7 += v6;
624 v5 = (t11 - v7) * M13 >> 12;
625 v7 += t11;
626 t13 = (t10 + t12) * M5 >> 12;
627 v4 = t13 - (t10 * M2 >> 12);
628 v6 = t13 - (t12 * M4 >> 12) - v7;
629 v5 -= v6;
630 v4 -= v5;
631
632 src[8 * 0] = v0 + v7; /* Write-back transformed values */
633 src[8 * 7] = v0 - v7;
634 src[8 * 1] = v1 + v6;
635 src[8 * 6] = v1 - v6;
636 src[8 * 2] = v2 + v5;
637 src[8 * 5] = v2 - v5;
638 src[8 * 3] = v3 + v4;
639 src[8 * 4] = v3 - v4;
640
641 src++; /* Next column */
642 }
643
644 /* Process rows */
645 src -= 8;
646 for (i = 0; i < 8; i++) {
647 v0 = src[0] + (128L << 8); /* Get even elements (remove DC offset (-128) here) */
648 v1 = src[2];
649 v2 = src[4];
650 v3 = src[6];
651
652 t10 = v0 + v2; /* Process the even elements */
653 t12 = v0 - v2;
654 t11 = (v1 - v3) * M13 >> 12;
655 v3 += v1;
656 t11 -= v3;
657 v0 = t10 + v3;
658 v3 = t10 - v3;
659 v1 = t11 + t12;
660 v2 = t12 - t11;
661
662 v4 = src[7]; /* Get odd elements */
663 v5 = src[1];
664 v6 = src[5];
665 v7 = src[3];
666
667 t10 = v5 - v4; /* Process the odd elements */
668 t11 = v5 + v4;
669 t12 = v6 - v7;
670 v7 += v6;
671 v5 = (t11 - v7) * M13 >> 12;
672 v7 += t11;
673 t13 = (t10 + t12) * M5 >> 12;
674 v4 = t13 - (t10 * M2 >> 12);
675 v6 = t13 - (t12 * M4 >> 12) - v7;
676 v5 -= v6;
677 v4 -= v5;
678
679 /* Descale the transformed values 8 bits and output a row */
680#if JD_FASTDECODE >= 1
681 dst[0] = (int16_t)((v0 + v7) >> 8);
682 dst[7] = (int16_t)((v0 - v7) >> 8);
683 dst[1] = (int16_t)((v1 + v6) >> 8);
684 dst[6] = (int16_t)((v1 - v6) >> 8);
685 dst[2] = (int16_t)((v2 + v5) >> 8);
686 dst[5] = (int16_t)((v2 - v5) >> 8);
687 dst[3] = (int16_t)((v3 + v4) >> 8);
688 dst[4] = (int16_t)((v3 - v4) >> 8);
689#else
690 dst[0] = BYTECLIP((v0 + v7) >> 8);
691 dst[7] = BYTECLIP((v0 - v7) >> 8);
692 dst[1] = BYTECLIP((v1 + v6) >> 8);
693 dst[6] = BYTECLIP((v1 - v6) >> 8);
694 dst[2] = BYTECLIP((v2 + v5) >> 8);
695 dst[5] = BYTECLIP((v2 - v5) >> 8);
696 dst[3] = BYTECLIP((v3 + v4) >> 8);
697 dst[4] = BYTECLIP((v3 - v4) >> 8);
698#endif
699
700 dst += 8; src += 8; /* Next row */
701 }
702}
static uint8_t BYTECLIP(int val) FL_NOEXCEPT
fl::i32 int32_t
Definition coder.h:220
fl::i16 int16_t
Definition s16x16x4.h:215

References BYTECLIP(), and FL_NOEXCEPT.

Referenced by mcu_load().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: