#include "task_manager.h" #include "mvpt_process_assist.h" #include #include #include #include "../common/logger.hpp" task_manager::task_manager(/* args */) { } task_manager::~task_manager() { Release(); } bool task_manager::AddTask(const task_param& task_param, FFDecConfig& cfg) { TaskInfo info; info.ipc_url = task_param.ipc_url; info.task_id = task_param.task_id; info.result_folder = task_param.result_folder; info.result_folder_little = task_param.result_folder_little; DvppDecoder* dec = create_decoder(cfg); if(dec == nullptr) { return false; } info.dec = dec; task_info_map[info.task_id] = info; return true; } DvppDecoder* task_manager::create_decoder(FFDecConfig& cfg) { DvppDecoder* dec = new DvppDecoder(); if(dec == nullptr) { LOG_ERROR("解码器创建失败"); return nullptr; } bool bRet= dec->init(cfg); if (bRet) { LOG_INFO("[{}][{}]- 解码器初始化成功",cfg.dec_name, cfg.uri); return dec; } LOG_ERROR("[{}][{}]- 解码器初始化失败!",cfg.dec_name, cfg.uri); return nullptr; } TaskInfo* task_manager::GetTaskInfo(string task_id) { auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return nullptr; } return &(it->second); } bool task_manager::StartTask(const string& task_id) { auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; info.dec->start(); return true; } bool task_manager::PauseTask(const string& task_id) { auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; info.dec->pause(); return true; } bool task_manager::RestartTask(const string& task_id){ auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; info.dec->resume(); return true; } bool task_manager::FinishTask(const string& task_id){ LOG_INFO("task finish:{}",task_id); auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; info.dec->close(); delete info.dec; info.dec = nullptr; task_info_map.erase(task_id); LOG_INFO("task record erase:{}",task_id); return true; } bool task_manager::CloseDecoder(const string& task_id){ LOG_INFO("CloseDecoder:{}",task_id); auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; info.dec->close(); return true; } bool task_manager::CloseAllDecoder() { for (auto it = task_info_map.begin(); it != task_info_map.end(); it++) { TaskInfo& info = it->second; info.dec->close(); } return true; } bool task_manager::GetResolution(const string& task_id, int &width, int &height ) { auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; return info.dec->getResolution(width, height); } bool task_manager::SetDecKeyframe(const string& task_id, bool bKeyframe) { auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; info.dec->setDecKeyframe(bKeyframe); return true; } bool task_manager::IsPausing(const string& task_id){ auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; return info.dec->isPausing(); } bool task_manager::IsRunning(const string& task_id){ auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; return info.dec->isRunning(); } bool task_manager::IsFinished(const string& task_id){ auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return false; } TaskInfo& info = task_info_map[task_id]; return info.dec->isFinished(); } int task_manager::GetRunningTaskCount() { int count = 0; for (auto it = task_info_map.begin(); it != task_info_map.end(); it++) { TaskInfo& info = it->second; if (!info.dec->isFinished()) { count++; } } return count; } void task_manager::Release() { for (auto it = task_info_map.begin(); it != task_info_map.end(); it++) { TaskInfo& info = it->second; info.dec->close(); delete info.dec; info.dec = nullptr; } task_info_map.clear(); } DeviceMemory* task_manager::SnapShot(const string& task_id) { auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { return nullptr; } TaskInfo& info = task_info_map[task_id]; return info.dec->snapshot(); // return make_shared(0, 0, 0, 0, 0, "m_dec_name", "1", false, 0, nullptr); // todo }