120 lines
4.5 KiB
C++
120 lines
4.5 KiB
C++
#include "SaveMoveImageEngine.h"
|
|
|
|
|
|
using namespace ai_matrix;
|
|
|
|
SaveMoveImageEngine::SaveMoveImageEngine() {}
|
|
|
|
SaveMoveImageEngine::~SaveMoveImageEngine() {}
|
|
|
|
APP_ERROR SaveMoveImageEngine::Init()
|
|
{
|
|
|
|
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
|
|
strPortOut_ = engineName_ + "_0_0";
|
|
|
|
this->baseConfig_ = Config::getins()->getBaseConfig();
|
|
vecCompressionParams_.push_back(cv::IMWRITE_JPEG_QUALITY); //选择jpeg
|
|
vecCompressionParams_.push_back(this->iPicQuality_); //图片质量
|
|
|
|
LogInfo << "SaveMoveImageEngine Init ok";
|
|
return APP_ERR_OK;
|
|
}
|
|
|
|
APP_ERROR SaveMoveImageEngine::DeInit()
|
|
{
|
|
LogInfo << "SaveMoveImageEngine DeInit ok";
|
|
return APP_ERR_OK;
|
|
}
|
|
|
|
void SaveMoveImageEngine::saveImage(std::shared_ptr<SaveImgData> pSaveImgData)
|
|
{
|
|
//图片绝对路径
|
|
if (pSaveImgData->strFilePath.back() != '/')
|
|
{
|
|
pSaveImgData->strFilePath += "/";
|
|
}
|
|
std::string strImgFilePath = pSaveImgData->strFilePath + pSaveImgData->strFileName;
|
|
|
|
if (!FileUtil::getins()->createDirPath(pSaveImgData->strFilePath))
|
|
{
|
|
LogError << " 创建图片存储目录失败:" << strImgFilePath;
|
|
return;
|
|
}
|
|
|
|
if (pSaveImgData->frameData.pData != nullptr && pSaveImgData->frameData.iSize != 0)
|
|
{
|
|
cv::Mat image(pSaveImgData->frameData.iHeight, pSaveImgData->frameData.iWidth, CV_8UC3, static_cast<uint8_t *>(pSaveImgData->frameData.pData.get())); //RGB
|
|
|
|
if (cv::imwrite(strImgFilePath, image, this->vecCompressionParams_))
|
|
{
|
|
std::shared_ptr<VToStep1Data> pToStep1Data = std::make_shared<VToStep1Data>();
|
|
pToStep1Data->iDataSource = pSaveImgData->iDataSource;
|
|
pToStep1Data->bIsEnd = pSaveImgData->bIsEnd;
|
|
pToStep1Data->strImagePath = pSaveImgData->strFilePath;
|
|
pToStep1Data->strImageName = pSaveImgData->strFileName;
|
|
|
|
// LogInfo << "数据源:" << pToStep1Data->iDataSource << " -- 帧:" << pSaveImgData->strFileName;
|
|
outputQueMap_[engineName_ + "_" + std::to_string(engineId_) + "_" + std::to_string(pSaveImgData->iDataSource)]->push(std::static_pointer_cast<void>(pToStep1Data), true);
|
|
}
|
|
else
|
|
{
|
|
LogError << "图片存储失败:" << strImgFilePath;
|
|
}
|
|
}
|
|
}
|
|
|
|
APP_ERROR SaveMoveImageEngine::Process()
|
|
{
|
|
// std::thread saveThread_1([this](){
|
|
// while (!this->isStop_)
|
|
// {
|
|
// std::shared_ptr<void> pData = nullptr;
|
|
// inputQueMap_[strPort0_]->pop(pData, true);
|
|
// if (nullptr == pData)
|
|
// {
|
|
// usleep(1000); //1ms
|
|
// continue;
|
|
// }
|
|
//
|
|
// std::shared_ptr<SaveImgData> pSaveImgData = std::static_pointer_cast<SaveImgData>(pData);
|
|
// if (pSaveImgData->bIsEnd && pSaveImgData->frameData.pData == nullptr)
|
|
// {
|
|
// std::shared_ptr<VToStep1Data> pToStep1Data = std::make_shared<VToStep1Data>();
|
|
// pToStep1Data->iDataSource = pSaveImgData->iDataSource;
|
|
// pToStep1Data->bIsEnd = pSaveImgData->bIsEnd;
|
|
// pToStep1Data->strImagePath = pSaveImgData->strFilePath;
|
|
// pToStep1Data->strImageName = pSaveImgData->strFileName;
|
|
// outputQueMap_[engineName_ + "_" + std::to_string(engineId_) + "_" + std::to_string(pSaveImgData->iDataSource)]->push(std::static_pointer_cast<void>(pToStep1Data), true);
|
|
// }
|
|
// this->saveImage(pSaveImgData);
|
|
// }
|
|
// });
|
|
|
|
while (!this->isStop_)
|
|
{
|
|
std::shared_ptr<void> pData = nullptr;
|
|
inputQueMap_[strPort0_]->pop(pData, true);
|
|
if (nullptr == pData)
|
|
{
|
|
usleep(1000); //1ms
|
|
continue;
|
|
}
|
|
|
|
std::shared_ptr<SaveImgData> pSaveImgData = std::static_pointer_cast<SaveImgData>(pData);
|
|
|
|
if (pSaveImgData->bIsEnd && pSaveImgData->frameData.pData == nullptr)
|
|
{
|
|
std::shared_ptr<VToStep1Data> pToStep1Data = std::make_shared<VToStep1Data>();
|
|
pToStep1Data->iDataSource = pSaveImgData->iDataSource;
|
|
pToStep1Data->bIsEnd = pSaveImgData->bIsEnd;
|
|
pToStep1Data->strImagePath = pSaveImgData->strFilePath;
|
|
pToStep1Data->strImageName = pSaveImgData->strFileName;
|
|
outputQueMap_[engineName_ + "_" + std::to_string(engineId_) + "_" + std::to_string(pSaveImgData->iDataSource)]->push(std::static_pointer_cast<void>(pToStep1Data), true);
|
|
}
|
|
this->saveImage(pSaveImgData);
|
|
}
|
|
|
|
return APP_ERR_OK;
|
|
}
|