#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 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(pSaveImgData->frameData.pData.get())); //RGB if (cv::imwrite(strImgFilePath, image, this->vecCompressionParams_)) { std::shared_ptr pToStep1Data = std::make_shared(); 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(pToStep1Data), true); } else { LogError << "图片存储失败:" << strImgFilePath; } } } APP_ERROR SaveMoveImageEngine::Process() { // std::thread saveThread_1([this](){ // while (!this->isStop_) // { // std::shared_ptr pData = nullptr; // inputQueMap_[strPort0_]->pop(pData, true); // if (nullptr == pData) // { // usleep(1000); //1ms // continue; // } // // std::shared_ptr pSaveImgData = std::static_pointer_cast(pData); // if (pSaveImgData->bIsEnd && pSaveImgData->frameData.pData == nullptr) // { // std::shared_ptr pToStep1Data = std::make_shared(); // 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(pToStep1Data), true); // } // this->saveImage(pSaveImgData); // } // }); while (!this->isStop_) { std::shared_ptr pData = nullptr; inputQueMap_[strPort0_]->pop(pData, true); if (nullptr == pData) { usleep(1000); //1ms continue; } std::shared_ptr pSaveImgData = std::static_pointer_cast(pData); if (pSaveImgData->bIsEnd && pSaveImgData->frameData.pData == nullptr) { std::shared_ptr pToStep1Data = std::make_shared(); 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(pToStep1Data), true); } this->saveImage(pSaveImgData); } return APP_ERR_OK; }