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