#include "FFNvDecoderManager.h" #include using namespace std; FFNvDecoder* FFNvDecoderManager::createDecoder(MgrDecConfig& config){ int num = decoderMap.count(config.name); if (num > 0) { cout << "已存在name所标记的解码器" << endl; return nullptr; } FFNvDecoder* dec = new FFNvDecoder(); if (dec == nullptr) { return nullptr; } bool bRet= dec->init(config.cfg); if (bRet) { dec->setName(config.name) ; dec->post_decoded_cbk = config.cfg.post_decoded_cbk; decoderMap[config.name] = dec; return dec; } // 创建失败,关闭解码器 dec->close(); delete dec; return nullptr; } void FFNvDecoderManager::setUserPtr(string name, const void * userPtr) { if (name.empty()) { cout << "name 为空!"<< endl; return ; } auto dec = decoderMap.find(name); if (dec != decoderMap.end()) { dec->second->m_userPtr = userPtr; return; } cout << "没有找到name为" << name << "的解码器!" << endl; return ; } FFNvDecoder* FFNvDecoderManager::getDecoderByName(const string name) { if (name.empty()) { cout << "name 为空!"<< endl; return nullptr; } auto dec = decoderMap.find(name); if (dec != decoderMap.end()) { return dec->second; } cout << "没有找到name为" << name << "的解码器!" << endl; return nullptr; } void FFNvDecoderManager::startDecode(FFNvDecoder* dec){ if (dec != nullptr && !dec->isRunning()) { dec->start(); } } bool FFNvDecoderManager::startDecodeByName(string name){ if (name.empty()) { cout << "name 为空!"<< endl; return false; } auto dec = decoderMap.find(name); if (dec != decoderMap.end()) { dec->second->start(); return true; } cout << "没有找到name为" << name << "的解码器!" << endl; return false; } void FFNvDecoderManager::startAllDecode(){ for(auto iter = decoderMap.begin(); iter != decoderMap.end(); iter++){ iter->second->start(); } } bool FFNvDecoderManager::closeDecoderByName(string name){ if (name.empty()) { cout << "name 为空!"<< endl; return false; } auto dec = decoderMap.find(name); if (dec != decoderMap.end()) { dec->second->close(); delete dec->second; decoderMap.erase(dec); return true; } cout << "没有找到name为" << name << "的解码器!" << endl; return false; } void FFNvDecoderManager::closeAllDecoder() { for(auto iter = decoderMap.begin(); iter != decoderMap.end(); iter++){ iter->second->close(); } } int FFNvDecoderManager::count() { return decoderMap.size(); } bool FFNvDecoderManager::pauseDecoder(string name) { if (name.empty()) { cout << "name 为空!"<< endl; return false; } auto dec = decoderMap.find(name); if (dec != decoderMap.end()) { dec->second->pause(); return true; } cout << "没有找到name为" << name << "的解码器!" << endl; return false; } bool FFNvDecoderManager::resumeDecoder(string name) { if (name.empty()) { cout << "name 为空!"<< endl; return false; } auto dec = decoderMap.find(name); if (dec != decoderMap.end()) { dec->second->resume(); return true; } cout << "没有找到name为" << name << "的解码器!" << endl; return false; } bool FFNvDecoderManager::isSurport(FFDecConfig& cfg) { FFNvDecoder dec; bool bRet = dec.init(cfg); dec.close(); return bRet; } bool FFNvDecoderManager::isRunning(string name){ if (name.empty()) { cout << "name 为空!"<< endl; return false; } auto dec = decoderMap.find(name); if (dec != decoderMap.end()) { return dec->second->isRunning(); } cout << "没有找到name为" << name << "的解码器!" << endl; return false; }