41 #include <visp3/core/vpConfig.h>
42 #include <visp3/core/vpImageConvert.h>
74 int r, g, b, cr, cg, cb, y1, y2;
76 h =
static_cast<int>(height);
77 w =
static_cast<int>(width);
85 cb = ((*s - 128) * 454) / 256;
90 cr = ((*s - 128) * 359) / 256;
91 cg = (cg + ((*s - 128) * 183)) / 256;
101 *d++ =
static_cast<unsigned char>(r);
102 *d++ =
static_cast<unsigned char>(g);
103 *d++ =
static_cast<unsigned char>(b);
113 *d++ =
static_cast<unsigned char>(r);
114 *d++ =
static_cast<unsigned char>(g);
115 *d++ =
static_cast<unsigned char>(b);
136 int r, g, b, cr, cg, cb, y1, y2;
138 h =
static_cast<int>(height);
139 w =
static_cast<int>(width);
147 cb = ((*s - 128) * 454) / 256;
148 cg = (*s - 128) * 88;
152 cr = ((*s - 128) * 359) / 256;
153 cg = (cg + ((*s - 128) * 183)) / 256;
163 *d++ =
static_cast<unsigned char>(r);
164 *d++ =
static_cast<unsigned char>(g);
165 *d++ =
static_cast<unsigned char>(b);
174 *d++ =
static_cast<unsigned char>(r);
175 *d++ =
static_cast<unsigned char>(g);
176 *d++ =
static_cast<unsigned char>(b);
193 unsigned int i = 0, j = 0;
194 const unsigned int doubleSize = size * 2;
195 while (j < doubleSize) {
197 grey[i++] = yuyv[j + 2];
213 for (
unsigned int i = size / 4; i; --i) {
214 int U =
static_cast<int>((*yuv - 128) * 0.354);
221 int V =
static_cast<int>((*yuv - 128) * 0.707);
243 *rgba++ =
static_cast<unsigned char>(R);
244 *rgba++ =
static_cast<unsigned char>(G);
245 *rgba++ =
static_cast<unsigned char>(B);
258 *rgba++ =
static_cast<unsigned char>(R);
259 *rgba++ =
static_cast<unsigned char>(G);
260 *rgba++ =
static_cast<unsigned char>(B);
273 *rgba++ =
static_cast<unsigned char>(R);
274 *rgba++ =
static_cast<unsigned char>(G);
275 *rgba++ =
static_cast<unsigned char>(B);
288 *rgba++ =
static_cast<unsigned char>(R);
289 *rgba++ =
static_cast<unsigned char>(G);
290 *rgba++ =
static_cast<unsigned char>(B);
309 for (
unsigned int i = size / 2; i; --i) {
310 int U =
static_cast<int>((*yuv - 128) * 0.354);
315 int V =
static_cast<int>((*yuv - 128) * 0.707);
332 *rgba++ =
static_cast<unsigned char>(R);
333 *rgba++ =
static_cast<unsigned char>(G);
334 *rgba++ =
static_cast<unsigned char>(B);
347 *rgba++ =
static_cast<unsigned char>(R);
348 *rgba++ =
static_cast<unsigned char>(G);
349 *rgba++ =
static_cast<unsigned char>(B);
364 unsigned int i = 0, j = 0;
365 const unsigned int iterLimit = (size * 3) / 2;
366 while (j < iterLimit) {
367 grey[i] = yuv[j + 1];
368 grey[i + 1] = yuv[j + 2];
369 grey[i + 2] = yuv[j + 4];
370 grey[i + 3] = yuv[j + 5];
390 for (
unsigned int i = size / 2; i; --i) {
391 int U =
static_cast<int>((*yuv - 128) * 0.354);
396 int V =
static_cast<int>((*yuv - 128) * 0.707);
413 *rgb++ =
static_cast<unsigned char>(R);
414 *rgb++ =
static_cast<unsigned char>(G);
415 *rgb++ =
static_cast<unsigned char>(B);
427 *rgb++ =
static_cast<unsigned char>(R);
428 *rgb++ =
static_cast<unsigned char>(G);
429 *rgb++ =
static_cast<unsigned char>(B);
445 unsigned int i = 0, j = 0;
446 const unsigned int doubleSize = size * 2;
448 while (j < doubleSize) {
449 grey[i++] = yuv[j + 1];
450 grey[i++] = yuv[j + 3];
465 for (
unsigned int i = size / 4; i; --i) {
466 int U =
static_cast<int>((*yuv - 128) * 0.354);
473 int V =
static_cast<int>((*yuv - 128) * 0.707);
495 *rgb++ =
static_cast<unsigned char>(R);
496 *rgb++ =
static_cast<unsigned char>(G);
497 *rgb++ =
static_cast<unsigned char>(B);
509 *rgb++ =
static_cast<unsigned char>(R);
510 *rgb++ =
static_cast<unsigned char>(G);
511 *rgb++ =
static_cast<unsigned char>(B);
523 *rgb++ =
static_cast<unsigned char>(R);
524 *rgb++ =
static_cast<unsigned char>(G);
525 *rgb++ =
static_cast<unsigned char>(B);
537 *rgb++ =
static_cast<unsigned char>(R);
538 *rgb++ =
static_cast<unsigned char>(G);
539 *rgb++ =
static_cast<unsigned char>(B);
555 int U, V, R, G, B, V2, U5, UV;
557 unsigned int size = width * height;
558 unsigned char *iU = yuv + size;
559 unsigned char *iV = yuv + ((5 * size) / 4);
560 const unsigned int halfHeight = height / 2, halfWidth = width / 2;
561 for (
unsigned int i = 0; i < halfHeight; ++i) {
562 for (
unsigned int j = 0; j < halfWidth; ++j) {
563 U =
static_cast<int>(((*iU) - 128) * 0.354);
566 V =
static_cast<int>(((*iV) - 128) * 0.707);
573 yuv = yuv + (width - 1);
577 yuv = (yuv - width) + 1;
592 *rgba++ =
static_cast<unsigned char>(R);
593 *rgba++ =
static_cast<unsigned char>(G);
594 *rgba++ =
static_cast<unsigned char>(B);
607 *rgba++ =
static_cast<unsigned char>(R);
608 *rgba++ =
static_cast<unsigned char>(G);
609 *rgba++ =
static_cast<unsigned char>(B);
611 rgba = (rgba + (4 * width)) - 7;
623 *rgba++ =
static_cast<unsigned char>(R);
624 *rgba++ =
static_cast<unsigned char>(G);
625 *rgba++ =
static_cast<unsigned char>(B);
638 *rgba++ =
static_cast<unsigned char>(R);
639 *rgba++ =
static_cast<unsigned char>(G);
640 *rgba++ =
static_cast<unsigned char>(B);
642 rgba = (rgba - (4 * width)) + 1;
659 int U, V, R, G, B, V2, U5, UV;
661 unsigned int size = width * height;
662 unsigned char *iU = yuv + size;
663 unsigned char *iV = yuv + ((5 * size) / 4);
664 const unsigned int halfHeight = height / 2, halfWidth = width / 2;
665 for (
unsigned int i = 0; i < halfHeight; ++i) {
666 for (
unsigned int j = 0; j < halfWidth; ++j) {
667 U =
static_cast<int>(((*iU) - 128) * 0.354);
670 V =
static_cast<int>(((*iV) - 128) * 0.707);
677 yuv = yuv + (width - 1);
681 yuv = (yuv - width) + 1;
696 *rgb++ =
static_cast<unsigned char>(R);
697 *rgb++ =
static_cast<unsigned char>(G);
698 *rgb++ =
static_cast<unsigned char>(B);
710 *rgb++ =
static_cast<unsigned char>(R);
711 *rgb++ =
static_cast<unsigned char>(G);
712 *rgb =
static_cast<unsigned char>(B);
713 rgb = rgb + ((3 * width) - 5);
725 *rgb++ =
static_cast<unsigned char>(R);
726 *rgb++ =
static_cast<unsigned char>(G);
727 *rgb++ =
static_cast<unsigned char>(B);
739 *rgb++ =
static_cast<unsigned char>(R);
740 *rgb++ =
static_cast<unsigned char>(G);
741 *rgb =
static_cast<unsigned char>(B);
742 rgb = (rgb - (3 * width)) + 1;
758 for (
unsigned int i = 0; i < size; ++i) {
775 for (
unsigned int i = 0; i < size; ++i) {
776 int U =
static_cast<int>((*yuv - 128) * 0.354);
781 int V =
static_cast<int>((*yuv - 128) * 0.707);
799 *rgba++ =
static_cast<unsigned char>(R);
800 *rgba++ =
static_cast<unsigned char>(G);
801 *rgba++ =
static_cast<unsigned char>(B);
815 for (
unsigned int i = 0; i < size; ++i) {
816 int U =
static_cast<int>((*yuv - 128) * 0.354);
821 int V =
static_cast<int>((*yuv - 128) * 0.707);
839 *rgb++ =
static_cast<unsigned char>(R);
840 *rgb++ =
static_cast<unsigned char>(G);
841 *rgb++ =
static_cast<unsigned char>(B);
855 for (
unsigned int i = 0; i < size; ++i) {
873 int U, V, R, G, B, V2, U5, UV;
875 unsigned int size = width * height;
876 unsigned char *iV = yuv + size;
877 unsigned char *iU = yuv + ((5 * size) / 4);
878 const unsigned int halfHeight = height / 2, halfWidth = width / 2;
879 for (
unsigned int i = 0; i < halfHeight; ++i) {
880 for (
unsigned int j = 0; j < halfWidth; ++j) {
881 U =
static_cast<int>(((*iU) - 128) * 0.354);
884 V =
static_cast<int>(((*iV) - 128) * 0.707);
891 yuv = yuv + (width - 1);
895 yuv = (yuv - width) + 1;
910 *rgba++ =
static_cast<unsigned char>(R);
911 *rgba++ =
static_cast<unsigned char>(G);
912 *rgba++ =
static_cast<unsigned char>(B);
925 *rgba++ =
static_cast<unsigned char>(R);
926 *rgba++ =
static_cast<unsigned char>(G);
927 *rgba++ =
static_cast<unsigned char>(B);
929 rgba = rgba + ((4 * width) - 7);
941 *rgba++ =
static_cast<unsigned char>(R);
942 *rgba++ =
static_cast<unsigned char>(G);
943 *rgba++ =
static_cast<unsigned char>(B);
956 *rgba++ =
static_cast<unsigned char>(R);
957 *rgba++ =
static_cast<unsigned char>(G);
958 *rgba++ =
static_cast<unsigned char>(B);
960 rgba = (rgba - (4 * width)) + 1;
977 int U, V, R, G, B, V2, U5, UV;
979 unsigned int size = width * height;
980 unsigned char *iV = yuv + size;
981 unsigned char *iU = yuv + ((5 * size) / 4);
982 const unsigned int halfHeight = height / 2, halfWidth = width / 2;
983 for (
unsigned int i = 0; i < halfHeight; ++i) {
984 for (
unsigned int j = 0; j < halfWidth; ++j) {
985 U =
static_cast<int>(((*iU) - 128) * 0.354);
988 V =
static_cast<int>(((*iV) - 128) * 0.707);
995 yuv = yuv + (width - 1);
999 yuv = (yuv - width) + 1;
1014 *rgb++ =
static_cast<unsigned char>(R);
1015 *rgb++ =
static_cast<unsigned char>(G);
1016 *rgb++ =
static_cast<unsigned char>(B);
1028 *rgb++ =
static_cast<unsigned char>(R);
1029 *rgb++ =
static_cast<unsigned char>(G);
1030 *rgb =
static_cast<unsigned char>(B);
1031 rgb = rgb + ((3 * width) - 5);
1043 *rgb++ =
static_cast<unsigned char>(R);
1044 *rgb++ =
static_cast<unsigned char>(G);
1045 *rgb++ =
static_cast<unsigned char>(B);
1057 *rgb++ =
static_cast<unsigned char>(R);
1058 *rgb++ =
static_cast<unsigned char>(G);
1059 *rgb =
static_cast<unsigned char>(B);
1060 rgb = (rgb - (3 * width)) + 1;
1079 int U, V, R, G, B, V2, U5, UV;
1080 int Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8, Y9, Y10, Y11, Y12, Y13, Y14, Y15;
1081 unsigned int size = width * height;
1082 unsigned char *iV = yuv + size;
1083 unsigned char *iU = yuv + ((17 * size) / 16);
1084 const unsigned int quarterHeight = height / 4, quarterWidth = width / 4;
1085 for (
unsigned int i = 0; i < quarterHeight; ++i) {
1086 for (
unsigned int j = 0; j < quarterWidth; ++j) {
1087 U =
static_cast<int>(((*iU) - 128) * 0.354);
1090 V =
static_cast<int>(((*iV) - 128) * 0.707);
1101 yuv = yuv + (width - 3);
1109 yuv = yuv + (width - 3);
1117 yuv = yuv + (width - 3);
1125 yuv = (yuv - (3 * width)) + 1;
1140 *rgba++ =
static_cast<unsigned char>(R);
1141 *rgba++ =
static_cast<unsigned char>(G);
1142 *rgba++ =
static_cast<unsigned char>(B);
1155 *rgba++ =
static_cast<unsigned char>(R);
1156 *rgba++ =
static_cast<unsigned char>(G);
1157 *rgba++ =
static_cast<unsigned char>(B);
1170 *rgba++ =
static_cast<unsigned char>(R);
1171 *rgba++ =
static_cast<unsigned char>(G);
1172 *rgba++ =
static_cast<unsigned char>(B);
1185 *rgba++ =
static_cast<unsigned char>(R);
1186 *rgba++ =
static_cast<unsigned char>(G);
1187 *rgba++ =
static_cast<unsigned char>(B);
1189 rgba = rgba + ((4 * width) - 15);
1200 *rgba++ =
static_cast<unsigned char>(R);
1201 *rgba++ =
static_cast<unsigned char>(G);
1202 *rgba++ =
static_cast<unsigned char>(B);
1215 *rgba++ =
static_cast<unsigned char>(R);
1216 *rgba++ =
static_cast<unsigned char>(G);
1217 *rgba++ =
static_cast<unsigned char>(B);
1230 *rgba++ =
static_cast<unsigned char>(R);
1231 *rgba++ =
static_cast<unsigned char>(G);
1232 *rgba++ =
static_cast<unsigned char>(B);
1245 *rgba++ =
static_cast<unsigned char>(R);
1246 *rgba++ =
static_cast<unsigned char>(G);
1247 *rgba++ =
static_cast<unsigned char>(B);
1249 rgba = rgba + ((4 * width) - 15);
1260 *rgba++ =
static_cast<unsigned char>(R);
1261 *rgba++ =
static_cast<unsigned char>(G);
1262 *rgba++ =
static_cast<unsigned char>(B);
1275 *rgba++ =
static_cast<unsigned char>(R);
1276 *rgba++ =
static_cast<unsigned char>(G);
1277 *rgba++ =
static_cast<unsigned char>(B);
1290 *rgba++ =
static_cast<unsigned char>(R);
1291 *rgba++ =
static_cast<unsigned char>(G);
1292 *rgba++ =
static_cast<unsigned char>(B);
1305 *rgba++ =
static_cast<unsigned char>(R);
1306 *rgba++ =
static_cast<unsigned char>(G);
1307 *rgba++ =
static_cast<unsigned char>(B);
1309 rgba = rgba + ((4 * width) - 15);
1320 *rgba++ =
static_cast<unsigned char>(R);
1321 *rgba++ =
static_cast<unsigned char>(G);
1322 *rgba++ =
static_cast<unsigned char>(B);
1335 *rgba++ =
static_cast<unsigned char>(R);
1336 *rgba++ =
static_cast<unsigned char>(G);
1337 *rgba++ =
static_cast<unsigned char>(B);
1350 *rgba++ =
static_cast<unsigned char>(R);
1351 *rgba++ =
static_cast<unsigned char>(G);
1352 *rgba++ =
static_cast<unsigned char>(B);
1365 *rgba++ =
static_cast<unsigned char>(R);
1366 *rgba++ =
static_cast<unsigned char>(G);
1367 *rgba++ =
static_cast<unsigned char>(B);
1369 rgba = (rgba - (12 * width)) + 1;
1385 int U, V, R, G, B, V2, U5, UV;
1386 int Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8, Y9, Y10, Y11, Y12, Y13, Y14, Y15;
1387 unsigned int size = width * height;
1388 unsigned char *iV = yuv + size;
1389 unsigned char *iU = yuv + ((17 * size) / 16);
1390 const unsigned int quarterHeight = height / 4, quarterWidth = width / 4;
1391 for (
unsigned int i = 0; i < quarterHeight; ++i) {
1392 for (
unsigned int j = 0; j < quarterWidth; ++j) {
1393 U =
static_cast<int>((*iU - 128) * 0.354);
1396 V =
static_cast<int>((*iV - 128) * 0.707);
1407 yuv = yuv + (width - 3);
1415 yuv = yuv + (width - 3);
1423 yuv = yuv + (width - 3);
1431 yuv = (yuv - (3 * width)) + 1;
1446 *rgb++ =
static_cast<unsigned char>(R);
1447 *rgb++ =
static_cast<unsigned char>(G);
1448 *rgb++ =
static_cast<unsigned char>(B);
1460 *rgb++ =
static_cast<unsigned char>(R);
1461 *rgb++ =
static_cast<unsigned char>(G);
1462 *rgb++ =
static_cast<unsigned char>(B);
1474 *rgb++ =
static_cast<unsigned char>(R);
1475 *rgb++ =
static_cast<unsigned char>(G);
1476 *rgb++ =
static_cast<unsigned char>(B);
1488 *rgb++ =
static_cast<unsigned char>(R);
1489 *rgb++ =
static_cast<unsigned char>(G);
1490 *rgb =
static_cast<unsigned char>(B);
1491 rgb = rgb + ((3 * width) - 11);
1502 *rgb++ =
static_cast<unsigned char>(R);
1503 *rgb++ =
static_cast<unsigned char>(G);
1504 *rgb++ =
static_cast<unsigned char>(B);
1516 *rgb++ =
static_cast<unsigned char>(R);
1517 *rgb++ =
static_cast<unsigned char>(G);
1518 *rgb++ =
static_cast<unsigned char>(B);
1530 *rgb++ =
static_cast<unsigned char>(R);
1531 *rgb++ =
static_cast<unsigned char>(G);
1532 *rgb++ =
static_cast<unsigned char>(B);
1544 *rgb++ =
static_cast<unsigned char>(R);
1545 *rgb++ =
static_cast<unsigned char>(G);
1546 *rgb =
static_cast<unsigned char>(B);
1547 rgb = rgb + ((3 * width) - 11);
1558 *rgb++ =
static_cast<unsigned char>(R);
1559 *rgb++ =
static_cast<unsigned char>(G);
1560 *rgb++ =
static_cast<unsigned char>(B);
1572 *rgb++ =
static_cast<unsigned char>(R);
1573 *rgb++ =
static_cast<unsigned char>(G);
1574 *rgb++ =
static_cast<unsigned char>(B);
1586 *rgb++ =
static_cast<unsigned char>(R);
1587 *rgb++ =
static_cast<unsigned char>(G);
1588 *rgb++ =
static_cast<unsigned char>(B);
1600 *rgb++ =
static_cast<unsigned char>(R);
1601 *rgb++ =
static_cast<unsigned char>(G);
1602 *rgb =
static_cast<unsigned char>(B);
1603 rgb = (rgb + (3 * width)) - 11;
1614 *rgb++ =
static_cast<unsigned char>(R);
1615 *rgb++ =
static_cast<unsigned char>(G);
1616 *rgb++ =
static_cast<unsigned char>(B);
1628 *rgb++ =
static_cast<unsigned char>(R);
1629 *rgb++ =
static_cast<unsigned char>(G);
1630 *rgb++ =
static_cast<unsigned char>(B);
1642 *rgb++ =
static_cast<unsigned char>(R);
1643 *rgb++ =
static_cast<unsigned char>(G);
1644 *rgb++ =
static_cast<unsigned char>(B);
1656 *rgb++ =
static_cast<unsigned char>(R);
1657 *rgb++ =
static_cast<unsigned char>(G);
1658 *rgb++ =
static_cast<unsigned char>(B);
1659 rgb = (rgb - (9 * width)) + 1;
static void YUV411ToGrey(unsigned char *yuv, unsigned char *grey, unsigned int size)
static void YVU9ToRGBa(unsigned char *yuv, unsigned char *rgba, unsigned int width, unsigned int height)
static void YUYVToRGBa(unsigned char *yuyv, unsigned char *rgba, unsigned int width, unsigned int height)
static void YUV422ToGrey(unsigned char *yuv, unsigned char *grey, unsigned int size)
static void YUV420ToRGBa(unsigned char *yuv, unsigned char *rgba, unsigned int width, unsigned int height)
static void YUYVToGrey(unsigned char *yuyv, unsigned char *grey, unsigned int size)
static void YUV411ToRGBa(unsigned char *yuv, unsigned char *rgba, unsigned int size)
static void YUV420ToGrey(unsigned char *yuv, unsigned char *grey, unsigned int size)
static void YVU9ToRGB(unsigned char *yuv, unsigned char *rgb, unsigned int width, unsigned int height)
static void YV12ToRGBa(unsigned char *yuv, unsigned char *rgba, unsigned int width, unsigned int height)
static void YUV444ToRGB(unsigned char *yuv, unsigned char *rgb, unsigned int size)
static void YUV411ToRGB(unsigned char *yuv, unsigned char *rgb, unsigned int size)
static void YUV422ToRGB(unsigned char *yuv, unsigned char *rgb, unsigned int size)
static void YUV422ToRGBa(unsigned char *yuv, unsigned char *rgba, unsigned int size)
static void YV12ToRGB(unsigned char *yuv, unsigned char *rgb, unsigned int width, unsigned int height)
static void YUV444ToRGBa(unsigned char *yuv, unsigned char *rgba, unsigned int size)
static void YUV444ToGrey(unsigned char *yuv, unsigned char *grey, unsigned int size)
static void YUV420ToRGB(unsigned char *yuv, unsigned char *rgb, unsigned int width, unsigned int height)
static void YUYVToRGB(unsigned char *yuyv, unsigned char *rgb, unsigned int width, unsigned int height)