3d2ab595
Hu Chunming
支持gb28181
|
1
|
#include "AbstractDecoder.h"
|
aac5773f
hucm
功能基本完成,接口待打磨
|
2
3
4
5
|
#include<iostream>
#include<vector>
#include<map>
|
f40cc409
Hu Chunming
优化显存占用。当前在3080显卡上...
|
6
7
|
#include <mutex>
|
aac5773f
hucm
功能基本完成,接口待打磨
|
8
9
|
using namespace std;
|
7319ea36
Hu Chunming
多显卡设置
|
10
11
|
struct MgrDecConfig
{
|
3d2ab595
Hu Chunming
支持gb28181
|
12
|
DECODER_TYPE dec_type; // 解码器类型
|
0573bd98
Hu Chunming
优化代码;添加注释
|
13
14
|
FFDecConfig cfg; // 解码器配置
string name{""}; // 解码器名称
|
7319ea36
Hu Chunming
多显卡设置
|
15
16
|
};
|
00b0fbdb
Hu Chunming
编译nvdec
|
17
18
|
#define USE_NVDEC
// #define USE_DVPP
|
0573bd98
Hu Chunming
优化代码;添加注释
|
19
20
|
/**
* 解码器管理类,单例类
|
92989af0
ming
更新解码器
|
21
|
* 谨防死锁
|
0573bd98
Hu Chunming
优化代码;添加注释
|
22
|
**/
|
3d2ab595
Hu Chunming
支持gb28181
|
23
|
class FFNvDecoderManager {
|
aac5773f
hucm
功能基本完成,接口待打磨
|
24
|
public:
|
0573bd98
Hu Chunming
优化代码;添加注释
|
25
26
27
28
29
30
31
|
/**************************************************
* 接口:getInstance
* 功能:获取解码器管理者实例
* 参数:无
* 返回:成功返回 解码器管理者实例, 失败返回 nullptr
* 备注:调用其他接口前,需要先调用该接口获取管理者实例
**************************************************/
|
aac5773f
hucm
功能基本完成,接口待打磨
|
32
33
34
35
36
37
38
39
40
41
42
43
44
|
static FFNvDecoderManager* getInstance(){
static FFNvDecoderManager* singleton = nullptr;
if (singleton == nullptr){
singleton = new FFNvDecoderManager();
}
return singleton;
}
~FFNvDecoderManager()
{
closeAllDecoder();
}
|
0573bd98
Hu Chunming
优化代码;添加注释
|
45
46
47
48
49
50
51
|
/**************************************************
* 接口:createDecoder
* 功能:根据配置信息创建解码器
* 参数:MgrDecConfig& config 解码器配置信息
* 返回:成功返回解码器, 失败返回 nullptr
* 备注:
**************************************************/
|
3d2ab595
Hu Chunming
支持gb28181
|
52
|
AbstractDecoder* createDecoder(MgrDecConfig config);
|
aac5773f
hucm
功能基本完成,接口待打磨
|
53
|
|
0573bd98
Hu Chunming
优化代码;添加注释
|
54
|
/**************************************************
|
3d2ab595
Hu Chunming
支持gb28181
|
55
|
* 接口:setPostDecArg
|
0573bd98
Hu Chunming
优化代码;添加注释
|
56
57
58
59
60
61
|
* 功能:设置解码数据回调接口的用户自定义参数
* 参数:string name 解码器名称
* const void * userPtr 用户自定义的要传到解码数据回调接口的数据
* 返回:设置成功返回true,失败返回false
* 备注:
**************************************************/
|
3d2ab595
Hu Chunming
支持gb28181
|
62
63
64
65
66
67
68
69
70
71
72
|
bool setPostDecArg(const string name, const void * userPtr);
/**************************************************
* 接口:setFinishedDecArg
* 功能:设置解码结束回调接口的用户自定义参数
* 参数:string name 解码器名称
* const void * userPtr 用户自定义的要传到解码数据回调接口的数据
* 返回:设置成功返回true,失败返回false
* 备注:
**************************************************/
bool setFinishedDecArg(const string name, const void * userPtr);
|
0573bd98
Hu Chunming
优化代码;添加注释
|
73
74
75
76
77
78
79
80
|
/**************************************************
* 接口:getDecoderByName
* 功能:根据解码器名称返回解码器对象指针
* 参数:const string name 解码器名称
* 返回:成功返回对应的解码器对象的指针,失败返回nullptr
* 备注:
**************************************************/
|
3d2ab595
Hu Chunming
支持gb28181
|
81
|
AbstractDecoder* getDecoderByName(const string name);
|
aac5773f
hucm
功能基本完成,接口待打磨
|
82
|
|
0573bd98
Hu Chunming
优化代码;添加注释
|
83
84
85
86
87
88
89
|
/**************************************************
* 接口:startDecode
* 功能:启动解码
* 参数:FFNvDecoder* 解码器指针
* 返回:void
* 备注:
**************************************************/
|
92989af0
ming
更新解码器
|
90
|
bool startDecode(AbstractDecoder*);
|
0573bd98
Hu Chunming
优化代码;添加注释
|
91
92
|
/**************************************************
|
f667f79a
Hu Chunming
注释优化;
|
93
|
* 接口:startAllDecode
|
0573bd98
Hu Chunming
优化代码;添加注释
|
94
95
96
97
98
|
* 功能:启动全部解码
* 参数:void
* 返回:void
* 备注:
**************************************************/
|
aac5773f
hucm
功能基本完成,接口待打磨
|
99
|
void startAllDecode();
|
aac5773f
hucm
功能基本完成,接口待打磨
|
100
|
|
0573bd98
Hu Chunming
优化代码;添加注释
|
101
102
|
/**************************************************
* 接口:startDecodeByName
|
f667f79a
Hu Chunming
注释优化;
|
103
|
* 功能:启动名称对应的解码器
|
0573bd98
Hu Chunming
优化代码;添加注释
|
104
105
106
107
108
109
110
111
112
|
* 参数:string name 解码器名称
* 返回:成功返回true,失败返回false
* 备注:
**************************************************/
bool startDecodeByName(const string name);
/**************************************************
* 接口:closeDecoderByName
* 功能:关闭解码器名称对应的解码
|
f667f79a
Hu Chunming
注释优化;
|
113
|
* 参数:const string name 解码器名称
|
0573bd98
Hu Chunming
优化代码;添加注释
|
114
115
116
117
118
119
120
121
122
123
124
125
|
* 返回:成功返回true,失败返回false
* 备注:
**************************************************/
bool closeDecoderByName(const string name);
/**************************************************
* 接口:closeAllDecoder
* 功能:关闭全部解码器
* 参数:void
* 返回:void
* 备注:
**************************************************/
|
aac5773f
hucm
功能基本完成,接口待打磨
|
126
|
void closeAllDecoder();
|
aac5773f
hucm
功能基本完成,接口待打磨
|
127
|
|
3c7e3e11
Hu Chunming
1.修改日志
|
128
129
130
131
132
133
134
135
136
|
/**************************************************
* 接口:closeAllDecoderByGpuid
* 功能:关闭某张显卡撒花姑娘的全部解码器
* 参数:const string gpuid gpu的id
* 返回:void
* 备注:
**************************************************/
void closeAllDecoderByGpuid(const string gpuid);
|
0573bd98
Hu Chunming
优化代码;添加注释
|
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
|
/**************************************************
* 接口: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
* 备注:
**************************************************/
|
3d2ab595
Hu Chunming
支持gb28181
|
162
|
bool isSurport(MgrDecConfig& config);
|
e96e6489
Hu Chunming
优化代码;添加isRunning函数
|
163
|
|
0573bd98
Hu Chunming
优化代码;添加注释
|
164
165
166
167
168
169
170
171
172
|
/**************************************************
* 接口:isRunning
* 功能:根据解码器名称判断解码器是否正在运行
* 参数:const string name 解码器名称
* 返回:正在运行返回true,否则返回false
* 备注:
**************************************************/
bool isRunning(const string name);
|
3c7e3e11
Hu Chunming
1.修改日志
|
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
/**************************************************
* 接口:isFinished
* 功能:根据解码器名称判断解码器是否已经结束
* 参数:const string name 解码器名称
* 返回:正在运行返回true,否则返回false
* 备注:
**************************************************/
bool isFinished(const string name);
/**************************************************
* 接口:isPausing
* 功能:根据解码器名称判断解码器是否暂停
* 参数:const string name 解码器名称
* 返回:正在运行返回true,否则返回false
* 备注:
**************************************************/
bool isPausing(const string name);
|
0573bd98
Hu Chunming
优化代码;添加注释
|
191
192
193
194
195
196
197
|
/**************************************************
* 接口:count
* 功能:获取正在运行的解码器数量
* 参数:void
* 返回:正在运行的解码器数量
* 备注:
**************************************************/
|
aac5773f
hucm
功能基本完成,接口待打磨
|
198
199
|
int count();
|
bc52e542
Hu Chunming
添加关键帧解码功能
|
200
201
202
203
204
|
/**************************************************
* 接口:setDecKeyframe
* 功能:设置是否只解码关键帧。默认全解
* 参数:const string name 解码器名称
* bool bKeyframe 是否只解码关键帧。true,只解码关键帧;false,普通的全解码
|
3c7e3e11
Hu Chunming
1.修改日志
|
205
|
* 返回:bool 成功返回true,失败返回false
|
bc52e542
Hu Chunming
添加关键帧解码功能
|
206
207
208
209
|
* 备注:
**************************************************/
bool setDecKeyframe(const string name, bool bKeyframe);
|
3c7e3e11
Hu Chunming
1.修改日志
|
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
|
/**************************************************
* 接口:getResolution
* 功能:获取视频分辨率
* 参数:const string name 解码器名称
* int &width 从 width 返回视频宽度
* int &height 从 height 返回视频高度
* 返回:bool 成功获取返回true,失败返回false
* 备注:
**************************************************/
bool getResolution(const string name, int &width, int &height);
/**************************************************
* 接口:getAllDecodeName
* 功能:获取全部解码器名称
* 参数:void
* 返回:vector<string> 返回全部解码器名称
* 备注:
**************************************************/
vector<string> getAllDecodeName();
/**************************************************
* 接口:getCachedQueueLength
* 功能:获取解码缓冲队列当前长度
* 参数:const string name 解码器名称
* 返回:int 解码缓冲队列当前长度
* 备注:
**************************************************/
int getCachedQueueLength(const string name);
/**************************************************
|
3c7e3e11
Hu Chunming
1.修改日志
|
240
241
242
243
244
245
246
247
|
* 接口:releaseFFImgInfo
* 功能:释放视频快照信息
* 参数:FFImgInfo* info 视频快照信息
* 返回:void
* 备注:
**************************************************/
void releaseFFImgInfo(FFImgInfo* info);
|
92989af0
ming
更新解码器
|
248
249
250
251
|
FFImgInfo* snapshot_in_task(const string name);
vector<FFImgInfo*> timing_snapshot_all();
|
aac5773f
hucm
功能基本完成,接口待打磨
|
252
253
|
private:
FFNvDecoderManager(){}
|
0573bd98
Hu Chunming
优化代码;添加注释
|
254
255
|
void closeAllFinishedDecoder();
|
aac5773f
hucm
功能基本完成,接口待打磨
|
256
257
|
private:
|
3d2ab595
Hu Chunming
支持gb28181
|
258
|
map<string, AbstractDecoder*> decoderMap;
|
f40cc409
Hu Chunming
优化显存占用。当前在3080显卡上...
|
259
|
|
3c7e3e11
Hu Chunming
1.修改日志
|
260
|
mutex m_mutex;
|
aac5773f
hucm
功能基本完成,接口待打磨
|
261
|
};
|