293 lines
9.2 KiB
C++
293 lines
9.2 KiB
C++
#include "tbGlobals.h"
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#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;
|
|
}
|