153 lines
4.4 KiB
C++
153 lines
4.4 KiB
C++
#include "ControlEngine.h"
|
||
|
||
|
||
using namespace ai_matrix;
|
||
|
||
ControlEngine::ControlEngine() {}
|
||
|
||
ControlEngine::~ControlEngine() {}
|
||
|
||
APP_ERROR ControlEngine::Init()
|
||
{
|
||
bUseEngine_ = true;
|
||
dataSourceConfig_ = MyYaml::GetIns()->GetDataSourceConfigById(engineId_); //获取摄像机参数
|
||
if (!dataSourceConfig_.bUse)
|
||
{
|
||
bUseEngine_ = false;
|
||
LogWarn << "engineId_:" << engineId_ << " not use engine";
|
||
return APP_ERR_OK;
|
||
}
|
||
bHwDecode_ = MyYaml::GetIns()->GetBoolValue("gc_hardware_decode");//硬解码
|
||
|
||
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
|
||
strPort1_ = engineName_ + "_" + std::to_string(engineId_) + "_1";
|
||
strPort2_ = engineName_ + "_" + std::to_string(engineId_) + "_2";
|
||
bCommandFlag_ = (MyYaml::GetIns()->GetStringValue("gc_run_mode") == "command");
|
||
bCollectDataFlag_ = MyYaml::GetIns()->GetBoolValue("gc_collect_data_flag");
|
||
strCollectDataSavePath_ = MyYaml::GetIns()->GetPathValue("gc_collect_data_savepath");
|
||
bPushActualFlag_ = MyYaml::GetIns()->GetBoolValue("gc_push_actual_flag");
|
||
|
||
LogInfo << "ControlEngine Init ok";
|
||
return APP_ERR_OK;
|
||
}
|
||
|
||
APP_ERROR ControlEngine::DeInit()
|
||
{
|
||
if (!bUseEngine_)
|
||
{
|
||
LogWarn << "engineId_:" << engineId_ << " not use engine";
|
||
return APP_ERR_OK;
|
||
}
|
||
LogInfo << "ControlEngine DeInit ok";
|
||
return APP_ERR_OK;
|
||
}
|
||
|
||
/**
|
||
* 获取检测状态
|
||
* inParam : N/A
|
||
* outParam: N/A
|
||
* return : N/A
|
||
*/
|
||
void ControlEngine::GetDetectState()
|
||
{
|
||
// 1.一直识别模式
|
||
if (!bCommandFlag_)
|
||
{
|
||
iStepInter_ = 1;
|
||
return;
|
||
}
|
||
|
||
//2.命令触发识别模式
|
||
int iRet = APP_ERR_OK;
|
||
std::shared_ptr<void> pVoidData1 = nullptr;
|
||
iRet = inputQueMap_[strPort1_]->pop(pVoidData1);
|
||
if (nullptr != pVoidData1)
|
||
{
|
||
std::shared_ptr<std::string> pstrCommand = std::static_pointer_cast<std::string>(pVoidData1);
|
||
LogDebug << "recv Command:" << *pstrCommand;
|
||
|
||
if ((*pstrCommand) == "start")
|
||
{
|
||
iStepInter_ = 1;
|
||
}
|
||
else if ((*pstrCommand) == "end")
|
||
{
|
||
if (iStepInter_ == 1)
|
||
{
|
||
iStepInter_ = 2;
|
||
}
|
||
else
|
||
{
|
||
LogError << "command:end is worng";
|
||
}
|
||
}
|
||
}
|
||
|
||
//未接受到新命令,按上次命令结果返回
|
||
}
|
||
|
||
APP_ERROR ControlEngine::Process()
|
||
{
|
||
if (!bUseEngine_)
|
||
{
|
||
LogWarn << "engineId_:" << engineId_ << " not use engine";
|
||
return APP_ERR_OK;
|
||
}
|
||
|
||
int iRet = APP_ERR_OK;
|
||
while (!isStop_)
|
||
{
|
||
//获取识别状态
|
||
GetDetectState();
|
||
|
||
//pop端口0,解码后数据
|
||
std::shared_ptr<void> pVoidData0 = nullptr;
|
||
inputQueMap_[strPort0_]->pop(pVoidData0);
|
||
if (nullptr == pVoidData0)
|
||
{
|
||
usleep(1000); //1ms
|
||
continue;
|
||
}
|
||
|
||
std::shared_ptr<ProcessData> pProcessData = std::static_pointer_cast<ProcessData>(pVoidData0);
|
||
|
||
//1. 识别处理
|
||
if (iStepInter_ != 0)
|
||
{
|
||
pProcessData->iStatus = TRAINSTATUS_RUN;
|
||
pProcessData->bIsEnd = ((iStepInter_ == 2) ? true : false);
|
||
|
||
iRet = outputQueMap_[strPort0_]->push(std::static_pointer_cast<void>(pProcessData));
|
||
if (iStepInter_ == 2)
|
||
{
|
||
iStepInter_ = 0;
|
||
}
|
||
}
|
||
|
||
//2.图片采集
|
||
if (bCollectDataFlag_)
|
||
{
|
||
//组织数据 push端口0 存图
|
||
std::shared_ptr<SaveImgData> pSaveImgData = std::make_shared<SaveImgData>();
|
||
pSaveImgData->iFrameId = pProcessData->iFrameId; //帧号
|
||
char szCameraNo[4] = {0};
|
||
sprintf(szCameraNo, "%03d", pProcessData->iDataSource + 1);
|
||
pSaveImgData->strImgPath = strCollectDataSavePath_ + szCameraNo;
|
||
pSaveImgData->strImgName = std::to_string(pSaveImgData->iFrameId);
|
||
pSaveImgData->strImgName += "_";
|
||
pSaveImgData->strImgName += std::to_string(pProcessData->i64TimeStamp);
|
||
pSaveImgData->strImgName += ".jpg";
|
||
iRet = outputQueMap_[strPort1_]->push(std::static_pointer_cast<void>(pSaveImgData));
|
||
continue;
|
||
}
|
||
|
||
//3.直播推流
|
||
if(bPushActualFlag_)
|
||
{
|
||
//发送推流Egnine
|
||
//iRet = outputQueMap_[strPort2_]->push(std::static_pointer_cast<void>(pProcessData));
|
||
}
|
||
}
|
||
return APP_ERR_OK;
|
||
}
|