803{
804 const int CVACC = (sizeof (int) > 2) ? 1024 : 128;
805 unsigned int ix, iy, mx, my, rx, ry;
806 int yy, cb, cr;
810
811
812 mx = jd->
msx * 8; my = jd->
msy * 8;
817 if (!rx || !ry)
return JDR_OK;
819 }
822
823
826
828 for (iy = 0; iy < my; iy++) {
830 if (my == 16) {
831 pc += 64 * 4 + (iy >> 1) * 8;
832 if (iy >= 8) py += 64;
833 } else {
834 pc += mx * 8 + iy * 8;
835 }
836 py += iy * 8;
837 for (ix = 0; ix < mx; ix++) {
838 cb = pc[0] - 128;
839 cr = pc[64] - 128;
840 if (mx == 16) {
841 if (ix == 8) py += 64 - 8;
842 pc += ix & 1;
843 } else {
844 pc++;
845 }
846 yy = *py++;
847 *pix++ =
BYTECLIP(yy + ((
int)(1.402 * CVACC) * cr) / CVACC);
848 *pix++ =
BYTECLIP(yy - ((
int)(0.344 * CVACC) * cb + (
int)(0.714 * CVACC) * cr) / CVACC);
849 *pix++ =
BYTECLIP(yy + ((
int)(1.772 * CVACC) * cb) / CVACC);
850 }
851 }
852 } else {
853 for (iy = 0; iy < my; iy++) {
855 if (my == 16) {
856 if (iy >= 8) py += 64;
857 }
858 for (ix = 0; ix < mx; ix++) {
859 if (mx == 16) {
860 if (ix == 8) py += 64 - 8;
861 }
864 } else {
865 *pix++ = *py++;
866 }
867 }
868 }
869 }
870
871
873 unsigned int x,
y, r, g, b, s, w, a;
875
876
881 for (iy = 0; iy < my; iy += w) {
882 for (ix = 0; ix < mx; ix += w) {
884 r = g = b = 0;
885 for (
y = 0;
y < w;
y++) {
886 for (
x = 0;
x < w;
x++) {
887 r += *pix++;
889 g += *pix++;
890 b += *pix++;
891 }
892 }
893 pix += a;
894 }
899 }
900 }
901 }
902 }
903
904 } else {
905
906
908 pc = jd->
mcubuf + mx * my;
909 cb = pc[0] - 128;
910 cr = pc[64] - 128;
911 for (iy = 0; iy < my; iy += 8) {
913 if (iy == 8) py += 64 * 2;
914 for (ix = 0; ix < mx; ix += 8) {
915 yy = *py;
916 py += 64;
918 *pix++ =
BYTECLIP(yy + ((
int)(1.402 * CVACC) * cr / CVACC));
919 *pix++ =
BYTECLIP(yy - ((
int)(0.344 * CVACC) * cb + (
int)(0.714 * CVACC) * cr) / CVACC);
920 *pix++ =
BYTECLIP(yy + ((
int)(1.772 * CVACC) * cb / CVACC));
921 } else {
922 *pix++ = yy;
923 }
924 }
925 }
926 }
927
928
930 if (rx < mx) {
933
935 for (
y = 0;
y < ry;
y++) {
936 for (
x = 0;
x < rx;
x++) {
937 *d++ = *s++;
939 *d++ = *s++;
940 *d++ = *s++;
941 }
942 }
943 s += (mx - rx) * (
JD_FORMAT != 2 ? 3 : 1);
944 }
945 }
946
947
951 unsigned int n = rx * ry;
952
954 {
955 do {
956 w = (*s++ & 0xF8) << 8;
957 w |= (*s++ & 0xFC) << 3;
958 w |= *s++ >> 3;
959 *d++ = (w << 8) | (w >> 8);
960 } while (--n);
961 }
962 else
963 {
964 do {
965 w = ( *s++ & 0xF8) << 8;
966 w |= (*s++ & 0xFC) << 3;
967 w |= *s++ >> 3;
968 *d++ = w;
969 } while (--n);
970 }
971 }
972
973
975}
static uint8_t BYTECLIP(int val) FL_NOEXCEPT