#include "tbGlobals.h" #include #include #define ARRAY_COUNT(a) (sizeof(a) / sizeof((a)[0])) //test data root path const char tb_sim_root[] = "D:/zeng/WoodCamera/farScope/testData"; //test data groups const TbGroup tb_groups[] = { { "Grp_0", 0, 178 }, }; const size_t tb_group_count = ARRAY_COUNT(tb_groups); const char * const tb_module_names[TB_MODULE_COUNT] = { "1_peakCentering", "2_convolve", "3_subPix", "4_Calib", "5_lrMatch", "6_SSProc", "7_compute3D" }; static int valid_name(const char *s) { const unsigned char *p = (const unsigned char *)s; if (p == NULL || *p == '\0') return 0; for (; *p; ++p) { if (!((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z') || (*p >= '0' && *p <= '9') || *p == '_' || *p == '-')) return 0; } return 1; } static int same_name(const char *a, const char *b) { unsigned char x, y; do { x = (unsigned char)*a++; y = (unsigned char)*b++; if (x >= 'A' && x <= 'Z') x = (unsigned char)(x - 'A' + 'a'); if (y >= 'A' && y <= 'Z') y = (unsigned char)(y - 'A' + 'a'); if (x != y) return 0; } while (x != '\0'); return 1; } int tb_check_config(void) { size_t g, j; int m, n; if (tb_group_count == 0) return -1; for (g = 0; g < tb_group_count; ++g) { const TbGroup *group = &tb_groups[g]; if (!valid_name(group->name) || group->start_id < 0 || group->end_id < group->start_id) { fprintf(stderr, "Invalid group at index %lu\n", (unsigned long)g); return -1; } for (j = 0; j < g; ++j) { if (same_name(group->name, tb_groups[j].name)) { fprintf(stderr, "Duplicate group name: %s\n", group->name); return -1; } } } for (m = 0; m < TB_MODULE_COUNT; ++m) { if (!valid_name(tb_module_names[m]) || same_name(tb_module_names[m], "src")) { fprintf(stderr, "Invalid module name at index %d\n", m); return -1; } for (n = 0; n < m; ++n) { if (same_name(tb_module_names[m], tb_module_names[n])) { fprintf(stderr, "Duplicate module name\n"); return -1; } } } return 0; } int tb_get_paths_at(const char *root, TbModule module, size_t group_index, int file_id, int LRflag, TbPaths *paths) { const TbGroup *group; int n1,n2; if (root == NULL || root[0] == '\0' || paths == NULL || (int)module < 0 || (int)module >= TB_MODULE_COUNT || group_index >= tb_group_count) return -1; group = &tb_groups[group_index]; if (file_id < group->start_id || file_id > group->end_id) return -1; n1 = snprintf(paths->paras, sizeof(paths->paras), "%s/%s/2DData/%d_para_verilog.txt", root, group->name, file_id); if ( (n1 < 0) || ((size_t)n1 >= sizeof(paths->paras))) return -1; switch(module) { case TB_1_peakCentering: if(LRflag == 0) { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/2DData/%d_L_verilog.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/1_peakCentering/%d_L_peakCentering.txt", root, group->name, file_id); } else { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/2DData/%d_R_verilog.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/1_peakCentering/%d_R_peakCentering.txt", root, group->name, file_id); } break; case TB_2_convolve: if(LRflag == 0) { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/1_peakCentering/%d_L_peakCentering.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/2_convolve/%d_L_convolve.txt", root, group->name, file_id); } else { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/1_peakCentering/%d_R_peakCentering.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/2_convolve/%d_R_convolve.txt", root, group->name, file_id); } break; case TB_3_subPix: if(LRflag == 0) { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/2_convolve/%d_L_convolve.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/3_subPix/%d_L_subPix.txt", root, group->name, file_id); } else { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/2_convolve/%d_R_convolve.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/3_subPix/%d_R_subPix.txt", root, group->name, file_id); } break; case TB_4_Calib: if(LRflag == 0) { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/3_subPix/%d_L_subPix.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/4_Calib/%d_L_calib.txt", root, group->name, file_id); } else { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/3_subPix/%d_R_subPix.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/4_Calib/%d_R_calib.txt", root, group->name, file_id); } break; case TB_5_lrMatch: if(LRflag == 0) { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/4_Calib/%d_L_calib.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/5_lrMatch/%d_lrMatch.txt", root, group->name, file_id); } else { n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/4_Calib/%d_R_calib.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/5_lrMatch/%d_lrMatch.txt", root, group->name, file_id); } break; case TB_6_SSProc: n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/5_lrMatch/%d_lrMatch.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/6_SSProc/%d_ssProc.txt", root, group->name, file_id); break; case TB_7_compute3D: n1 = snprintf(paths->input, sizeof(paths->input), "%s/%s/SimResult/6_SSProc/%d_ssProc.txt", root, group->name, file_id); n2 = snprintf(paths->output, sizeof(paths->output), "%s/%s/SimResult/7_compute3D/%d_compute3D.txt", root, group->name, file_id); break; default: break; } return ( (n1 < 0) || (n2 < 0) || ((size_t)n1 >= sizeof(paths->input)) || ((size_t)n2 >= sizeof(paths->output))) ? -1 : 0; } int tb_get_paths(TbModule module, size_t group_index, int file_id, int LRflag, TbPaths *paths) { return tb_get_paths_at(tb_sim_root, module, group_index, file_id, LRflag, paths); } int tb_get_fittingMap_paths(TbModule module, size_t group_index, TbFittingMapPaths *paths) { const TbGroup *group; int n1; if (tb_sim_root == NULL || tb_sim_root[0] == '\0' || paths == NULL || (int)module != TB_4_Calib || group_index >= tb_group_count) return -1; group = &tb_groups[group_index]; n1 = snprintf(paths->calib_fittingMap_L, sizeof(paths->calib_fittingMap_L), "%s/%s/simParas/fittingMapL.txt", tb_sim_root, group->name); if ( (n1 < 0) || ((size_t)n1 >= sizeof(paths->calib_fittingMap_L))) return -1; n1 = snprintf(paths->calib_fittingMap_R, sizeof(paths->calib_fittingMap_R), "%s/%s/simParas/fittingMapR.txt", tb_sim_root, group->name); if ( (n1 < 0) || ((size_t)n1 >= sizeof(paths->calib_fittingMap_R))) return -1; return 0; } Luma_frameInfo readParaFile(const char* file, int idx) { std::ifstream inputFile(file); Luma_frameInfo frameInfo; std::string strLineTxt; int data; getline(inputFile, strLineTxt); //XL sscanf(strLineTxt.c_str(), "%d", &data); frameInfo.left_L = (uint16_t)data; getline(inputFile, strLineTxt); //XR sscanf(strLineTxt.c_str(), "%d", &data); frameInfo.right_L = (uint16_t)data; getline(inputFile, strLineTxt); //TL sscanf(strLineTxt.c_str(), "%d", &data); frameInfo.left_T = (uint16_t)data; getline(inputFile, strLineTxt); //TR sscanf(strLineTxt.c_str(), "%d", &data); frameInfo.right_T = (uint16_t)data; getline(inputFile, strLineTxt); //W sscanf(strLineTxt.c_str(), "%d", &data); frameInfo.W = (uint16_t)data; getline(inputFile, strLineTxt); //H sscanf(strLineTxt.c_str(), "%d", &data); frameInfo.H = (uint16_t)data; getline(inputFile, strLineTxt); //U0 sscanf(strLineTxt.c_str(), "%x", &data); UintFloat tmp; tmp.unData = (unsigned int)data; frameInfo.u0 = tmp.fdata; getline(inputFile, strLineTxt); //V0 sscanf(strLineTxt.c_str(), "%x", &data); tmp.unData = (unsigned int)data; frameInfo.v0 = tmp.fdata; getline(inputFile, strLineTxt); //F sscanf(strLineTxt.c_str(), "%x", &data); tmp.unData = (unsigned int)data; frameInfo.F = tmp.fdata; getline(inputFile, strLineTxt); //F sscanf(strLineTxt.c_str(), "%x", &data); tmp.unData = (unsigned int)data; frameInfo.baseLen = tmp.fdata; frameInfo.FrmNo = idx; frameInfo.TimeStamp = idx * 1000; frameInfo.encInfo = idx; inputFile.close(); return frameInfo; }