60#ifndef WHITEBOARD_POSTER_STRING_CONVERSION
61#define WHITEBOARD_POSTER_STRING_CONVERSION
72#pragma clang diagnostic push
73#pragma clang diagnostic ignored "-Wunused-macros"
77#elif defined(__APPLE__)
78# include <machine/endian.h>
79# include <architecture/byte_order.h>
80# define bswap_16(x) NXSwapShort(x)
81# define bswap_32(x) NXSwapInt(x)
82# define bswap_64(x) NXSwapLongLong(x)
84# define bswap_16(x) __builtin_bswap16(x)
85# define bswap_32(x) __builtin_bswap32(x)
86# define bswap_64(x) __builtin_bswap64(x)
91#if (!defined(__BYTE_ORDER) && !defined(__LITTLE_ENDIAN)) || (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && __BYTE_ORDER == __LITTLE_ENDIAN)
92# if !defined(htonll) && !defined(ntohll)
93# define htonll(x) bswap_64(x)
94# define ntohll(x) bswap_64(x)
96# if !defined(htonl) && !defined(ntohl)
97# define htonl(x) bswap_32(x)
98# define ntohl(x) bswap_32(x)
100# if !defined(htons) && !defined(ntohs)
101# define htons(x) bswap_16(x)
102# define ntohs(x) bswap_16(x)
105# if !defined(htonll) && !defined(ntohll)
106# define htonll(x) (x)
107# define ntohll(x) (x)
109# if !defined(htonl) && !defined(ntohl)
113# if !defined(htons) && !defined(ntohs)
118#pragma clang diagnostic pop
127#pragma clang diagnostic push
128#pragma clang diagnostic ignored "-Wunused-variable"
130 if (len >= bufferSize) {
133 switch (self->cameraResolution) {
136 len += snprintf(descString + len, bufferSize - len,
"cameraResolution=HD_4VGA");
141 len += snprintf(descString + len, bufferSize - len,
"cameraResolution=QQVGA");
146 len += snprintf(descString + len, bufferSize - len,
"cameraResolution=QVGA");
151 len += snprintf(descString + len, bufferSize - len,
"cameraResolution=SVGA");
156 len += snprintf(descString + len, bufferSize - len,
"cameraResolution=VGA");
160 if (len >= bufferSize) {
163 len = gu_strlcat(descString,
", ", bufferSize);
164 if (len >= bufferSize) {
167 len = gu_strlcat(descString, self->pipelineRunning ?
"pipelineRunning=true" :
"pipelineRunning=false", bufferSize);
168 if (len >= bufferSize) {
171 len = gu_strlcat(descString,
", ", bufferSize);
172 if (len >= bufferSize) {
175 switch (self->selectedCamera) {
178 len += snprintf(descString + len, bufferSize - len,
"selectedCamera=Bottom");
183 len += snprintf(descString + len, bufferSize - len,
"selectedCamera=NUM_VISION_CAMERAS");
188 len += snprintf(descString + len, bufferSize - len,
"selectedCamera=Top");
192 if (len >= bufferSize) {
195 len = gu_strlcat(descString,
", ", bufferSize);
196 if (len >= bufferSize) {
199 switch (self->saveImage) {
202 len += snprintf(descString + len, bufferSize - len,
"saveImage=AI2");
207 len += snprintf(descString + len, bufferSize - len,
"saveImage=AI3");
212 len += snprintf(descString + len, bufferSize - len,
"saveImage=JPG");
217 len += snprintf(descString + len, bufferSize - len,
"saveImage=None");
221 if (len >= bufferSize) {
224 len = gu_strlcat(descString,
", ", bufferSize);
225 if (len >= bufferSize) {
228 len = gu_strlcat(descString, self->saveClassifiedImage ?
"saveClassifiedImage=true" :
"saveClassifiedImage=false", bufferSize);
229 if (len >= bufferSize) {
232 len = gu_strlcat(descString,
", ", bufferSize);
233 if (len >= bufferSize) {
236 switch (self->pipeline) {
239 len += snprintf(descString + len, bufferSize - len,
"pipeline=HTWK");
244 len += snprintf(descString + len, bufferSize - len,
"pipeline=Neural_Network");
249 len += snprintf(descString + len, bufferSize - len,
"pipeline=OpenCVFaces");
254 len += snprintf(descString + len, bufferSize - len,
"pipeline=OpenChallenge");
259 len += snprintf(descString + len, bufferSize - len,
"pipeline=Soccer");
264 len += snprintf(descString + len, bufferSize - len,
"pipeline=Streaming");
268 if (len >= bufferSize) {
271 len = gu_strlcat(descString,
", ", bufferSize);
272 if (len >= bufferSize) {
275 len += snprintf(descString + len, bufferSize - len,
"chooseCamera=%d", self->chooseCamera);
276 if (len >= bufferSize) {
279 len = gu_strlcat(descString,
", ", bufferSize);
280 if (len >= bufferSize) {
283 len += snprintf(descString + len, bufferSize - len,
"confidence=%lf", (
double) self->confidence);
284 if (len >= bufferSize) {
287 len = gu_strlcat(descString,
", ", bufferSize);
288 if (len >= bufferSize) {
291 switch (self->networkTop) {
294 len += snprintf(descString + len, bufferSize - len,
"networkTop=BallOnly");
299 len += snprintf(descString + len, bufferSize - len,
"networkTop=VGANet");
304 len += snprintf(descString + len, bufferSize - len,
"networkTop=Vanilla");
309 len += snprintf(descString + len, bufferSize - len,
"networkTop=v2");
313 if (len >= bufferSize) {
316 len = gu_strlcat(descString,
", ", bufferSize);
317 if (len >= bufferSize) {
320 switch (self->networkBottom) {
323 len += snprintf(descString + len, bufferSize - len,
"networkBottom=BallOnly");
328 len += snprintf(descString + len, bufferSize - len,
"networkBottom=VGANet");
333 len += snprintf(descString + len, bufferSize - len,
"networkBottom=Vanilla");
338 len += snprintf(descString + len, bufferSize - len,
"networkBottom=v2");
342 if (len >= bufferSize) {
345 len = gu_strlcat(descString,
", ", bufferSize);
346 if (len >= bufferSize) {
349 switch (self->streamingSource) {
352 len += snprintf(descString + len, bufferSize - len,
"streamingSource=Classified");
357 len += snprintf(descString + len, bufferSize - len,
"streamingSource=Normal");
362 len += snprintf(descString + len, bufferSize - len,
"streamingSource=Recognized");
366 if (len >= bufferSize) {
369 len = gu_strlcat(descString,
", ", bufferSize);
370 if (len >= bufferSize) {
373 len = gu_strlcat(descString, self->imageInput ?
"imageInput=true" :
"imageInput=false", bufferSize);
374 if (len >= bufferSize) {
377 len = gu_strlcat(descString,
", ", bufferSize);
378 if (len >= bufferSize) {
381 len += snprintf(descString + len, bufferSize - len,
"jpegStreamQuality=%d", self->jpegStreamQuality);
382 if (len >= bufferSize) {
385 len = gu_strlcat(descString,
", ", bufferSize);
386 if (len >= bufferSize) {
389 len += snprintf(descString + len, bufferSize - len,
"jpegStreamStride=%d", self->jpegStreamStride);
390 if (len >= bufferSize) {
393 len = gu_strlcat(descString,
", ", bufferSize);
394 if (len >= bufferSize) {
397 len += snprintf(descString + len, bufferSize - len,
"frameRate=%d", self->frameRate);
398 if (len >= bufferSize) {
401 len = gu_strlcat(descString,
", ", bufferSize);
402 if (len >= bufferSize) {
405 len = gu_strlcat(descString, self->runPipelineOnce ?
"runPipelineOnce=true" :
"runPipelineOnce=false", bufferSize);
406 if (len >= bufferSize) {
409 len = gu_strlcat(descString,
", ", bufferSize);
410 if (len >= bufferSize) {
414 len += snprintf(descString + len, bufferSize - len,
"frameNumber=%llu", self->frameNumber);
416 len += snprintf(descString + len, bufferSize - len,
"frameNumber=%lu", self->frameNumber);
418 if (len >= bufferSize) {
421 len = gu_strlcat(descString,
", ", bufferSize);
422 if (len >= bufferSize) {
425 len += snprintf(descString + len, bufferSize - len,
"colourCalibration=%s", self->colourCalibration);
427#pragma clang diagnostic pop
435#pragma clang diagnostic push
436#pragma clang diagnostic ignored "-Wunused-variable"
438 if (len >= bufferSize) {
441 switch (self->cameraResolution) {
444 len += snprintf(toString + len, bufferSize - len,
"HD_4VGA");
449 len += snprintf(toString + len, bufferSize - len,
"QQVGA");
454 len += snprintf(toString + len, bufferSize - len,
"QVGA");
459 len += snprintf(toString + len, bufferSize - len,
"SVGA");
464 len += snprintf(toString + len, bufferSize - len,
"VGA");
468 if (len >= bufferSize) {
471 len = gu_strlcat(toString,
", ", bufferSize);
472 if (len >= bufferSize) {
475 len = gu_strlcat(toString, self->pipelineRunning ?
"true" :
"false", bufferSize);
476 if (len >= bufferSize) {
479 len = gu_strlcat(toString,
", ", bufferSize);
480 if (len >= bufferSize) {
483 switch (self->selectedCamera) {
486 len += snprintf(toString + len, bufferSize - len,
"Bottom");
491 len += snprintf(toString + len, bufferSize - len,
"NUM_VISION_CAMERAS");
496 len += snprintf(toString + len, bufferSize - len,
"Top");
500 if (len >= bufferSize) {
503 len = gu_strlcat(toString,
", ", bufferSize);
504 if (len >= bufferSize) {
507 switch (self->saveImage) {
510 len += snprintf(toString + len, bufferSize - len,
"AI2");
515 len += snprintf(toString + len, bufferSize - len,
"AI3");
520 len += snprintf(toString + len, bufferSize - len,
"JPG");
525 len += snprintf(toString + len, bufferSize - len,
"None");
529 if (len >= bufferSize) {
532 len = gu_strlcat(toString,
", ", bufferSize);
533 if (len >= bufferSize) {
536 len = gu_strlcat(toString, self->saveClassifiedImage ?
"true" :
"false", bufferSize);
537 if (len >= bufferSize) {
540 len = gu_strlcat(toString,
", ", bufferSize);
541 if (len >= bufferSize) {
544 switch (self->pipeline) {
547 len += snprintf(toString + len, bufferSize - len,
"HTWK");
552 len += snprintf(toString + len, bufferSize - len,
"Neural_Network");
557 len += snprintf(toString + len, bufferSize - len,
"OpenCVFaces");
562 len += snprintf(toString + len, bufferSize - len,
"OpenChallenge");
567 len += snprintf(toString + len, bufferSize - len,
"Soccer");
572 len += snprintf(toString + len, bufferSize - len,
"Streaming");
576 if (len >= bufferSize) {
579 len = gu_strlcat(toString,
", ", bufferSize);
580 if (len >= bufferSize) {
583 len += snprintf(toString + len, bufferSize - len,
"%d", self->chooseCamera);
584 if (len >= bufferSize) {
587 len = gu_strlcat(toString,
", ", bufferSize);
588 if (len >= bufferSize) {
591 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->confidence);
592 if (len >= bufferSize) {
595 len = gu_strlcat(toString,
", ", bufferSize);
596 if (len >= bufferSize) {
599 switch (self->networkTop) {
602 len += snprintf(toString + len, bufferSize - len,
"BallOnly");
607 len += snprintf(toString + len, bufferSize - len,
"VGANet");
612 len += snprintf(toString + len, bufferSize - len,
"Vanilla");
617 len += snprintf(toString + len, bufferSize - len,
"v2");
621 if (len >= bufferSize) {
624 len = gu_strlcat(toString,
", ", bufferSize);
625 if (len >= bufferSize) {
628 switch (self->networkBottom) {
631 len += snprintf(toString + len, bufferSize - len,
"BallOnly");
636 len += snprintf(toString + len, bufferSize - len,
"VGANet");
641 len += snprintf(toString + len, bufferSize - len,
"Vanilla");
646 len += snprintf(toString + len, bufferSize - len,
"v2");
650 if (len >= bufferSize) {
653 len = gu_strlcat(toString,
", ", bufferSize);
654 if (len >= bufferSize) {
657 switch (self->streamingSource) {
660 len += snprintf(toString + len, bufferSize - len,
"Classified");
665 len += snprintf(toString + len, bufferSize - len,
"Normal");
670 len += snprintf(toString + len, bufferSize - len,
"Recognized");
674 if (len >= bufferSize) {
677 len = gu_strlcat(toString,
", ", bufferSize);
678 if (len >= bufferSize) {
681 len = gu_strlcat(toString, self->imageInput ?
"true" :
"false", bufferSize);
682 if (len >= bufferSize) {
685 len = gu_strlcat(toString,
", ", bufferSize);
686 if (len >= bufferSize) {
689 len += snprintf(toString + len, bufferSize - len,
"%d", self->jpegStreamQuality);
690 if (len >= bufferSize) {
693 len = gu_strlcat(toString,
", ", bufferSize);
694 if (len >= bufferSize) {
697 len += snprintf(toString + len, bufferSize - len,
"%d", self->jpegStreamStride);
698 if (len >= bufferSize) {
701 len = gu_strlcat(toString,
", ", bufferSize);
702 if (len >= bufferSize) {
705 len += snprintf(toString + len, bufferSize - len,
"%d", self->frameRate);
706 if (len >= bufferSize) {
709 len = gu_strlcat(toString,
", ", bufferSize);
710 if (len >= bufferSize) {
713 len = gu_strlcat(toString, self->runPipelineOnce ?
"true" :
"false", bufferSize);
714 if (len >= bufferSize) {
717 len = gu_strlcat(toString,
", ", bufferSize);
718 if (len >= bufferSize) {
722 len += snprintf(toString + len, bufferSize - len,
"%llu", self->frameNumber);
724 len += snprintf(toString + len, bufferSize - len,
"%lu", self->frameNumber);
726 if (len >= bufferSize) {
729 len = gu_strlcat(toString,
", ", bufferSize);
730 if (len >= bufferSize) {
733 len += snprintf(toString + len, bufferSize - len,
"%s", self->colourCalibration);
735#pragma clang diagnostic pop
743 size_t temp_length = strlen(str);
744 int length = (temp_length <= INT_MAX) ? ((
int)((ssize_t)temp_length)) : -1;
749 char* var_str = &var_str_buffer[0];
751 char* key = &key_buffer[0];
758 if (index == 0 && str[0] ==
'{') {
764 for (
int i = index; i < length; i++) {
766 if (bracecount == 0 && str[i] ==
'=') {
771 if (bracecount == 0 && isspace(str[i])) {
778 if (bracecount == 0 && str[i] ==
',') {
788 if (bracecount < 0) {
793 if (i == length - 1) {
797 if (endKey >= startKey && endKey - startKey < length) {
798 strncpy(key, str + startKey, ((
size_t)(endKey - startKey) + 1));
799 key[(endKey - startKey) + 1] = 0;
803 strncpy(var_str, str + startVar, ((
size_t)(index - startVar) + 1));
804 var_str[(index - startVar) + 1] = 0;
810 if (strlen(key) > 0) {
811 if (0 == strcmp(
"cameraResolution", key)) {
813 }
else if (0 == strcmp(
"pipelineRunning", key)) {
815 }
else if (0 == strcmp(
"selectedCamera", key)) {
817 }
else if (0 == strcmp(
"saveImage", key)) {
819 }
else if (0 == strcmp(
"saveClassifiedImage", key)) {
821 }
else if (0 == strcmp(
"pipeline", key)) {
823 }
else if (0 == strcmp(
"chooseCamera", key)) {
825 }
else if (0 == strcmp(
"confidence", key)) {
827 }
else if (0 == strcmp(
"networkTop", key)) {
829 }
else if (0 == strcmp(
"networkBottom", key)) {
831 }
else if (0 == strcmp(
"streamingSource", key)) {
833 }
else if (0 == strcmp(
"imageInput", key)) {
835 }
else if (0 == strcmp(
"jpegStreamQuality", key)) {
837 }
else if (0 == strcmp(
"jpegStreamStride", key)) {
839 }
else if (0 == strcmp(
"frameRate", key)) {
841 }
else if (0 == strcmp(
"runPipelineOnce", key)) {
843 }
else if (0 == strcmp(
"frameNumber", key)) {
845 }
else if (0 == strcmp(
"colourCalibration", key)) {
855 if (strcmp(
"HD_4VGA", var_str) == 0) {
856#pragma clang diagnostic push
857#pragma clang diagnostic ignored "-Wbad-function-cast"
858 self->cameraResolution =
HD_4VGA;
859#pragma clang diagnostic pop
860 }
else if (strcmp(
"QQVGA", var_str) == 0) {
861#pragma clang diagnostic push
862#pragma clang diagnostic ignored "-Wbad-function-cast"
863 self->cameraResolution =
QQVGA;
864#pragma clang diagnostic pop
865 }
else if (strcmp(
"QVGA", var_str) == 0) {
866#pragma clang diagnostic push
867#pragma clang diagnostic ignored "-Wbad-function-cast"
868 self->cameraResolution =
QVGA;
869#pragma clang diagnostic pop
870 }
else if (strcmp(
"SVGA", var_str) == 0) {
871#pragma clang diagnostic push
872#pragma clang diagnostic ignored "-Wbad-function-cast"
873 self->cameraResolution =
SVGA;
874#pragma clang diagnostic pop
875 }
else if (strcmp(
"VGA", var_str) == 0) {
876#pragma clang diagnostic push
877#pragma clang diagnostic ignored "-Wbad-function-cast"
878 self->cameraResolution =
VGA;
879#pragma clang diagnostic pop
881#pragma clang diagnostic push
882#pragma clang diagnostic ignored "-Wbad-function-cast"
883 self->cameraResolution = ((
enum Resolutions)atoi(var_str));
884#pragma clang diagnostic pop
890 self->pipelineRunning = strcmp(var_str,
"true") == 0 || strcmp(var_str,
"1") == 0;
895 if (strcmp(
"Bottom", var_str) == 0) {
896#pragma clang diagnostic push
897#pragma clang diagnostic ignored "-Wbad-function-cast"
898 self->selectedCamera =
Bottom;
899#pragma clang diagnostic pop
900 }
else if (strcmp(
"NUM_VISION_CAMERAS", var_str) == 0) {
901#pragma clang diagnostic push
902#pragma clang diagnostic ignored "-Wbad-function-cast"
904#pragma clang diagnostic pop
905 }
else if (strcmp(
"Top", var_str) == 0) {
906#pragma clang diagnostic push
907#pragma clang diagnostic ignored "-Wbad-function-cast"
908 self->selectedCamera =
Top;
909#pragma clang diagnostic pop
911#pragma clang diagnostic push
912#pragma clang diagnostic ignored "-Wbad-function-cast"
913 self->selectedCamera = ((
enum VisionCamera)atoi(var_str));
914#pragma clang diagnostic pop
920 if (strcmp(
"AI2", var_str) == 0) {
921#pragma clang diagnostic push
922#pragma clang diagnostic ignored "-Wbad-function-cast"
923 self->saveImage =
AI2;
924#pragma clang diagnostic pop
925 }
else if (strcmp(
"AI3", var_str) == 0) {
926#pragma clang diagnostic push
927#pragma clang diagnostic ignored "-Wbad-function-cast"
928 self->saveImage =
AI3;
929#pragma clang diagnostic pop
930 }
else if (strcmp(
"JPG", var_str) == 0) {
931#pragma clang diagnostic push
932#pragma clang diagnostic ignored "-Wbad-function-cast"
933 self->saveImage =
JPG;
934#pragma clang diagnostic pop
935 }
else if (strcmp(
"None", var_str) == 0) {
936#pragma clang diagnostic push
937#pragma clang diagnostic ignored "-Wbad-function-cast"
938 self->saveImage =
None;
939#pragma clang diagnostic pop
941#pragma clang diagnostic push
942#pragma clang diagnostic ignored "-Wbad-function-cast"
944#pragma clang diagnostic pop
950 self->saveClassifiedImage = strcmp(var_str,
"true") == 0 || strcmp(var_str,
"1") == 0;
955 if (strcmp(
"HTWK", var_str) == 0) {
956#pragma clang diagnostic push
957#pragma clang diagnostic ignored "-Wbad-function-cast"
958 self->pipeline =
HTWK;
959#pragma clang diagnostic pop
960 }
else if (strcmp(
"Neural_Network", var_str) == 0) {
961#pragma clang diagnostic push
962#pragma clang diagnostic ignored "-Wbad-function-cast"
964#pragma clang diagnostic pop
965 }
else if (strcmp(
"OpenCVFaces", var_str) == 0) {
966#pragma clang diagnostic push
967#pragma clang diagnostic ignored "-Wbad-function-cast"
969#pragma clang diagnostic pop
970 }
else if (strcmp(
"OpenChallenge", var_str) == 0) {
971#pragma clang diagnostic push
972#pragma clang diagnostic ignored "-Wbad-function-cast"
974#pragma clang diagnostic pop
975 }
else if (strcmp(
"Soccer", var_str) == 0) {
976#pragma clang diagnostic push
977#pragma clang diagnostic ignored "-Wbad-function-cast"
979#pragma clang diagnostic pop
980 }
else if (strcmp(
"Streaming", var_str) == 0) {
981#pragma clang diagnostic push
982#pragma clang diagnostic ignored "-Wbad-function-cast"
984#pragma clang diagnostic pop
986#pragma clang diagnostic push
987#pragma clang diagnostic ignored "-Wbad-function-cast"
989#pragma clang diagnostic pop
995 self->chooseCamera = ((int)atoi(var_str));
1000 self->confidence = ((float)atof(var_str));
1005 if (strcmp(
"BallOnly", var_str) == 0) {
1006#pragma clang diagnostic push
1007#pragma clang diagnostic ignored "-Wbad-function-cast"
1009#pragma clang diagnostic pop
1010 }
else if (strcmp(
"VGANet", var_str) == 0) {
1011#pragma clang diagnostic push
1012#pragma clang diagnostic ignored "-Wbad-function-cast"
1013 self->networkTop =
VGANet;
1014#pragma clang diagnostic pop
1015 }
else if (strcmp(
"Vanilla", var_str) == 0) {
1016#pragma clang diagnostic push
1017#pragma clang diagnostic ignored "-Wbad-function-cast"
1019#pragma clang diagnostic pop
1020 }
else if (strcmp(
"v2", var_str) == 0) {
1021#pragma clang diagnostic push
1022#pragma clang diagnostic ignored "-Wbad-function-cast"
1023 self->networkTop =
v2;
1024#pragma clang diagnostic pop
1026#pragma clang diagnostic push
1027#pragma clang diagnostic ignored "-Wbad-function-cast"
1029#pragma clang diagnostic pop
1035 if (strcmp(
"BallOnly", var_str) == 0) {
1036#pragma clang diagnostic push
1037#pragma clang diagnostic ignored "-Wbad-function-cast"
1039#pragma clang diagnostic pop
1040 }
else if (strcmp(
"VGANet", var_str) == 0) {
1041#pragma clang diagnostic push
1042#pragma clang diagnostic ignored "-Wbad-function-cast"
1043 self->networkBottom =
VGANet;
1044#pragma clang diagnostic pop
1045 }
else if (strcmp(
"Vanilla", var_str) == 0) {
1046#pragma clang diagnostic push
1047#pragma clang diagnostic ignored "-Wbad-function-cast"
1048 self->networkBottom =
Vanilla;
1049#pragma clang diagnostic pop
1050 }
else if (strcmp(
"v2", var_str) == 0) {
1051#pragma clang diagnostic push
1052#pragma clang diagnostic ignored "-Wbad-function-cast"
1053 self->networkBottom =
v2;
1054#pragma clang diagnostic pop
1056#pragma clang diagnostic push
1057#pragma clang diagnostic ignored "-Wbad-function-cast"
1059#pragma clang diagnostic pop
1065 if (strcmp(
"Classified", var_str) == 0) {
1066#pragma clang diagnostic push
1067#pragma clang diagnostic ignored "-Wbad-function-cast"
1069#pragma clang diagnostic pop
1070 }
else if (strcmp(
"Normal", var_str) == 0) {
1071#pragma clang diagnostic push
1072#pragma clang diagnostic ignored "-Wbad-function-cast"
1073 self->streamingSource =
Normal;
1074#pragma clang diagnostic pop
1075 }
else if (strcmp(
"Recognized", var_str) == 0) {
1076#pragma clang diagnostic push
1077#pragma clang diagnostic ignored "-Wbad-function-cast"
1079#pragma clang diagnostic pop
1081#pragma clang diagnostic push
1082#pragma clang diagnostic ignored "-Wbad-function-cast"
1083 self->streamingSource = ((
enum StreamingType)atoi(var_str));
1084#pragma clang diagnostic pop
1090 self->imageInput = strcmp(var_str,
"true") == 0 || strcmp(var_str,
"1") == 0;
1095 self->jpegStreamQuality = ((int)atoi(var_str));
1100 self->jpegStreamStride = ((int)atoi(var_str));
1105 self->frameRate = ((int)atoi(var_str));
1110 self->runPipelineOnce = strcmp(var_str,
"true") == 0 || strcmp(var_str,
"1") == 0;
1116 self->frameNumber = ((uint64_t)atoll(var_str));
1118 self->frameNumber = ((uint64_t)atol(var_str));
1124 strncpy(self->colourCalibration, var_str, 10);
1128 if (varIndex >= 0) {
1131 }
while(index < length);
1142 uint16_t bit_offset = 0;
1146 for (b = (32 - 1); b >= 0; b--) {
1148 uint16_t
byte = bit_offset / 8;
1149 uint16_t bit = 7 - (bit_offset % 8);
1150 unsigned long newbit = !!((cameraResolution_nbo >> b) & 1U);
1151 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1152 bit_offset = bit_offset + 1;
1158 uint16_t
byte = bit_offset / 8;
1159 uint16_t bit = 7 - (bit_offset % 8);
1160 unsigned long newbit = !!(
self->pipelineRunning ? 1U : 0U);
1161 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1162 bit_offset = bit_offset + 1;
1168 for (b = (32 - 1); b >= 0; b--) {
1170 uint16_t
byte = bit_offset / 8;
1171 uint16_t bit = 7 - (bit_offset % 8);
1172 unsigned long newbit = !!((selectedCamera_nbo >> b) & 1U);
1173 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1174 bit_offset = bit_offset + 1;
1182 for (b = (32 - 1); b >= 0; b--) {
1184 uint16_t
byte = bit_offset / 8;
1185 uint16_t bit = 7 - (bit_offset % 8);
1186 unsigned long newbit = !!((saveImage_nbo >> b) & 1U);
1187 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1188 bit_offset = bit_offset + 1;
1194 uint16_t
byte = bit_offset / 8;
1195 uint16_t bit = 7 - (bit_offset % 8);
1196 unsigned long newbit = !!(
self->saveClassifiedImage ? 1U : 0U);
1197 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1198 bit_offset = bit_offset + 1;
1204 for (b = (32 - 1); b >= 0; b--) {
1206 uint16_t
byte = bit_offset / 8;
1207 uint16_t bit = 7 - (bit_offset % 8);
1208 unsigned long newbit = !!((pipeline_nbo >> b) & 1U);
1209 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1210 bit_offset = bit_offset + 1;
1215 int chooseCamera_nbo =
htonl(self->chooseCamera);
1218 for (b = (32 - 1); b >= 0; b--) {
1220 uint16_t
byte = bit_offset / 8;
1221 uint16_t bit = 7 - (bit_offset % 8);
1222 unsigned long newbit = !!((chooseCamera_nbo >> b) & 1U);
1223 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1224 bit_offset = bit_offset + 1;
1234 for (b = (32 - 1); b >= 0; b--) {
1236 uint16_t
byte = bit_offset / 8;
1237 uint16_t bit = 7 - (bit_offset % 8);
1238 unsigned long newbit = !!((networkTop_nbo >> b) & 1U);
1239 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1240 bit_offset = bit_offset + 1;
1248 for (b = (32 - 1); b >= 0; b--) {
1250 uint16_t
byte = bit_offset / 8;
1251 uint16_t bit = 7 - (bit_offset % 8);
1252 unsigned long newbit = !!((networkBottom_nbo >> b) & 1U);
1253 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1254 bit_offset = bit_offset + 1;
1262 for (b = (32 - 1); b >= 0; b--) {
1264 uint16_t
byte = bit_offset / 8;
1265 uint16_t bit = 7 - (bit_offset % 8);
1266 unsigned long newbit = !!((streamingSource_nbo >> b) & 1U);
1267 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1268 bit_offset = bit_offset + 1;
1274 uint16_t
byte = bit_offset / 8;
1275 uint16_t bit = 7 - (bit_offset % 8);
1276 unsigned long newbit = !!(
self->imageInput ? 1U : 0U);
1277 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1278 bit_offset = bit_offset + 1;
1281 int jpegStreamQuality_nbo =
htonl(self->jpegStreamQuality);
1284 for (b = (32 - 1); b >= 0; b--) {
1286 uint16_t
byte = bit_offset / 8;
1287 uint16_t bit = 7 - (bit_offset % 8);
1288 unsigned long newbit = !!((jpegStreamQuality_nbo >> b) & 1U);
1289 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1290 bit_offset = bit_offset + 1;
1295 int jpegStreamStride_nbo =
htonl(self->jpegStreamStride);
1298 for (b = (32 - 1); b >= 0; b--) {
1300 uint16_t
byte = bit_offset / 8;
1301 uint16_t bit = 7 - (bit_offset % 8);
1302 unsigned long newbit = !!((jpegStreamStride_nbo >> b) & 1U);
1303 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1304 bit_offset = bit_offset + 1;
1309 int frameRate_nbo =
htonl(self->frameRate);
1312 for (b = (32 - 1); b >= 0; b--) {
1314 uint16_t
byte = bit_offset / 8;
1315 uint16_t bit = 7 - (bit_offset % 8);
1316 unsigned long newbit = !!((frameRate_nbo >> b) & 1U);
1317 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1318 bit_offset = bit_offset + 1;
1324 uint16_t
byte = bit_offset / 8;
1325 uint16_t bit = 7 - (bit_offset % 8);
1326 unsigned long newbit = !!(
self->runPipelineOnce ? 1U : 0U);
1327 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1328 bit_offset = bit_offset + 1;
1331 uint64_t frameNumber_nbo =
htonll(self->frameNumber);
1334 for (b = (64 - 1); b >= 0; b--) {
1336 uint16_t
byte = bit_offset / 8;
1337 uint16_t bit = 7 - (bit_offset % 8);
1338 unsigned long newbit = !!((frameNumber_nbo >> b) & 1U);
1339 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1340 bit_offset = bit_offset + 1;
1346 uint8_t len = (uint8_t) strlen(self->colourCalibration);
1348 for (b = 7; b >= 0; b--) {
1350 uint16_t
byte = bit_offset / 8;
1351 uint16_t bit = 7 - (bit_offset % 8);
1352 unsigned long newbit = !!((len >> b) & 1U);
1353 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1354 bit_offset = bit_offset + 1;
1358 for (c = 0; c < len; c++) {
1359 for (b = 7; b >= 0; b--) {
1361 uint16_t
byte = bit_offset / 8;
1362 uint16_t bit = 7 - (bit_offset % 8);
1363 unsigned long newbit = !!((
self->colourCalibration[c] >> b) & 1U);
1364 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1365 bit_offset = bit_offset + 1;
1381 uint16_t bit_offset = 0;
1384 for (b = (32 - 1); b >= 0; b--) {
1386 uint16_t
byte = bit_offset / 8;
1387 uint16_t bit = 7 - (bit_offset % 8);
1388 char dataByte = src[byte];
1389 unsigned char bitValue = (dataByte >> bit) & 1U;
1391 bit_offset = bit_offset + 1;
1398 uint16_t
byte = bit_offset / 8;
1399 uint16_t bit = 7 - (bit_offset % 8);
1400 char dataByte = src[byte];
1401 unsigned char bitValue = (dataByte >> bit) & 1U;
1403 bit_offset = bit_offset + 1;
1408 for (b = (32 - 1); b >= 0; b--) {
1410 uint16_t
byte = bit_offset / 8;
1411 uint16_t bit = 7 - (bit_offset % 8);
1412 char dataByte = src[byte];
1413 unsigned char bitValue = (dataByte >> bit) & 1U;
1415 bit_offset = bit_offset + 1;
1423 for (b = (32 - 1); b >= 0; b--) {
1425 uint16_t
byte = bit_offset / 8;
1426 uint16_t bit = 7 - (bit_offset % 8);
1427 char dataByte = src[byte];
1428 unsigned char bitValue = (dataByte >> bit) & 1U;
1430 bit_offset = bit_offset + 1;
1437 uint16_t
byte = bit_offset / 8;
1438 uint16_t bit = 7 - (bit_offset % 8);
1439 char dataByte = src[byte];
1440 unsigned char bitValue = (dataByte >> bit) & 1U;
1442 bit_offset = bit_offset + 1;
1447 for (b = (32 - 1); b >= 0; b--) {
1449 uint16_t
byte = bit_offset / 8;
1450 uint16_t bit = 7 - (bit_offset % 8);
1451 char dataByte = src[byte];
1452 unsigned char bitValue = (dataByte >> bit) & 1U;
1454 bit_offset = bit_offset + 1;
1462 for (b = (32 - 1); b >= 0; b--) {
1464 uint16_t
byte = bit_offset / 8;
1465 uint16_t bit = 7 - (bit_offset % 8);
1466 char dataByte = src[byte];
1467 unsigned char bitValue = (dataByte >> bit) & 1U;
1469 bit_offset = bit_offset + 1;
1479 for (b = (32 - 1); b >= 0; b--) {
1481 uint16_t
byte = bit_offset / 8;
1482 uint16_t bit = 7 - (bit_offset % 8);
1483 char dataByte = src[byte];
1484 unsigned char bitValue = (dataByte >> bit) & 1U;
1486 bit_offset = bit_offset + 1;
1494 for (b = (32 - 1); b >= 0; b--) {
1496 uint16_t
byte = bit_offset / 8;
1497 uint16_t bit = 7 - (bit_offset % 8);
1498 char dataByte = src[byte];
1499 unsigned char bitValue = (dataByte >> bit) & 1U;
1501 bit_offset = bit_offset + 1;
1509 for (b = (32 - 1); b >= 0; b--) {
1511 uint16_t
byte = bit_offset / 8;
1512 uint16_t bit = 7 - (bit_offset % 8);
1513 char dataByte = src[byte];
1514 unsigned char bitValue = (dataByte >> bit) & 1U;
1516 bit_offset = bit_offset + 1;
1523 uint16_t
byte = bit_offset / 8;
1524 uint16_t bit = 7 - (bit_offset % 8);
1525 char dataByte = src[byte];
1526 unsigned char bitValue = (dataByte >> bit) & 1U;
1528 bit_offset = bit_offset + 1;
1533 for (b = (32 - 1); b >= 0; b--) {
1535 uint16_t
byte = bit_offset / 8;
1536 uint16_t bit = 7 - (bit_offset % 8);
1537 char dataByte = src[byte];
1538 unsigned char bitValue = (dataByte >> bit) & 1U;
1540 bit_offset = bit_offset + 1;
1548 for (b = (32 - 1); b >= 0; b--) {
1550 uint16_t
byte = bit_offset / 8;
1551 uint16_t bit = 7 - (bit_offset % 8);
1552 char dataByte = src[byte];
1553 unsigned char bitValue = (dataByte >> bit) & 1U;
1555 bit_offset = bit_offset + 1;
1563 for (b = (32 - 1); b >= 0; b--) {
1565 uint16_t
byte = bit_offset / 8;
1566 uint16_t bit = 7 - (bit_offset % 8);
1567 char dataByte = src[byte];
1568 unsigned char bitValue = (dataByte >> bit) & 1U;
1570 bit_offset = bit_offset + 1;
1577 uint16_t
byte = bit_offset / 8;
1578 uint16_t bit = 7 - (bit_offset % 8);
1579 char dataByte = src[byte];
1580 unsigned char bitValue = (dataByte >> bit) & 1U;
1582 bit_offset = bit_offset + 1;
1587 for (b = (64 - 1); b >= 0; b--) {
1589 uint16_t
byte = bit_offset / 8;
1590 uint16_t bit = 7 - (bit_offset % 8);
1591 char dataByte = src[byte];
1592 unsigned char bitValue = (dataByte >> bit) & 1U;
1594 bit_offset = bit_offset + 1;
1603 for (b = 7; b >= 0; b--) {
1605 uint16_t
byte = bit_offset / 8;
1606 uint16_t bit = 7 - (bit_offset % 8);
1607 char dataByte = src[byte];
1608 unsigned char bitValue = (dataByte >> bit) & 1U;
1609 len ^= (-bitValue ^ len) & (1UL << b);
1610 bit_offset = bit_offset + 1;
1614 for (c = 0; c < len; c++) {
1615 for (b = 7; b >= 0; b--) {
1617 uint16_t
byte = bit_offset / 8;
1618 uint16_t bit = 7 - (bit_offset % 8);
1619 char dataByte = src[byte];
1620 unsigned char bitValue = (dataByte >> bit) & 1U;
1622 bit_offset = bit_offset + 1;
WHITEBOARD_POSTER_STRING_CONVERSION.
enum NeuralNetworkType networkBottom
neural network to run on bottom camera
int frameRate
The current framerate that the pipeline is running at.
int jpegStreamQuality
The quality to compress jpeg images at for streaming can be between 0 and 100.
enum VisionCamera selectedCamera
Which camera to use.
bool imageInput
Use /tmp/test.ai2 as pipeline image rather then camera if true.
bool runPipelineOnce
run the pipeline one time only if true
uint64_t frameNumber
The current frame number reported by guvison.
enum SaveFileType saveImage
Whether to save the image used in the next iteration of the pipeline to file.
int jpegStreamStride
The stride to use when streaming jpeg images.
char colourCalibration[10]
the DLC file to use for segmentation, searched in $HOME/data/ with the .dlc extension
int chooseCamera
Choose which camera to run on (0-Top, 1-Bottom, 2-Both)
bool saveClassifiedImage
Whether to save the classified version of the image used in the next iteration of the pipeline to fil...
enum NamedPipeline pipeline
vision pipeline to be run
enum NeuralNetworkType networkTop
neural network to run on top camera
enum Resolutions cameraResolution
Resolution that the camera should caputre images at.
bool pipelineRunning
Whether the pipeline is running or not.
enum StreamingType streamingSource
The type of streaming to be used.
const char * wb_vision_control_status_to_string(const struct wb_vision_control_status *self, char *toString, size_t bufferSize)
Convert to a string.
size_t wb_vision_control_status_from_network_serialised(const char *src, struct wb_vision_control_status *dst)
Convert from a compressed, serialised, network byte order byte stream.
struct wb_vision_control_status * wb_vision_control_status_from_string(struct wb_vision_control_status *self, const char *str)
Convert from a string.
size_t wb_vision_control_status_to_network_serialised(const struct wb_vision_control_status *self, char *dst)
Convert to a compressed, serialised, network byte order byte stream.
const char * wb_vision_control_status_description(const struct wb_vision_control_status *self, char *descString, size_t bufferSize)
Convert to a description string.
SaveFileType
List of file types that vision can save images as.
@ AI3
Raw YUV422 Image, with JSON image info blob.
NamedPipeline
Enum listing available vision pipelines.
@ Streaming
Pipeline that just streams images.
@ OpenChallenge
2013 Open Challange Pipeline
@ HTWK
Pipeline that runs htwk's image algorithms and post soccer object info to mipal whiteboard.
@ OpenCVFaces
Pipeline to recognise faces.
@ Neural_Network
Pipeline to rec objects with a nn.
Resolutions
Resolutions Supported by Vision.
StreamingType
Streaming modes available in vision.
@ Recognized
Image showing only objects that have been recognised NYI.
@ Classified
Images that has been segmented into recognised colours.
@ Normal
Images straight from camera.
#define VISION_CONTROL_STATUS_DESC_BUFFER_SIZE
VisionCamera
Enum of available camera's that can be used by vision.
@ Bottom
Bottom Camera on the nao.
@ Top
Top Camera on the nao.
@ NUM_VISION_CAMERAS
Number of cameras used in vision.
NeuralNetworkType
List of neural network architectures that vision can run.
@ v2
Current default (separable convolutions)
@ BallOnly
PB_FCN v2 binary classifier.
@ VGANet
PB_FCN on VGA resolution.