#include "FFNvDecoder.h" #include #include #include #include using namespace std; struct MgrDecConfig { FFDecConfig cfg; // 解码器配置 string name{""}; // 解码器名称 }; /** * 解码器管理类,单例类 **/ class FFNvDecoderManager{ public: /************************************************** * 接口:getInstance * 功能:获取解码器管理者实例 * 参数:无 * 返回:成功返回 解码器管理者实例, 失败返回 nullptr * 备注:调用其他接口前,需要先调用该接口获取管理者实例 **************************************************/ static FFNvDecoderManager* getInstance(){ static FFNvDecoderManager* singleton = nullptr; if (singleton == nullptr){ singleton = new FFNvDecoderManager(); } return singleton; } ~FFNvDecoderManager() { closeAllDecoder(); } /************************************************** * 接口:createDecoder * 功能:根据配置信息创建解码器 * 参数:MgrDecConfig& config 解码器配置信息 * 返回:成功返回解码器, 失败返回 nullptr * 备注: **************************************************/ FFNvDecoder* createDecoder(MgrDecConfig& config); /************************************************** * 接口:setUserPtr * 功能:设置解码数据回调接口的用户自定义参数 * 参数:string name 解码器名称 * const void * userPtr 用户自定义的要传到解码数据回调接口的数据 * 返回:设置成功返回true,失败返回false * 备注: **************************************************/ bool setUserPtr(const string name, const void * userPtr); /************************************************** * 接口:getDecoderByName * 功能:根据解码器名称返回解码器对象指针 * 参数:const string name 解码器名称 * 返回:成功返回对应的解码器对象的指针,失败返回nullptr * 备注: **************************************************/ FFNvDecoder* getDecoderByName(const string name); /************************************************** * 接口:startDecode * 功能:启动解码 * 参数:FFNvDecoder* 解码器指针 * 返回:void * 备注: **************************************************/ void startDecode(FFNvDecoder*); /************************************************** * 接口:startDecode * 功能:启动全部解码 * 参数:void * 返回:void * 备注: **************************************************/ void startAllDecode(); /************************************************** * 接口:startDecodeByName * 功能:启动解码器名称对应的解码 * 参数:string name 解码器名称 * 返回:成功返回true,失败返回false * 备注: **************************************************/ bool startDecodeByName(const string name); /************************************************** * 接口:closeDecoderByName * 功能:关闭解码器名称对应的解码 * 参数:string name 解码器名称 * 返回:成功返回true,失败返回false * 备注: **************************************************/ bool closeDecoderByName(const string name); /************************************************** * 接口:closeAllDecoder * 功能:关闭全部解码器 * 参数:void * 返回:void * 备注: **************************************************/ void closeAllDecoder(); /************************************************** * 接口:pauseDecoder * 功能:暂停指定名称的解码器 * 参数:const string name 解码器名称 * 返回:成功返回true,失败返回false * 备注: **************************************************/ bool pauseDecoder(const string name); /************************************************** * 接口:pauseDecoder * 功能:恢复指定名称的解码器 * 参数:const string name 解码器名称 * 返回:成功返回true,失败返回false * 备注: **************************************************/ bool resumeDecoder(const string name); /************************************************** * 接口:isSurport * 功能:是否支持指定配置的解码 * 参数:FFDecConfig& cfg 解码器配置 * 返回:支持返回true,不支持返回false * 备注: **************************************************/ bool isSurport(FFDecConfig& cfg); /************************************************** * 接口:isRunning * 功能:根据解码器名称判断解码器是否正在运行 * 参数:const string name 解码器名称 * 返回:正在运行返回true,否则返回false * 备注: **************************************************/ bool isRunning(const string name); /************************************************** * 接口:count * 功能:获取正在运行的解码器数量 * 参数:void * 返回:正在运行的解码器数量 * 备注: **************************************************/ int count(); private: FFNvDecoderManager(){} void closeAllFinishedDecoder(); private: map decoderMap; mutex m_mutex_erase; };