FFNvDecoderManager.h
5.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include "FFNvDecoder.h"
#include<iostream>
#include<vector>
#include<map>
#include <mutex>
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*);
/**************************************************
* 接口:startAllDecode
* 功能:启动全部解码
* 参数:void
* 返回:void
* 备注:
**************************************************/
void startAllDecode();
/**************************************************
* 接口:startDecodeByName
* 功能:启动名称对应的解码器
* 参数:string name 解码器名称
* 返回:成功返回true,失败返回false
* 备注:
**************************************************/
bool startDecodeByName(const string name);
/**************************************************
* 接口:closeDecoderByName
* 功能:关闭解码器名称对应的解码
* 参数:const 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();
/**************************************************
* 接口:setDecKeyframe
* 功能:设置是否只解码关键帧。默认全解
* 参数:const string name 解码器名称
* bool bKeyframe 是否只解码关键帧。true,只解码关键帧;false,普通的全解码
* 返回:void
* 备注:
**************************************************/
bool setDecKeyframe(const string name, bool bKeyframe);
private:
FFNvDecoderManager(){}
void closeAllFinishedDecoder();
private:
map<string, FFNvDecoder*> decoderMap;
mutex m_mutex_erase;
};