2024-06-19 05:57:23 +00:00
|
|
|
|
#include "DataDealEngine.h"
using namespace ai_matrix;
extern std::atomic_uint64_t g_i64ReRunTimeStamp;
extern std::atomic_uint32_t g_iReRunOrigFrameId;
extern std::atomic_uint32_t g_iReRunFrameId;
DataDealEngine::DataDealEngine() {}
DataDealEngine::~DataDealEngine() {}
APP_ERROR DataDealEngine::Init()
{
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
strPort1_ = engineName_ + "_" + std::to_string(engineId_) + "_1";
strPort2_ = engineName_ + "_" + std::to_string(engineId_) + "_2";
strResultPath_ = MyYaml::GetIns()->GetPathValue("gc_result_path");
iPushDirection_ = MyYaml::GetIns()->GetIntValue("gc_push_direction");
dataSourceConfig_ = MyYaml::GetIns()->GetDataSourceConfigById(engineId_); //获取摄像机参数
iIntervalTime_ = (dataSourceConfig_.iSkipInterval - 1) * 40 * 1000;
mapUseDataSouceCfg_ = MyYaml::GetIns()->GetUseDataSourceConfig();
std::string delimiter(",");
for (auto iter = mapUseDataSouceCfg_.begin(); iter!=mapUseDataSouceCfg_.end(); iter++)
{
int iSourceId = iter->first;
std::vector<std::string> vecSplit = MyUtils::getins()->split(iter->second.strTarget, delimiter);
std::vector<std::string> vecPushPorts;
for (auto iter = vecSplit.begin(); iter != vecSplit.end(); iter++)
{
if (*iter == "NUM")
{
vecPushPorts.push_back(strPort0_);
}
else if (*iter == "CHKDATE")
{
vecPushPorts.push_back(strPort1_);
}
else if(*iter == "CONTAINER" || *iter == "CONTAINER_T")
{
vecPushPorts.push_back(strPort2_);
}
}
mapSourcePushPort_[iSourceId] = vecPushPorts;
}
InitParam();
LogInfo << "engineId_:" << engineId_ << " DataDealEngine Init ok";
return APP_ERR_OK;
}
APP_ERROR DataDealEngine::DeInit()
{
LogInfo << "engineId_:" << engineId_ << " DataDealEngine DeInit ok";
return APP_ERR_OK;
}
/**
* 参数初始化(列车结束时需调用)
* inParam : N/A
* outParam: N/A
* return : N/A
*/
void DataDealEngine::InitParam()
{
iOrigDataNO_ = 1;
strDataDir_ = "";
moveData_.i64TimeStamp = 0;
moveData_.bHasTrain = false;
moveData_.bIsEnd = false;
iDataNO_ = 1;
strTrainDate_ = "";
strTrainName_ = "";
iDirection_ = DIRECTION_UNKNOWN;
bNotPushFlag_ = false;
}
/**
* 图片数据解码
* inParam : RawData &rawData :图片数据
* outParam: std::shared_ptr<DecodedData> pDecodedData :解码数据
* return : true(编码成功)/false(编码失败)
*/
bool DataDealEngine::GetJpegdOut(std::shared_ptr<DecodedData> pDecodedData, RawData &rawData)
{
return true;
}
/**
* 读取图片和文本
* inParam : N/A
* outParam: N/A
* return : N/A
*/
bool DataDealEngine::ReadFileInfo(Json::Value &jvFrameInfo, RawData &rawData, std::string &strFileName, std::string &strImgName)
{
//图片或文件不存在时,休眠10ms直接return,重新获取。
if (access(strFileName.c_str(), F_OK) != 0 || access(strImgName.c_str(), F_OK) != 0)
{
LogWarn << "txt:" << strFileName << " or image:" << strImgName << " no exist";
return false;
}
if (!MyUtils::getins()->ReadJsonInfo(jvFrameInfo, strFileName))
{
LogError << "Failed to read txt:" << strFileName;
return false;
}
//读取图片内容
// int iRet = ReadFile(strImgName, rawData);
// if (iRet != APP_ERR_OK)
// {
// LogError << "Failed to read image:" << strImgName;
// return false;
// }
return true;
}
/**
* push数据到队列,队列满时则休眠一段时间再push。
* inParam : const std::string strPort push的端口
: const std::shared_ptr<ProcessData> &pProcessData push的数据
* outParam: N/A
* return : N/A
*/
void DataDealEngine::PushData(const std::string &strPort, const std::shared_ptr<ProcessData> &pProcessData)
{
while (true)
{
int iRet = outputQueMap_[strPort]->push(std:
|