fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1
2
3
4
5
6
|
#include "FFNvDecoderManager.h"
#include<iostream>
using namespace std;
|
78676b64
Hu Chunming
删除无用代码
|
7
|
FFNvDecoder* FFNvDecoderManager::createDecoder(MgrDecConfig config){
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
8
9
10
|
closeAllFinishedDecoder();
|
31a1e592
Hu Chunming
完成接口匹配
|
11
12
13
14
|
std::lock_guard<std::mutex> l(m_mutex);
auto it = decoderMap.find(config.name);
if (it != decoderMap.end()){
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
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
|
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;
dec->decode_finished_cbk = config.cfg.decode_finished_cbk;
decoderMap[config.name] = dec;
return dec;
}
// 创建失败,关闭解码器
dec->close();
delete dec;
return nullptr;
}
bool FFNvDecoderManager::setUserPtr(const string name, const void * userPtr)
{
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
50
51
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
auto dec = decoderMap.find(name);
if (dec != decoderMap.end())
{
dec->second->m_userPtr = userPtr;
return true;
}
cout << "没有找到name为" << name << "的解码器!" << endl;
return false;
}
FFNvDecoder* FFNvDecoderManager::getDecoderByName(const string name)
{
if (name.empty())
{
cout << "name 为空!"<< endl;
return nullptr;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
71
72
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
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(const string name){
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
97
98
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
99
100
101
102
103
104
105
106
107
108
109
110
|
auto dec = decoderMap.find(name);
if (dec != decoderMap.end())
{
dec->second->start();
return true;
}
cout << "没有找到name为" << name << "的解码器!" << endl;
return false;
}
void FFNvDecoderManager::startAllDecode(){
|
31a1e592
Hu Chunming
完成接口匹配
|
111
112
113
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
for(auto iter = decoderMap.begin(); iter != decoderMap.end(); iter++){
if (!iter->second->isRunning())
{
iter->second->start();
}
}
}
bool FFNvDecoderManager::closeDecoderByName(const string name){
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
129
130
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
131
132
133
134
135
136
137
138
|
auto dec = decoderMap.find(name);
if (dec != decoderMap.end())
{
dec->second->close();
delete dec->second;
dec->second = nullptr;
decoderMap.erase(dec);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
139
140
141
|
return true;
}
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
142
143
144
145
146
147
|
cout << "没有找到name为" << name << "的解码器!" << endl;
return false;
}
void FFNvDecoderManager::closeAllDecoder()
{
|
31a1e592
Hu Chunming
完成接口匹配
|
148
149
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
150
151
152
153
154
155
|
for(auto iter = decoderMap.begin(); iter != decoderMap.end(); iter++){
iter->second->close();
delete iter->second;
iter->second = nullptr;
}
decoderMap.clear();
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
156
157
158
159
|
}
void FFNvDecoderManager::closeAllFinishedDecoder()
{
|
31a1e592
Hu Chunming
完成接口匹配
|
160
161
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
162
163
164
165
166
167
168
169
170
171
172
173
|
for(auto iter = decoderMap.begin(); iter != decoderMap.end(); ){
if (iter->second->isFinished())
{
delete iter->second;
iter->second = nullptr;
iter = decoderMap.erase(iter);
}
else
{
iter++ ;
}
}
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
174
175
176
177
178
179
|
}
int FFNvDecoderManager::count()
{
closeAllFinishedDecoder();
|
a0e58901
Hu Chunming
去掉CMultiSourcePro...
|
180
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
181
182
183
184
185
186
187
188
189
190
191
|
return decoderMap.size();
}
bool FFNvDecoderManager::pauseDecoder(const string name)
{
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
192
193
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
auto dec = decoderMap.find(name);
if (dec != decoderMap.end())
{
dec->second->pause();
return true;
}
cout << "没有找到name为" << name << "的解码器!" << endl;
return false;
}
bool FFNvDecoderManager::resumeDecoder(const string name)
{
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
213
214
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
|
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;
return dec.isSurport(cfg);
}
bool FFNvDecoderManager::isRunning(const string name){
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
239
240
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
241
242
243
244
245
246
247
248
249
250
|
auto dec = decoderMap.find(name);
if (dec != decoderMap.end())
{
return dec->second->isRunning();
}
cout << "没有找到name为" << name << "的解码器!" << endl;
return false;
}
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
251
252
253
254
255
256
257
|
bool FFNvDecoderManager::isFinished(const string name){
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
258
259
|
std::lock_guard<std::mutex> l(m_mutex);
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
|
auto dec = decoderMap.find(name);
if (dec != decoderMap.end())
{
return dec->second->isFinished();
}
cout << "没有找到name为" << name << "的解码器!" << endl;
return false;
}
bool FFNvDecoderManager::isPausing(const string name){
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
277
278
|
std::lock_guard<std::mutex> l(m_mutex);
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
279
280
281
282
283
284
285
286
287
288
|
auto dec = decoderMap.find(name);
if (dec != decoderMap.end())
{
return dec->second->isPausing();
}
cout << "没有找到name为" << name << "的解码器!" << endl;
return false;
}
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
289
290
291
292
293
294
295
296
|
bool FFNvDecoderManager::setDecKeyframe(const string name, bool bKeyframe)
{
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
297
298
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
|
auto dec = decoderMap.find(name);
if (dec != decoderMap.end())
{
dec->second->setDecKeyframe(bKeyframe);
return true;
}
cout << "没有找到name为" << name << "的解码器!" << endl;
return false;
}
bool FFNvDecoderManager::getResolution(const string name, int &width, int &height)
{
if (name.empty())
{
cout << "name 为空!"<< endl;
return false;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
318
319
|
std::lock_guard<std::mutex> l(m_mutex);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
320
321
322
323
324
325
326
327
328
|
auto dec = decoderMap.find(name);
if (dec != decoderMap.end())
{
dec->second->getResolution(width, height);
return true;
}
cout << "没有找到name为" << name << "的解码器!" << endl;
return false;
|
31a1e592
Hu Chunming
完成接口匹配
|
329
330
331
332
333
334
335
336
337
338
339
340
341
|
}
vector<string> FFNvDecoderManager::getAllDecodeName(){
closeAllFinishedDecoder();
std::lock_guard<std::mutex> l(m_mutex);
vector<string> decode_names;
for(auto it = decoderMap.begin(); it != decoderMap.end(); ++it){
decode_names.push_back(it->first);
}
return decode_names;
|
682bbe39
Hu Chunming
修正任务自然退出死锁的问题
|
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
|
}
int FFNvDecoderManager::getCachedQueueLength(const string name){
if (name.empty()){
cout << "name 为空!"<< endl;
return -1;
}
std::lock_guard<std::mutex> l(m_mutex);
auto dec = decoderMap.find(name);
if (dec != decoderMap.end()){
return dec->second->getCachedQueueLength();
}
cout << "没有找到name为" << name << "的解码器!" << endl;
return -1;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
359
|
}
|