version 1.6.1
1. fix calib bug: last data output error 2. add frmae lastSync
This commit is contained in:
parent
f7ebcdb77e
commit
c1049417b1
@ -15,8 +15,7 @@ void calib(
|
||||
|
||||
CalibData InData;
|
||||
InData = inCalibData.read();
|
||||
ap_uint<1> VSync = InData.Sync.range(1,1);
|
||||
if(0b0 == VSync) //wait for syncFirst
|
||||
if(0b10 != InData.Sync) //wait for syncFirst
|
||||
return;
|
||||
|
||||
Byte8 dataBuff;
|
||||
@ -131,7 +130,7 @@ void calib(
|
||||
dataBuff.dData = InData.calibK[1];
|
||||
apData32 = (ap_uint<32>)dataBuff.nData[0];
|
||||
calibPnt.value = apData32.range(7,0);
|
||||
calibPnt.Sync = 0;
|
||||
calibPnt.Sync = InData.Sync;
|
||||
calibPnt.rsv = 0;
|
||||
if(rawx < 0)
|
||||
vldFlag = 0;
|
||||
@ -161,7 +160,7 @@ void calib(
|
||||
dataBuff.dData = InData.calibK[1];
|
||||
apData32 = (ap_uint<32>)dataBuff.nData[0];
|
||||
calibPnt_pt1.value = apData32.range(7,0);
|
||||
calibPnt_pt1.Sync = 0;
|
||||
calibPnt_pt1.Sync = InData.Sync;
|
||||
calibPnt_pt1.rsv = 0;
|
||||
if(rawx_pt1 < 0)
|
||||
vldFlag_pt1 = 0;
|
||||
@ -339,8 +338,16 @@ void calib(
|
||||
}
|
||||
}
|
||||
if( (Lines > 0)&& (vldFlag == 1))
|
||||
{
|
||||
calibPnt.x = (float)(xmul0 + xmul1 + xmul2 + xmul3 + xmul4 + xmul5+ xmul6 + xmul7);
|
||||
calibPnt.y = (float)(ymul0 + ymul1 + ymul2 + ymul3 + ymul4 + ymul5+ ymul6 + ymul7);
|
||||
outSubpixCalib.write(calibPnt);
|
||||
}
|
||||
|
||||
if( (Lines > 0)&& (vldFlag_pt1 == 1))
|
||||
{
|
||||
calibPnt_pt1.x = (float)(xmul0_pt1 + xmul1_pt1 + xmul2_pt1 + xmul3_pt1 + xmul4_pt1 + xmul5_pt1+ xmul6_pt1 + xmul7_pt1);
|
||||
calibPnt_pt1.y = (float)(ymul0_pt1 + ymul1_pt1 + ymul2_pt1 + ymul3_pt1 + ymul4_pt1 + ymul5_pt1+ ymul6_pt1 + ymul7_pt1);
|
||||
outSubpixCalib.write(calibPnt_pt1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,49 @@
|
||||
#include "calib.h"
|
||||
#include "../../globals/tbGlobals.h"
|
||||
|
||||
Luma_frameInfo readParaFile(const char* file)
|
||||
{
|
||||
std::ifstream inputFile(file);
|
||||
Luma_frameInfo frameInfo;
|
||||
std::string strLineTxt;
|
||||
|
||||
int data;
|
||||
getline(inputFile, strLineTxt); //XL
|
||||
sscanf(strLineTxt.c_str(), "XL:%d", &data);
|
||||
frameInfo.L = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //XR
|
||||
|
||||
getline(inputFile, strLineTxt); //TL
|
||||
sscanf(strLineTxt.c_str(), "TL:%d", &data);
|
||||
frameInfo.T = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //TR
|
||||
|
||||
getline(inputFile, strLineTxt); //W
|
||||
sscanf(strLineTxt.c_str(), "W:%d", &data);
|
||||
frameInfo.W = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //H
|
||||
sscanf(strLineTxt.c_str(), "H:%d", &data);
|
||||
frameInfo.H = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //FrmNO
|
||||
sscanf(strLineTxt.c_str(), "FrmNO:%x", &data);
|
||||
frameInfo.FrmNo = (uint32_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //TimStp
|
||||
sscanf(strLineTxt.c_str(), "TimStp:%x", &data);
|
||||
frameInfo.TimeStamp = (uint32_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //EncInfo
|
||||
sscanf(strLineTxt.c_str(), "EncInfo:%x", &data);
|
||||
frameInfo.encInfo = (uint32_t)data;
|
||||
|
||||
inputFile.close();
|
||||
return frameInfo;
|
||||
}
|
||||
|
||||
std::vector<RgnSubPix> readSubpixDataFile(
|
||||
const char* file,
|
||||
uint16_t* validSize)
|
||||
@ -24,11 +67,11 @@ std::vector<RgnSubPix> readSubpixDataFile(
|
||||
continue;
|
||||
|
||||
float x;
|
||||
int y, Rid, Flag, pkValue;
|
||||
int y, Rid, Flag, pkValue, Sync;
|
||||
#if defined(__linux__)
|
||||
sscanf(strLineTxt.c_str(), "%f %d %d %x %d", &x, &y, &Rid, &Flag, &pkValue);
|
||||
sscanf(strLineTxt.c_str(), "%f %d %d %x %d %x", &x, &y, &Rid, &Flag, &pkValue, &Sync);
|
||||
#else
|
||||
sscanf_s(strLineTxt.c_str(), "%f %d %d %x %d", &x, &y, &Rid, &Flag, &pkValue);
|
||||
sscanf_s(strLineTxt.c_str(), "%f %d %d %x %d %x", &x, &y, &Rid, &Flag, &pkValue, &Sync);
|
||||
#endif
|
||||
|
||||
a_line.x = (float)x;
|
||||
@ -36,6 +79,7 @@ std::vector<RgnSubPix> readSubpixDataFile(
|
||||
a_line.rid = (ap_uint<11>)Rid;
|
||||
a_line.flag = (ap_uint<4>)Flag;
|
||||
a_line.value = (ap_uint<8>)pkValue;
|
||||
a_line.Sync = (ap_uint<2>)Sync;
|
||||
testData.push_back(a_line);
|
||||
if(x >= 0)
|
||||
validNum ++;
|
||||
@ -48,19 +92,13 @@ std::vector<RgnSubPix> readSubpixDataFile(
|
||||
void genCalibTestSream(
|
||||
std::vector<RgnSubPix>& subpixData,
|
||||
hls::stream<CalibData>& calibStream,
|
||||
const uint32_t FrmNo,
|
||||
const uint32_t timeStamp,
|
||||
const uint32_t encInfo,
|
||||
const uint16_t frameROI_w,
|
||||
const uint16_t frameROI_h,
|
||||
const uint16_t frameROI_x,
|
||||
const uint16_t frameROI_y,
|
||||
const Luma_frameInfo framwInfo,
|
||||
const uint16_t validDataSize)
|
||||
{
|
||||
CalibData VSync;
|
||||
Byte8 dataBuff;
|
||||
//1st:FrmNo
|
||||
dataBuff.nData[0] = FrmNo;
|
||||
dataBuff.nData[0] = framwInfo.FrmNo;
|
||||
dataBuff.nData[1] = 0;
|
||||
VSync.Sync = 0b10;
|
||||
VSync.calibK[0] = dataBuff.dData;
|
||||
@ -68,21 +106,21 @@ void genCalibTestSream(
|
||||
calibStream.write(VSync);
|
||||
|
||||
//2nd:FrmNo
|
||||
dataBuff.nData[0] = timeStamp;
|
||||
dataBuff.nData[0] = framwInfo.TimeStamp;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.calibK[0] = dataBuff.dData;
|
||||
VSync.calibK[1] = 0;
|
||||
calibStream.write(VSync);
|
||||
//3rd:encInfo
|
||||
dataBuff.nData[0] = encInfo;
|
||||
dataBuff.nData[0] = framwInfo.encInfo;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.calibK[0] = dataBuff.dData;
|
||||
VSync.calibK[1] = 0;
|
||||
calibStream.write(VSync);
|
||||
//4th:frmW(12bit), frmH(12bit)
|
||||
ap_uint<16> data16_1, data16_2;
|
||||
data16_1 = frameROI_w;
|
||||
data16_2 = frameROI_h;
|
||||
data16_1 = framwInfo.W;
|
||||
data16_2 = framwInfo.H;
|
||||
ap_uint<32> tmpData;
|
||||
tmpData(11,0) = data16_1.range(11,0);
|
||||
tmpData(23,12) = data16_2.range(11,0);
|
||||
@ -94,7 +132,7 @@ void genCalibTestSream(
|
||||
calibStream.write(VSync);
|
||||
//5th: frmX, WinNum
|
||||
int lines = (int)subpixData.size() / 2; //lines
|
||||
data16_1 = frameROI_x;
|
||||
data16_1 = framwInfo.L;
|
||||
data16_2 = (uint16_t)lines;
|
||||
tmpData(11,0) = data16_1.range(11,0);
|
||||
tmpData(23,12) = data16_2.range(11,0);
|
||||
@ -105,7 +143,7 @@ void genCalibTestSream(
|
||||
VSync.Sync = 0b00;
|
||||
calibStream.write(VSync);
|
||||
//6th: frmY
|
||||
data16_1 = frameROI_y;
|
||||
data16_1 = framwInfo.T;
|
||||
data16_2 = validDataSize;
|
||||
tmpData(11,0) = data16_1.range(11,0);
|
||||
tmpData(23,12) = data16_2.range(11,0);
|
||||
@ -118,6 +156,8 @@ void genCalibTestSream(
|
||||
//output data
|
||||
for(int i = 0; i < lines; i ++)
|
||||
{
|
||||
if(i == lines-1)
|
||||
int kkk = 1; //debug point
|
||||
RgnSubPix a_line = subpixData[i*2];
|
||||
CalibData conData;
|
||||
|
||||
@ -134,7 +174,7 @@ void genCalibTestSream(
|
||||
dataBuff.nData[0] = (uint32_t)apData32;
|
||||
dataBuff.nData[1] = 0;
|
||||
conData.calibK[1] = dataBuff.dData;
|
||||
conData.Sync = 0b01;
|
||||
conData.Sync = a_line.Sync;
|
||||
calibStream.write(conData);
|
||||
|
||||
a_line = subpixData[i*2+1];
|
||||
@ -150,7 +190,7 @@ void genCalibTestSream(
|
||||
dataBuff.nData[0] = (uint32_t)apData32;
|
||||
dataBuff.nData[1] = 0;
|
||||
conData.calibK[1] = dataBuff.dData;
|
||||
conData.Sync = 0b00;
|
||||
conData.Sync = a_line.Sync;
|
||||
calibStream.write(conData);
|
||||
|
||||
for(int m = 0; m < 4; m ++) //write k
|
||||
@ -222,6 +262,8 @@ void convertSubpixCalibStreamToArray(
|
||||
//output data
|
||||
for(int i = 0; i < winNum; i ++)
|
||||
{
|
||||
if(i == winNum-1)
|
||||
int kkk = 1; //debug point
|
||||
RgnSubPixCalib data_in = streamData.read();
|
||||
Luma_rgnSubpixCalib a_pnt;
|
||||
a_pnt.x = data_in.x;
|
||||
@ -229,6 +271,7 @@ void convertSubpixCalibStreamToArray(
|
||||
a_pnt.Rid = (uint16_t)data_in.rid;
|
||||
a_pnt.Flag = (uint8_t)data_in.flag;
|
||||
a_pnt.pkValue = (uint8_t)data_in.value;
|
||||
a_pnt.sync = (uint8_t)data_in.Sync;
|
||||
arrayData.push_back(a_pnt);
|
||||
}
|
||||
return;
|
||||
@ -244,71 +287,101 @@ void writeSubpixCalibData(
|
||||
{
|
||||
char data[250];
|
||||
#if defined(__linux__)
|
||||
sprintf(data, "%.2f %.2f %04d %01x %02d",
|
||||
outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue);
|
||||
sprintf(data, "%.2f %.2f %04d %01x %02d %01x",
|
||||
outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue, outData[i].sync);
|
||||
#else
|
||||
sprintf_s(data, "%.2f %.2f %04d %01x %02d",
|
||||
outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue);
|
||||
sprintf_s(data, "%.2f %.2f %04d %01x %02d %01x",
|
||||
outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue, outData[i].sync);
|
||||
#endif
|
||||
sw << data << std::endl;
|
||||
}
|
||||
sw.close();
|
||||
}
|
||||
|
||||
#define TST_GROUP 1
|
||||
#define TST_GROUP 3
|
||||
|
||||
int main()
|
||||
{
|
||||
#if defined(__linux__)
|
||||
const char* SrcDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/"
|
||||
};
|
||||
const char* InDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/Subpix/testData.txt"
|
||||
"/home/zengHQ/CamTestData/testSample/Subpix/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/Subpix/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/Subpix/",
|
||||
};
|
||||
const char* OutDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/Calib/testData.txt"
|
||||
"/home/zengHQ/CamTestData/testSample/Calib/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/Calib/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/Calib/",
|
||||
};
|
||||
#else
|
||||
const char* SrcDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"E:/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"E:/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/"
|
||||
};
|
||||
const char* InDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/Subpix/testData.txt"
|
||||
"E:/CamTestData/testSample/Subpix/",
|
||||
"E:/CamTestData/Grp_0/Subpix/",
|
||||
"E:/CamTestData/Grp_1/Subpix/",
|
||||
};
|
||||
const char* OutDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/Calib/testData.txt"
|
||||
"E:/CamTestData/testSample/Calib/",
|
||||
"E:/CamTestData/Grp_0/Calib/",
|
||||
"E:/CamTestData/Grp_1/Calib/",
|
||||
};
|
||||
#endif
|
||||
int testFileSize[TST_GROUP] = {1, 4, 4};
|
||||
|
||||
for(int n = 0; n < TST_GROUP; n ++)
|
||||
for(int n = 1; n < TST_GROUP; n ++)
|
||||
{
|
||||
int winSize = 0;
|
||||
uint16_t vldSize = 0;
|
||||
std::vector<RgnSubPix> testData = readSubpixDataFile(InDataPath[n], &vldSize);
|
||||
//gen test stream
|
||||
hls::stream<CalibData> inStream;
|
||||
uint32_t FrmNo = 0x1;
|
||||
uint32_t timeStamp = 0x2;
|
||||
uint32_t encInfo = 0x3;
|
||||
uint16_t frameROI_w = 0x100;
|
||||
uint16_t frameROI_h = 2048;
|
||||
uint16_t frameROI_x = 0;
|
||||
uint16_t frameROI_y = 0;
|
||||
genCalibTestSream(testData, inStream, FrmNo, timeStamp, encInfo, frameROI_w, frameROI_h, frameROI_x, frameROI_y, vldSize);
|
||||
int fileSize = testFileSize[n];
|
||||
for(int fi = 0; fi < fileSize; fi++)
|
||||
{
|
||||
char fileName[200];
|
||||
char paraFileName[200];
|
||||
char outFileName[200];
|
||||
#if defined(__linux__)
|
||||
sprintf(fileName, "%s%d_L_subpix.txt", InDataPath[n], fi);
|
||||
sprintf(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi);
|
||||
sprintf(outFileName, "%s%d_L_calib.txt", OutDataPath[n], fi);
|
||||
#else
|
||||
sprintf_s(fileName, "%s%d_L_subpix.txt", InDataPath[n], fi);
|
||||
sprintf_s(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi);
|
||||
sprintf_s(outFileName, "%s%d_L_calib.txt", OutDataPath[n], fi);
|
||||
#endif
|
||||
Luma_frameInfo framwInfo = readParaFile(paraFileName);
|
||||
|
||||
hls::stream<RgnSubPixCalib> outStream;
|
||||
calib(inStream,outStream);
|
||||
uint16_t vldSize = 0;
|
||||
std::vector<RgnSubPix> testData = readSubpixDataFile(fileName, &vldSize);
|
||||
//gen test stream
|
||||
hls::stream<CalibData> inStream;
|
||||
genCalibTestSream(testData, inStream, framwInfo, vldSize);
|
||||
|
||||
std::vector<Luma_rgnSubpixCalib> outData;
|
||||
uint32_t outFrmNo, outTimeStamp, outEncInfo;
|
||||
uint16_t outROI_w,outROI_h, outROI_x,outROI_y;
|
||||
convertSubpixCalibStreamToArray(
|
||||
outStream,
|
||||
outData,
|
||||
&outFrmNo,
|
||||
&outTimeStamp,
|
||||
&outEncInfo,
|
||||
&outROI_w,
|
||||
&outROI_h,
|
||||
&outROI_x,
|
||||
&outROI_y);
|
||||
hls::stream<RgnSubPixCalib> outStream;
|
||||
calib(inStream,outStream);
|
||||
|
||||
writeSubpixCalibData(OutDataPath[n], outData);
|
||||
std::vector<Luma_rgnSubpixCalib> outData;
|
||||
uint32_t outFrmNo, outTimeStamp, outEncInfo;
|
||||
uint16_t outROI_w,outROI_h, outROI_x,outROI_y;
|
||||
convertSubpixCalibStreamToArray(
|
||||
outStream,
|
||||
outData,
|
||||
&outFrmNo,
|
||||
&outTimeStamp,
|
||||
&outEncInfo,
|
||||
&outROI_w,
|
||||
&outROI_h,
|
||||
&outROI_x,
|
||||
&outROI_y);
|
||||
|
||||
writeSubpixCalibData(outFileName, outData);
|
||||
}
|
||||
}
|
||||
printf("done!\n");
|
||||
}
|
||||
|
||||
@ -86,10 +86,9 @@ void compute3D(
|
||||
outData.y = (float)y;
|
||||
outData.z = (float)z;
|
||||
outData.value = InData.value;
|
||||
if(n == (WinNum-1))
|
||||
outData.Sync = 0b01;
|
||||
else
|
||||
outData.Sync = 0;
|
||||
outData.Sync = InData.Sync;
|
||||
outPt3D.write(outData);
|
||||
if(0b11 == InData.Sync)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,49 @@
|
||||
#include "compute3D.h"
|
||||
#include "../../globals/tbGlobals.h"
|
||||
|
||||
Luma_frameInfo readParaFile(const char* file)
|
||||
{
|
||||
std::ifstream inputFile(file);
|
||||
Luma_frameInfo frameInfo;
|
||||
std::string strLineTxt;
|
||||
|
||||
int data;
|
||||
getline(inputFile, strLineTxt); //XL
|
||||
sscanf(strLineTxt.c_str(), "XL:%d", &data);
|
||||
frameInfo.L = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //XR
|
||||
|
||||
getline(inputFile, strLineTxt); //TL
|
||||
sscanf(strLineTxt.c_str(), "TL:%d", &data);
|
||||
frameInfo.T = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //TR
|
||||
|
||||
getline(inputFile, strLineTxt); //W
|
||||
sscanf(strLineTxt.c_str(), "W:%d", &data);
|
||||
frameInfo.W = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //H
|
||||
sscanf(strLineTxt.c_str(), "H:%d", &data);
|
||||
frameInfo.H = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //FrmNO
|
||||
sscanf(strLineTxt.c_str(), "FrmNO:%x", &data);
|
||||
frameInfo.FrmNo = (uint32_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //TimStp
|
||||
sscanf(strLineTxt.c_str(), "TimStp:%x", &data);
|
||||
frameInfo.TimeStamp = (uint32_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //EncInfo
|
||||
sscanf(strLineTxt.c_str(), "EncInfo:%x", &data);
|
||||
frameInfo.encInfo = (uint32_t)data;
|
||||
|
||||
inputFile.close();
|
||||
return frameInfo;
|
||||
}
|
||||
|
||||
std::vector<RgnSubPixCalib> readSubpixCalibDataFile(
|
||||
const char* file)
|
||||
{
|
||||
@ -21,17 +64,18 @@ std::vector<RgnSubPixCalib> readSubpixCalibDataFile(
|
||||
continue;
|
||||
|
||||
float x,y;
|
||||
int Rid, Flag, pkValue;
|
||||
int Rid, Flag, pkValue, Sync;
|
||||
#if defined(__linux__)
|
||||
sscanf(strLineTxt.c_str(), "%f %f %d %x %d", &x, &y, &Rid, &Flag, &pkValue);
|
||||
sscanf(strLineTxt.c_str(), "%f %f %d %x %d %x", &x, &y, &Rid, &Flag, &pkValue, &Sync);
|
||||
#else
|
||||
sscanf_s(strLineTxt.c_str(), "%f %f %d %x %d", &x, &y, &Rid, &Flag, &pkValue);
|
||||
sscanf_s(strLineTxt.c_str(), "%f %f %d %x %d %x", &x, &y, &Rid, &Flag, &pkValue, &Sync);
|
||||
#endif
|
||||
a_line.x = (float)x;
|
||||
a_line.y = (float)y;
|
||||
a_line.rid = (ap_uint<11>)Rid;
|
||||
a_line.flag = (ap_uint<4>)Flag;
|
||||
a_line.value = (ap_uint<8>)pkValue;
|
||||
a_line.Sync = (ap_uint<2>)Sync;
|
||||
testData.push_back(a_line);
|
||||
}
|
||||
inputFile.close();
|
||||
@ -41,18 +85,12 @@ std::vector<RgnSubPixCalib> readSubpixCalibDataFile(
|
||||
void genCompute3DTestSream(
|
||||
std::vector<RgnSubPixCalib>& subpixCalibData,
|
||||
hls::stream<RgnSubPixCalib>& conpute3DStream,
|
||||
const uint32_t FrmNo,
|
||||
const uint32_t timeStamp,
|
||||
const uint32_t encInfo,
|
||||
const uint16_t frameROI_w,
|
||||
const uint16_t frameROI_h,
|
||||
const uint16_t frameROI_x,
|
||||
const uint16_t frameROI_y)
|
||||
const Luma_frameInfo framwInfo)
|
||||
{
|
||||
RgnSubPixCalib VSync;
|
||||
UintFloat dataBuff;
|
||||
//1st:FrmNo
|
||||
dataBuff.unData = FrmNo;
|
||||
dataBuff.unData = framwInfo.FrmNo;
|
||||
VSync.Sync = 0b10;
|
||||
VSync.x = dataBuff.fdata;
|
||||
VSync.y = 0;
|
||||
@ -63,19 +101,19 @@ void genCompute3DTestSream(
|
||||
conpute3DStream.write(VSync);
|
||||
|
||||
//2nd:FrmNo
|
||||
dataBuff.unData = timeStamp;
|
||||
dataBuff.unData = framwInfo.TimeStamp;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.x = dataBuff.fdata;
|
||||
conpute3DStream.write(VSync);
|
||||
//3rd:encInfo
|
||||
dataBuff.unData = encInfo;
|
||||
dataBuff.unData = framwInfo.encInfo;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.x = dataBuff.fdata;
|
||||
conpute3DStream.write(VSync);
|
||||
//4th:frmW(12bit), frmH(12bit)
|
||||
ap_uint<16> data16_1, data16_2;
|
||||
data16_1 = frameROI_w;
|
||||
data16_2 = frameROI_h;
|
||||
data16_1 = framwInfo.W;
|
||||
data16_2 = framwInfo.H;
|
||||
ap_uint<32> tmpData;
|
||||
tmpData(11,0) = data16_1.range(11,0);
|
||||
tmpData(23,12) = data16_2.range(11,0);
|
||||
@ -86,7 +124,7 @@ void genCompute3DTestSream(
|
||||
conpute3DStream.write(VSync);
|
||||
//5th: frmX, WinNum
|
||||
int winNum = (int)subpixCalibData.size();
|
||||
data16_1 = frameROI_x;
|
||||
data16_1 = framwInfo.L;
|
||||
data16_2 = (uint16_t)winNum;
|
||||
tmpData(11,0) = data16_1.range(11,0);
|
||||
tmpData(23,12) = data16_2.range(11,0);
|
||||
@ -96,7 +134,7 @@ void genCompute3DTestSream(
|
||||
VSync.Sync = 0b00;
|
||||
conpute3DStream.write(VSync);
|
||||
//6th: frmY
|
||||
data16_1 = frameROI_y;
|
||||
data16_1 = framwInfo.T;
|
||||
data16_2 = 0;
|
||||
tmpData(11,0) = data16_1.range(11,0);
|
||||
tmpData(23,12) = data16_2.range(11,0);
|
||||
@ -109,10 +147,6 @@ void genCompute3DTestSream(
|
||||
for(int i = 0; i < winNum; i ++)
|
||||
{
|
||||
RgnSubPixCalib a_line = subpixCalibData[i];
|
||||
if(i == 0)
|
||||
a_line.Sync = 0b01;
|
||||
else
|
||||
a_line.Sync = 0b00;
|
||||
a_line.rsv = 0;
|
||||
conpute3DStream.write(a_line);
|
||||
}
|
||||
@ -166,7 +200,7 @@ void convertSubpixCalibStreamToArray(
|
||||
a_pnt.y = data_in.y;
|
||||
a_pnt.z = data_in.z;
|
||||
a_pnt.value = (ap_uint<8>)data_in.value;
|
||||
a_pnt.Sync = 0;
|
||||
a_pnt.Sync = data_in.Sync;
|
||||
arrayData.push_back(a_pnt);
|
||||
}
|
||||
return;
|
||||
@ -182,76 +216,108 @@ void writeCompute3DData(
|
||||
{
|
||||
char data[250];
|
||||
uint8_t value = (uint8_t)outData[i].value;
|
||||
uint8_t sync = (uint8_t)outData[i].Sync;
|
||||
#if defined(__linux__)
|
||||
sprintf(data, "%.3f %.3f %.3f %02d",
|
||||
outData[i].x, outData[i].y, outData[i].z, value);
|
||||
sprintf(data, "%.3f %.3f %.3f %02d %01x",
|
||||
outData[i].x, outData[i].y, outData[i].z, value, sync);
|
||||
#else
|
||||
sprintf_s(data, "%.3f %.3f %.3f %02d",
|
||||
outData[i].x, outData[i].y, outData[i].z, value);
|
||||
sprintf_s(data, "%.3f %.3f %.3f %02d %01x",
|
||||
outData[i].x, outData[i].y, outData[i].z, value, sync);
|
||||
#endif
|
||||
sw << data << std::endl;
|
||||
}
|
||||
sw.close();
|
||||
}
|
||||
|
||||
#define TST_GROUP 1
|
||||
#define TST_GROUP 3
|
||||
|
||||
int main()
|
||||
{
|
||||
#if defined(__linux__)
|
||||
const char* SrcDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/"
|
||||
};
|
||||
const char* InDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/Calib/testData.txt"
|
||||
"/home/zengHQ/CamTestData/testSample/Calib/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/Calib/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/Calib/",
|
||||
};
|
||||
const char* OutDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/Compute3D/testData.txt"
|
||||
"/home/zengHQ/CamTestData/testSample/Compute3D/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/Compute3D/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/Compute3D/",
|
||||
};
|
||||
#else
|
||||
const char* SrcDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"E:/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"E:/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/"
|
||||
};
|
||||
const char* InDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/Calib/testData.txt"
|
||||
"E:/CamTestData/testSample/Calib/",
|
||||
"E:/CamTestData/Grp_0/Calib/",
|
||||
"E:/CamTestData/Grp_1/Calib/",
|
||||
};
|
||||
const char* OutDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/Compute3D/testData.txt"
|
||||
"E:/CamTestData/testSample/Compute3D/",
|
||||
"E:/CamTestData/Grp_0/Compute3D/",
|
||||
"E:/CamTestData/Grp_1/Compute3D/",
|
||||
};
|
||||
#endif
|
||||
int testFileSize[TST_GROUP] = {1, 4, 4};
|
||||
|
||||
for(int n = 0; n < TST_GROUP; n ++)
|
||||
for(int n = 1; n < TST_GROUP; n ++)
|
||||
{
|
||||
std::vector<RgnSubPixCalib> testData = readSubpixCalibDataFile(InDataPath[n]);
|
||||
//gen test stream
|
||||
hls::stream<RgnSubPixCalib> inStream;
|
||||
uint32_t FrmNo = 0x1;
|
||||
uint32_t timeStamp = 0x2;
|
||||
uint32_t encInfo = 0x3;
|
||||
uint16_t frameROI_w = 0x100;
|
||||
uint16_t frameROI_h = 2048;
|
||||
uint16_t frameROI_x = 0;
|
||||
uint16_t frameROI_y = 0;
|
||||
genCompute3DTestSream(testData, inStream, FrmNo, timeStamp, encInfo, frameROI_w, frameROI_h, frameROI_x, frameROI_y);
|
||||
int winSize = 0;
|
||||
int fileSize = testFileSize[n];
|
||||
for(int fi = 0; fi < fileSize; fi++)
|
||||
{
|
||||
char fileName[200];
|
||||
char paraFileName[200];
|
||||
char outFileName[200];
|
||||
#if defined(__linux__)
|
||||
sprintf(fileName, "%s%d_L_calib.txt", InDataPath[n], fi);
|
||||
sprintf(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi);
|
||||
sprintf(outFileName, "%s%d_L_compute3d.txt", OutDataPath[n], fi);
|
||||
#else
|
||||
sprintf_s(fileName, "%s%d_L_calib.txt", InDataPath[n], fi);
|
||||
sprintf_s(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi);
|
||||
sprintf_s(outFileName, "%s%d_L_compute3d.txt", OutDataPath[n], fi);
|
||||
#endif
|
||||
Luma_frameInfo framwInfo = readParaFile(paraFileName);
|
||||
|
||||
float u0 = 620.1;
|
||||
float v0 = 1023.51;
|
||||
float F_inv = 0.0009933051235;
|
||||
float plane_a = -2.67733;
|
||||
float plane_b = 0.0501805;
|
||||
float plane_c = 631.944;
|
||||
hls::stream<Pnt3D> outStream;
|
||||
compute3D(inStream, outStream, u0, v0, F_inv, plane_a, plane_b, plane_c );
|
||||
std::vector<RgnSubPixCalib> testData = readSubpixCalibDataFile(fileName);
|
||||
//gen test stream
|
||||
hls::stream<RgnSubPixCalib> inStream;
|
||||
genCompute3DTestSream(testData, inStream, framwInfo);
|
||||
|
||||
//output
|
||||
std::vector<Pnt3D> outData;
|
||||
uint32_t outFrmNo, outTimeStamp, outEncInfo;
|
||||
uint16_t outROI_w,outROI_h, outROI_x,outROI_y;
|
||||
convertSubpixCalibStreamToArray(
|
||||
outStream,
|
||||
outData,
|
||||
&outFrmNo,
|
||||
&outTimeStamp,
|
||||
&outEncInfo,
|
||||
&outROI_w,
|
||||
&outROI_h,
|
||||
&outROI_x,
|
||||
&outROI_y);
|
||||
writeCompute3DData(OutDataPath[n], outData);
|
||||
float u0 = 630;
|
||||
float v0 = 960;
|
||||
float F_inv = 0.0009933051235;
|
||||
float plane_a = -2.0;
|
||||
float plane_b = 0.0501805;
|
||||
float plane_c = 631.944;
|
||||
hls::stream<Pnt3D> outStream;
|
||||
compute3D(inStream, outStream, u0, v0, F_inv, plane_a, plane_b, plane_c );
|
||||
|
||||
//output
|
||||
std::vector<Pnt3D> outData;
|
||||
uint32_t outFrmNo, outTimeStamp, outEncInfo;
|
||||
uint16_t outROI_w,outROI_h, outROI_x,outROI_y;
|
||||
convertSubpixCalibStreamToArray(
|
||||
outStream,
|
||||
outData,
|
||||
&outFrmNo,
|
||||
&outTimeStamp,
|
||||
&outEncInfo,
|
||||
&outROI_w,
|
||||
&outROI_h,
|
||||
&outROI_x,
|
||||
&outROI_y);
|
||||
writeCompute3DData(outFileName, outData);
|
||||
}
|
||||
}
|
||||
printf("done!\n");
|
||||
}
|
||||
|
||||
@ -19,8 +19,7 @@ void convolve(
|
||||
ap_uint<12> WinNum = 0;
|
||||
RgnPix InData;
|
||||
InData = InRgnPnt.read();
|
||||
ap_uint<1> VSync = InData.Sync.range(1,1);
|
||||
if(0b0 == VSync) //wait for syncFirst
|
||||
if(0b10 != InData.Sync) //wait for syncFirst
|
||||
return;
|
||||
|
||||
RgnPixConvolve outData = {0,0,0,0,0,0, 0, 0, 0};
|
||||
@ -82,14 +81,23 @@ void convolve(
|
||||
int nD2 = 0;
|
||||
RgnPix HSyncData_d1 = {0,0,0,0,0,0,0};
|
||||
ap_uint<8> peakValue = 0;
|
||||
for(int n = 0; n < WinNum; n ++)
|
||||
ap_uint<1> lastData = false;
|
||||
for(int n = 0; n <= WinNum; n ++)
|
||||
{
|
||||
#pragma HLS LOOP_TRIPCOUNT min=3072 max=3072
|
||||
if(1 == lastData) //frmae done
|
||||
break;
|
||||
|
||||
for(int i = 0; i <= 8; i ++)
|
||||
{
|
||||
#pragma HLS PIPELINE II=1
|
||||
|
||||
RgnPix InData = InRgnPnt.read();
|
||||
if(0b11 == InData.Sync)
|
||||
{
|
||||
lastData = 1;
|
||||
break;
|
||||
}
|
||||
if(0 == i) //HSync
|
||||
{
|
||||
//compute pre-line subpix; output
|
||||
@ -134,7 +142,7 @@ void convolve(
|
||||
if(WinNum > 0)
|
||||
{
|
||||
RgnPixConvolve a_pnt;
|
||||
a_pnt.Sync = 0b00;
|
||||
a_pnt.Sync = 0b11;
|
||||
a_pnt.LazerWinX = HSyncData_d1.LazerWinX;
|
||||
a_pnt.LazerWinY = HSyncData_d1.LazerWinY;
|
||||
a_pnt.LazerWinRid = HSyncData_d1.LazerWinRid;
|
||||
|
||||
@ -7,6 +7,49 @@
|
||||
#include "convolve.h"
|
||||
#include "../../globals/tbGlobals.h"
|
||||
|
||||
Luma_frameInfo readParaFile(const char* file)
|
||||
{
|
||||
std::ifstream inputFile(file);
|
||||
Luma_frameInfo frameInfo;
|
||||
std::string strLineTxt;
|
||||
|
||||
int data;
|
||||
getline(inputFile, strLineTxt); //XL
|
||||
sscanf(strLineTxt.c_str(), "XL:%d", &data);
|
||||
frameInfo.L = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //XR
|
||||
|
||||
getline(inputFile, strLineTxt); //TL
|
||||
sscanf(strLineTxt.c_str(), "TL:%d", &data);
|
||||
frameInfo.T = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //TR
|
||||
|
||||
getline(inputFile, strLineTxt); //W
|
||||
sscanf(strLineTxt.c_str(), "W:%d", &data);
|
||||
frameInfo.W = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //H
|
||||
sscanf(strLineTxt.c_str(), "H:%d", &data);
|
||||
frameInfo.H = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //FrmNO
|
||||
sscanf(strLineTxt.c_str(), "FrmNO:%x", &data);
|
||||
frameInfo.FrmNo = (uint32_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //TimStp
|
||||
sscanf(strLineTxt.c_str(), "TimStp:%x", &data);
|
||||
frameInfo.TimeStamp = (uint32_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //EncInfo
|
||||
sscanf(strLineTxt.c_str(), "EncInfo:%x", &data);
|
||||
frameInfo.encInfo = (uint32_t)data;
|
||||
|
||||
inputFile.close();
|
||||
return frameInfo;
|
||||
}
|
||||
|
||||
std::vector<Luma_rgnData> readTestFile(
|
||||
const char* file,
|
||||
int* winSize)
|
||||
@ -60,32 +103,26 @@ std::vector<Luma_rgnData> readTestFile(
|
||||
void genTestSream(
|
||||
std::vector<Luma_rgnData>& srcData,
|
||||
hls::stream<RgnPix>& inStream,
|
||||
const uint32_t FrmNo,
|
||||
const uint32_t timeStamp,
|
||||
const uint32_t encInfo,
|
||||
const uint16_t frameROI_w,
|
||||
const uint16_t frameROI_h,
|
||||
const uint16_t frameROI_x,
|
||||
const uint16_t frameROI_y)
|
||||
const Luma_frameInfo FrmInfo)
|
||||
{
|
||||
RgnPix VSync = {0,0,0,0,0,0,0};
|
||||
ap_uint<32> data_32;
|
||||
//1st:FrmNo
|
||||
data_32 = FrmNo;
|
||||
data_32 = FrmInfo.FrmNo;
|
||||
VSync.Sync = 0b10;
|
||||
VSync.LazerWinX(11,0) = data_32.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data_32.range(23,12);
|
||||
VSync.LazerWinRid(7,0) = data_32.range(31,24);
|
||||
inStream.write(VSync);
|
||||
//2nd:FrmNo
|
||||
data_32 = timeStamp;
|
||||
data_32 = FrmInfo.TimeStamp;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data_32.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data_32.range(23,12);
|
||||
VSync.LazerWinRid(7,0) = data_32.range(31,24);
|
||||
inStream.write(VSync);
|
||||
//3rd:encInfo
|
||||
data_32 = encInfo;
|
||||
data_32 = FrmInfo.encInfo;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data_32.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data_32.range(23,12);
|
||||
@ -93,28 +130,28 @@ void genTestSream(
|
||||
inStream.write(VSync);
|
||||
//4th:frmW(12bit), frmH(12bit)
|
||||
ap_uint<16> data16_1, data16_2;
|
||||
data16_1 = frameROI_w;
|
||||
data16_2 = frameROI_h;
|
||||
data16_1 = FrmInfo.W;
|
||||
data16_2 = FrmInfo.H;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data16_1.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data16_2.range(11,0);
|
||||
inStream.write(VSync);
|
||||
//5th: frmX, WinNum
|
||||
int winNum = (int)srcData.size();
|
||||
data16_1 = frameROI_x;
|
||||
int winNum = (int)srcData.size() + 12;
|
||||
data16_1 = FrmInfo.L;
|
||||
data16_2 = (uint16_t)winNum;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data16_1.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data16_2.range(11,0);
|
||||
inStream.write(VSync);
|
||||
//6th: frmY
|
||||
data16_1 = frameROI_y;
|
||||
data16_1 = FrmInfo.T;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data16_1.range(11,0);
|
||||
VSync.LazerWinY(11,0) = 0;
|
||||
inStream.write(VSync);
|
||||
//output data
|
||||
for(int i = 0; i < winNum; i ++)
|
||||
for(int i = 0, i_max= (int)srcData.size(); i < i_max; i ++)
|
||||
{
|
||||
Luma_rgnData* a_line = &srcData[i];
|
||||
RgnPix Hsync;
|
||||
@ -138,6 +175,16 @@ void genTestSream(
|
||||
inStream.write(a_data);
|
||||
}
|
||||
}
|
||||
//add Last sync data
|
||||
VSync.LazerWinFlag = 0;
|
||||
VSync.LazerWinRid = 0;
|
||||
VSync.LazerWinRsv = 0;
|
||||
VSync.LazerWinX = 0;
|
||||
VSync.LazerWinY = 0;
|
||||
VSync.RltvRdx = 0;
|
||||
VSync.Sync = 0b11;
|
||||
inStream.write(VSync);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -201,6 +248,8 @@ void convertConvolveStreamToArray(
|
||||
a_pnt.nD1 = data_in.nD1;
|
||||
a_pnt.nD2 = data_in.nD2;
|
||||
arrayData.push_back(a_pnt);
|
||||
if(data_in.Sync == 0b11)
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -238,58 +287,90 @@ void writeConvolveData(
|
||||
sw.close();
|
||||
}
|
||||
|
||||
#define TST_GROUP 1
|
||||
#define TST_GROUP 3
|
||||
|
||||
int main()
|
||||
{
|
||||
#if defined(__linux__)
|
||||
const char* SrcDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/"
|
||||
};
|
||||
const char* InDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/PkCentering/testData.txt"
|
||||
"/home/zengHQ/CamTestData/testSample/PkCentering/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/PkCentering/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/PkCentering/",
|
||||
};
|
||||
const char* OutDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/Convolve/testData.txt"
|
||||
"/home/zengHQ/CamTestData/testSample/Convolve/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/Convolve/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/Convolve/",
|
||||
};
|
||||
#else
|
||||
const char* SrcDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"E:/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"E:/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/"
|
||||
};
|
||||
const char* InDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/PkCentering/testData.txt"
|
||||
"E:/CamTestData/testSample/PkCentering/",
|
||||
"E:/CamTestData/Grp_0/PkCentering/",
|
||||
"E:/CamTestData/Grp_1/PkCentering/",
|
||||
};
|
||||
const char* OutDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/Convolve/testData.txt"
|
||||
"E:/CamTestData/testSample/Convolve/",
|
||||
"E:/CamTestData/Grp_0/Convolve/",
|
||||
"E:/CamTestData/Grp_1/Convolve/",
|
||||
};
|
||||
#endif
|
||||
for(int n = 0; n < TST_GROUP; n ++)
|
||||
int testFileSize[TST_GROUP] = {1, 4, 4};
|
||||
|
||||
for(int n = 1; n < TST_GROUP; n ++)
|
||||
{
|
||||
int winSize = 0;
|
||||
std::vector<Luma_rgnData> testData = readTestFile(InDataPath[n], &winSize);
|
||||
//gen test stream
|
||||
hls::stream<RgnPix> inStream;
|
||||
uint32_t FrmNo = 0x1;
|
||||
uint32_t timeStamp = 0x2;
|
||||
uint32_t encInfo = 0x3;
|
||||
uint16_t frameROI_w = 0x100;
|
||||
uint16_t frameROI_h = 2048;
|
||||
uint16_t frameROI_x = 0;
|
||||
uint16_t frameROI_y = 0;
|
||||
genTestSream(testData, inStream, FrmNo, timeStamp, encInfo, frameROI_w, frameROI_h, frameROI_x, frameROI_y);
|
||||
int fileSize = testFileSize[n];
|
||||
for(int fi = 0; fi < fileSize; fi++)
|
||||
{
|
||||
char fileName[200];
|
||||
char paraFileName[200];
|
||||
char outFileName[200];
|
||||
#if defined(__linux__)
|
||||
sprintf(fileName, "%s%d_L_pkCenter.txt", InDataPath[n], fi);
|
||||
sprintf(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi);
|
||||
sprintf(outFileName, "%s%d_L_convolve.txt", OutDataPath[n], fi);
|
||||
#else
|
||||
sprintf_s(fileName, "%s%d_L_pkCenter.txt", InDataPath[n], fi);
|
||||
sprintf_s(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi);
|
||||
sprintf_s(outFileName, "%s%d_L_convolve.txt", OutDataPath[n], fi);
|
||||
#endif
|
||||
|
||||
hls::stream<RgnPixConvolve> OutConvolvePnt;
|
||||
convolve( inStream, OutConvolvePnt );
|
||||
std::vector<Luma_rgnData> testData = readTestFile(fileName, &winSize);
|
||||
Luma_frameInfo framwInfo = readParaFile(paraFileName);
|
||||
|
||||
std::vector<Luma_convolveData> outData;
|
||||
uint32_t outFrmNo, outTimeStamp, outEncInfo;
|
||||
uint16_t outROI_w,outROI_h, outROI_x,outROI_y;
|
||||
convertConvolveStreamToArray(
|
||||
OutConvolvePnt,
|
||||
outData,
|
||||
&outFrmNo,
|
||||
&outTimeStamp,
|
||||
&outEncInfo,
|
||||
&outROI_w,
|
||||
&outROI_h,
|
||||
&outROI_x,
|
||||
&outROI_y);
|
||||
//gen test stream
|
||||
hls::stream<RgnPix> inStream;
|
||||
genTestSream(testData, inStream, framwInfo);
|
||||
|
||||
writeConvolveData(OutDataPath[n], outData);
|
||||
hls::stream<RgnPixConvolve> OutConvolvePnt;
|
||||
convolve( inStream, OutConvolvePnt );
|
||||
|
||||
std::vector<Luma_convolveData> outData;
|
||||
uint32_t outFrmNo, outTimeStamp, outEncInfo;
|
||||
uint16_t outROI_w,outROI_h, outROI_x,outROI_y;
|
||||
convertConvolveStreamToArray(
|
||||
OutConvolvePnt,
|
||||
outData,
|
||||
&outFrmNo,
|
||||
&outTimeStamp,
|
||||
&outEncInfo,
|
||||
&outROI_w,
|
||||
&outROI_h,
|
||||
&outROI_x,
|
||||
&outROI_y);
|
||||
|
||||
writeConvolveData(outFileName, outData);
|
||||
}
|
||||
}
|
||||
printf("done!\n");
|
||||
}
|
||||
|
||||
@ -50,6 +50,7 @@ typedef struct
|
||||
uint16_t Rid; //region的ID
|
||||
uint8_t Flag; //bit0是overlap标志。bit1是反光信号标
|
||||
uint8_t pkValue;
|
||||
uint8_t Sync;
|
||||
}Luma_rgnSubpix;
|
||||
|
||||
|
||||
@ -60,6 +61,7 @@ typedef struct
|
||||
uint16_t Rid; //region的ID
|
||||
uint8_t Flag; //bit0是overlap标志。bit1是反光信号标
|
||||
uint8_t pkValue;
|
||||
uint8_t sync;
|
||||
}Luma_rgnSubpixCalib;
|
||||
|
||||
#pragma pack(push, 1)
|
||||
|
||||
@ -110,6 +110,7 @@ Luma_frameInfo readParaFile(const char* file)
|
||||
sscanf(strLineTxt.c_str(), "EncInfo:%x", &data);
|
||||
frameInfo.encInfo = (uint32_t)data;
|
||||
|
||||
inputFile.close();
|
||||
return frameInfo;
|
||||
}
|
||||
|
||||
|
||||
@ -18,8 +18,7 @@ void subpix(
|
||||
ap_uint<12> frmY = 0;
|
||||
RgnPixConvolve InData;
|
||||
InData = InConvolvePnt.read();
|
||||
ap_uint<1> VSync = InData.Sync.range(1,1);
|
||||
if(0b0 == VSync) //wait for syncFirst
|
||||
if(0b10 != InData.Sync) //wait for syncFirst
|
||||
return;
|
||||
|
||||
RgnSubPix outData = {0,0,0,0,0,0};
|
||||
@ -91,11 +90,8 @@ void subpix(
|
||||
|
||||
int nStart = (int)frmY;
|
||||
ap_uint<12> lastLine = frmY + frmH - 1;
|
||||
ap_uint<16> readNum = 0;
|
||||
ap_uint<1> readFlag = 1;
|
||||
|
||||
InData = InConvolvePnt.read();
|
||||
readNum ++;
|
||||
RgnPixConvolve currData;
|
||||
int loopNum = nLoops * 2;
|
||||
for(int n = 0; n < loopNum; n ++)
|
||||
@ -108,15 +104,14 @@ void subpix(
|
||||
ap_uint<1> vldFlag = 0;
|
||||
if( InData.LazerWinY <= lineIndx)
|
||||
{
|
||||
if(readNum <= WinNum)
|
||||
if(1 == readFlag)
|
||||
{
|
||||
currData = InData;
|
||||
vldFlag = 1;
|
||||
if(readNum < WinNum)
|
||||
{
|
||||
if(currData.Sync != 0b11)
|
||||
InData = InConvolvePnt.read();
|
||||
}
|
||||
readNum ++;
|
||||
else
|
||||
readFlag = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,11 +134,8 @@ void subpix(
|
||||
a_pnt.value = currData.value;
|
||||
a_pnt.x = (float)currData.LazerWinX + 8.0f + fx + 0.5; //adjust point to pixel center
|
||||
a_pnt.rsv = 0;
|
||||
a_pnt.Sync = currData.Sync;
|
||||
}
|
||||
if(n == 0)
|
||||
a_pnt.Sync = 0b01;
|
||||
else
|
||||
a_pnt.Sync = 0b00;
|
||||
OutSubpixPnt.write(a_pnt);
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,49 @@
|
||||
#include "subPix.h"
|
||||
#include "../../globals/tbGlobals.h"
|
||||
|
||||
Luma_frameInfo readParaFile(const char* file)
|
||||
{
|
||||
std::ifstream inputFile(file);
|
||||
Luma_frameInfo frameInfo;
|
||||
std::string strLineTxt;
|
||||
|
||||
int data;
|
||||
getline(inputFile, strLineTxt); //XL
|
||||
sscanf(strLineTxt.c_str(), "XL:%d", &data);
|
||||
frameInfo.L = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //XR
|
||||
|
||||
getline(inputFile, strLineTxt); //TL
|
||||
sscanf(strLineTxt.c_str(), "TL:%d", &data);
|
||||
frameInfo.T = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //TR
|
||||
|
||||
getline(inputFile, strLineTxt); //W
|
||||
sscanf(strLineTxt.c_str(), "W:%d", &data);
|
||||
frameInfo.W = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //H
|
||||
sscanf(strLineTxt.c_str(), "H:%d", &data);
|
||||
frameInfo.H = (uint16_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //FrmNO
|
||||
sscanf(strLineTxt.c_str(), "FrmNO:%x", &data);
|
||||
frameInfo.FrmNo = (uint32_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //TimStp
|
||||
sscanf(strLineTxt.c_str(), "TimStp:%x", &data);
|
||||
frameInfo.TimeStamp = (uint32_t)data;
|
||||
|
||||
getline(inputFile, strLineTxt); //EncInfo
|
||||
sscanf(strLineTxt.c_str(), "EncInfo:%x", &data);
|
||||
frameInfo.encInfo = (uint32_t)data;
|
||||
|
||||
inputFile.close();
|
||||
return frameInfo;
|
||||
}
|
||||
|
||||
std::vector<Luma_convolveData> readConvolveDataFile(
|
||||
const char* file){
|
||||
std::ifstream inputFile(file);
|
||||
@ -59,32 +102,26 @@ std::vector<Luma_convolveData> readConvolveDataFile(
|
||||
void genTestSream(
|
||||
std::vector<Luma_convolveData>& convolveData,
|
||||
hls::stream<RgnPixConvolve>& convolveStream,
|
||||
const uint32_t FrmNo,
|
||||
const uint32_t timeStamp,
|
||||
const uint32_t encInfo,
|
||||
const uint16_t frameROI_w,
|
||||
const uint16_t frameROI_h,
|
||||
const uint16_t frameROI_x,
|
||||
const uint16_t frameROI_y)
|
||||
const Luma_frameInfo framwInfo)
|
||||
{
|
||||
RgnPixConvolve VSync = {0,0,0,0,0,0,0, 0, 0};
|
||||
ap_uint<32> data_32;
|
||||
//1st:FrmNo
|
||||
data_32 = FrmNo;
|
||||
data_32 = framwInfo.FrmNo;
|
||||
VSync.Sync = 0b10;
|
||||
VSync.LazerWinX(11,0) = data_32.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data_32.range(23,12);
|
||||
VSync.LazerWinRid(7,0) = data_32.range(31,24);
|
||||
convolveStream.write(VSync);
|
||||
//2nd:FrmNo
|
||||
data_32 = timeStamp;
|
||||
data_32 = framwInfo.TimeStamp;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data_32.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data_32.range(23,12);
|
||||
VSync.LazerWinRid(7,0) = data_32.range(31,24);
|
||||
convolveStream.write(VSync);
|
||||
//3rd:encInfo
|
||||
data_32 = encInfo;
|
||||
data_32 = framwInfo.encInfo;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data_32.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data_32.range(23,12);
|
||||
@ -92,28 +129,28 @@ void genTestSream(
|
||||
convolveStream.write(VSync);
|
||||
//4th:frmW(12bit), frmH(12bit)
|
||||
ap_uint<16> data16_1, data16_2;
|
||||
data16_1 = frameROI_w;
|
||||
data16_2 = frameROI_h;
|
||||
data16_1 = framwInfo.W;
|
||||
data16_2 = framwInfo.H;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data16_1.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data16_2.range(11,0);
|
||||
convolveStream.write(VSync);
|
||||
//5th: frmX, WinNum
|
||||
int winNum = (int)convolveData.size();
|
||||
data16_1 = frameROI_x;
|
||||
int winNum = (int)convolveData.size()+12;
|
||||
data16_1 = framwInfo.L;
|
||||
data16_2 = (uint16_t)winNum;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data16_1.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data16_2.range(11,0);
|
||||
convolveStream.write(VSync);
|
||||
//6th: frmY
|
||||
data16_1 = frameROI_y;
|
||||
data16_1 = framwInfo.T;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data16_1.range(11,0);
|
||||
VSync.LazerWinY(11,0) = 0;
|
||||
convolveStream.write(VSync);
|
||||
//output data
|
||||
for(int i = 0; i < winNum; i ++)
|
||||
for(int i = 0, i_max=(int)convolveData.size(); i < i_max; i ++)
|
||||
{
|
||||
Luma_convolveData* a_line = &convolveData[i];
|
||||
RgnPixConvolve conData;
|
||||
@ -125,6 +162,8 @@ void genTestSream(
|
||||
conData.value = (ap_uint<8>)a_line->pkValue;
|
||||
if(i == 0)
|
||||
conData.Sync = 0b01;
|
||||
else if(i == (i_max-1))
|
||||
conData.Sync = 0b11;
|
||||
else
|
||||
conData.Sync = 0b00;
|
||||
conData.nD1 = a_line->nD1;
|
||||
@ -182,6 +221,7 @@ void convertSubpixStreamToArray(
|
||||
a_pnt.Rid = (uint16_t)data_in.rid;
|
||||
a_pnt.Flag = (uint8_t)data_in.flag;
|
||||
a_pnt.pkValue = (uint8_t)data_in.value;
|
||||
a_pnt.Sync = (uint8_t)data_in.Sync;
|
||||
arrayData.push_back(a_pnt);
|
||||
}
|
||||
return;
|
||||
@ -197,70 +237,100 @@ void writeSubpixData(
|
||||
{
|
||||
char data[250];
|
||||
#if defined(__linux__)
|
||||
sprintf(data, "%.2f %04d %04d %01x %02d",
|
||||
outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue);
|
||||
sprintf(data, "%.2f %04d %04d %01x %02d %01x",
|
||||
outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue, outData[i].Sync);
|
||||
#else
|
||||
sprintf_s(data, "%.2f %04d %04d %01x %02d",
|
||||
outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue);
|
||||
sprintf_s(data, "%.2f %04d %04d %01x %02d %01x",
|
||||
outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue, outData[i].Sync);
|
||||
#endif
|
||||
sw << data << std::endl;
|
||||
}
|
||||
sw.close();
|
||||
}
|
||||
|
||||
#define TST_GROUP 1
|
||||
#define TST_GROUP 3
|
||||
|
||||
int main()
|
||||
{
|
||||
#if defined(__linux__)
|
||||
const char* SrcDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/"
|
||||
};
|
||||
const char* InDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/Convolve/testData.txt"
|
||||
"/home/zengHQ/CamTestData/testSample/Convolve/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/Convolve/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/Convolve/",
|
||||
};
|
||||
const char* OutDataPath[TST_GROUP] = {
|
||||
"/home/zengHQ/CamTestData/testSample/Subpix/testData.txt"
|
||||
"/home/zengHQ/CamTestData/testSample/Subpix/",
|
||||
"/home/zengHQ/CamTestData/Grp_0/Subpix/",
|
||||
"/home/zengHQ/CamTestData/Grp_1/Subpix/",
|
||||
};
|
||||
#else
|
||||
const char* SrcDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"E:/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/",
|
||||
"E:/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/"
|
||||
};
|
||||
const char* InDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/Convolve/testData.txt"
|
||||
"E:/CamTestData/testSample/Convolve/",
|
||||
"E:/CamTestData/Grp_0/Convolve/",
|
||||
"E:/CamTestData/Grp_1/Convolve/",
|
||||
};
|
||||
const char* OutDataPath[TST_GROUP] = {
|
||||
"E:/CamTestData/testSample/Subpix/testData.txt"
|
||||
"E:/CamTestData/testSample/Subpix/",
|
||||
"E:/CamTestData/Grp_0/Subpix/",
|
||||
"E:/CamTestData/Grp_1/Subpix/",
|
||||
};
|
||||
#endif
|
||||
int testFileSize[TST_GROUP] = {1, 4, 4};
|
||||
|
||||
for(int n = 0; n < TST_GROUP; n ++)
|
||||
for(int n = 1; n < TST_GROUP; n ++)
|
||||
{
|
||||
|
||||
int winSize = 0;
|
||||
std::vector<Luma_convolveData> testData = readConvolveDataFile(InDataPath[n]);
|
||||
//gen test stream
|
||||
hls::stream<RgnPixConvolve> inStream;
|
||||
uint32_t FrmNo = 0x1;
|
||||
uint32_t timeStamp = 0x2;
|
||||
uint32_t encInfo = 0x3;
|
||||
uint16_t frameROI_w = 0x100;
|
||||
uint16_t frameROI_h = 2048;
|
||||
uint16_t frameROI_x = 0;
|
||||
uint16_t frameROI_y = 0;
|
||||
genTestSream(testData, inStream, FrmNo, timeStamp, encInfo, frameROI_w, frameROI_h, frameROI_x, frameROI_y);
|
||||
int fileSize = testFileSize[n];
|
||||
for(int fi = 0; fi < fileSize; fi++)
|
||||
{
|
||||
char fileName[200];
|
||||
char paraFileName[200];
|
||||
char outFileName[200];
|
||||
#if defined(__linux__)
|
||||
sprintf(fileName, "%s%d_L_convolve.txt", InDataPath[n], fi);
|
||||
sprintf(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi);
|
||||
sprintf(outFileName, "%s%d_L_subpix.txt", OutDataPath[n], fi);
|
||||
#else
|
||||
sprintf_s(fileName, "%s%d_L_convolve.txt", InDataPath[n], fi);
|
||||
sprintf_s(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi);
|
||||
sprintf_s(outFileName, "%s%d_L_subpix.txt", OutDataPath[n], fi);
|
||||
#endif
|
||||
Luma_frameInfo framwInfo = readParaFile(paraFileName);
|
||||
std::vector<Luma_convolveData> testData = readConvolveDataFile(fileName);
|
||||
//gen test stream
|
||||
hls::stream<RgnPixConvolve> inStream;
|
||||
genTestSream(testData, inStream, framwInfo);
|
||||
|
||||
hls::stream<RgnSubPix> outStream;
|
||||
subpix(inStream,outStream);
|
||||
hls::stream<RgnSubPix> outStream;
|
||||
subpix(inStream,outStream);
|
||||
|
||||
std::vector<Luma_rgnSubpix> outData;
|
||||
uint32_t outFrmNo, outTimeStamp, outEncInfo;
|
||||
uint16_t outROI_w,outROI_h, outROI_x,outROI_y;
|
||||
convertSubpixStreamToArray(
|
||||
outStream,
|
||||
outData,
|
||||
&outFrmNo,
|
||||
&outTimeStamp,
|
||||
&outEncInfo,
|
||||
&outROI_w,
|
||||
&outROI_h,
|
||||
&outROI_x,
|
||||
&outROI_y);
|
||||
std::vector<Luma_rgnSubpix> outData;
|
||||
uint32_t outFrmNo, outTimeStamp, outEncInfo;
|
||||
uint16_t outROI_w,outROI_h, outROI_x,outROI_y;
|
||||
convertSubpixStreamToArray(
|
||||
outStream,
|
||||
outData,
|
||||
&outFrmNo,
|
||||
&outTimeStamp,
|
||||
&outEncInfo,
|
||||
&outROI_w,
|
||||
&outROI_h,
|
||||
&outROI_x,
|
||||
&outROI_y);
|
||||
|
||||
writeSubpixData(OutDataPath[n], outData);
|
||||
writeSubpixData(outFileName, outData);
|
||||
}
|
||||
}
|
||||
printf("done!\n");
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user