Commit 0573bd980b8a8c92de81dce4b59afde0575ab934
1 parent
e65720d4
优化代码;添加注释
Showing
4 changed files
with
146 additions
and
30 deletions
src/FFNvDecoder.cpp
... | ... | @@ -136,6 +136,13 @@ bool FFNvDecoder::init(const char* uri, const char* gpuid, bool force_tcp) |
136 | 136 | return true; |
137 | 137 | } |
138 | 138 | |
139 | +bool FFNvDecoder::isSurport(FFDecConfig& cfg) | |
140 | +{ | |
141 | + bool bRet = init(cfg); | |
142 | + decode_finished(); | |
143 | + return bRet; | |
144 | +} | |
145 | + | |
139 | 146 | void FFNvDecoder::start(){ |
140 | 147 | |
141 | 148 | m_bRunning = true; | ... | ... |
src/FFNvDecoder.h
... | ... | @@ -31,10 +31,10 @@ typedef void(*POST_DECODE_CALLBACK)(const void * userPtr, AVFrame * gpuFrame); |
31 | 31 | |
32 | 32 | struct FFDecConfig |
33 | 33 | { |
34 | - string uri; | |
35 | - POST_DECODE_CALLBACK post_decoded_cbk; | |
36 | - string gpuid; | |
37 | - bool force_tcp{true}; | |
34 | + string uri; // 视频地址 | |
35 | + POST_DECODE_CALLBACK post_decoded_cbk; // 解码数据回调接口 | |
36 | + string gpuid; // gpu id | |
37 | + bool force_tcp{true}; // 是否指定使用tcp连接 | |
38 | 38 | }; |
39 | 39 | |
40 | 40 | class FFNvDecoder{ |
... | ... | @@ -54,6 +54,8 @@ public: |
54 | 54 | void setName(string nm); |
55 | 55 | string getName(); |
56 | 56 | |
57 | + bool isSurport(FFDecConfig& cfg); | |
58 | + | |
57 | 59 | public: |
58 | 60 | AVPixelFormat getHwPixFmt(); |
59 | 61 | ... | ... |
src/FFNvDecoderManager.cpp
... | ... | @@ -37,23 +37,23 @@ FFNvDecoder* FFNvDecoderManager::createDecoder(MgrDecConfig& config){ |
37 | 37 | return nullptr; |
38 | 38 | } |
39 | 39 | |
40 | -void FFNvDecoderManager::setUserPtr(string name, const void * userPtr) | |
40 | +bool FFNvDecoderManager::setUserPtr(const string name, const void * userPtr) | |
41 | 41 | { |
42 | 42 | if (name.empty()) |
43 | 43 | { |
44 | 44 | cout << "name 为空!"<< endl; |
45 | - return ; | |
45 | + return false; | |
46 | 46 | } |
47 | 47 | |
48 | 48 | auto dec = decoderMap.find(name); |
49 | 49 | if (dec != decoderMap.end()) |
50 | 50 | { |
51 | 51 | dec->second->m_userPtr = userPtr; |
52 | - return; | |
52 | + return true; | |
53 | 53 | } |
54 | 54 | |
55 | 55 | cout << "没有找到name为" << name << "的解码器!" << endl; |
56 | - return ; | |
56 | + return false; | |
57 | 57 | } |
58 | 58 | |
59 | 59 | FFNvDecoder* FFNvDecoderManager::getDecoderByName(const string name) |
... | ... | @@ -81,7 +81,7 @@ void FFNvDecoderManager::startDecode(FFNvDecoder* dec){ |
81 | 81 | } |
82 | 82 | } |
83 | 83 | |
84 | -bool FFNvDecoderManager::startDecodeByName(string name){ | |
84 | +bool FFNvDecoderManager::startDecodeByName(const string name){ | |
85 | 85 | if (name.empty()) |
86 | 86 | { |
87 | 87 | cout << "name 为空!"<< endl; |
... | ... | @@ -101,11 +101,14 @@ bool FFNvDecoderManager::startDecodeByName(string name){ |
101 | 101 | |
102 | 102 | void FFNvDecoderManager::startAllDecode(){ |
103 | 103 | for(auto iter = decoderMap.begin(); iter != decoderMap.end(); iter++){ |
104 | - iter->second->start(); | |
104 | + if (!iter->second->isRunning()) | |
105 | + { | |
106 | + iter->second->start(); | |
107 | + } | |
105 | 108 | } |
106 | 109 | } |
107 | 110 | |
108 | -bool FFNvDecoderManager::closeDecoderByName(string name){ | |
111 | +bool FFNvDecoderManager::closeDecoderByName(const string name){ | |
109 | 112 | if (name.empty()) |
110 | 113 | { |
111 | 114 | cout << "name 为空!"<< endl; |
... | ... | @@ -167,7 +170,7 @@ int FFNvDecoderManager::count() |
167 | 170 | return decoderMap.size(); |
168 | 171 | } |
169 | 172 | |
170 | -bool FFNvDecoderManager::pauseDecoder(string name) | |
173 | +bool FFNvDecoderManager::pauseDecoder(const string name) | |
171 | 174 | { |
172 | 175 | if (name.empty()) |
173 | 176 | { |
... | ... | @@ -186,7 +189,7 @@ bool FFNvDecoderManager::pauseDecoder(string name) |
186 | 189 | return false; |
187 | 190 | } |
188 | 191 | |
189 | -bool FFNvDecoderManager::resumeDecoder(string name) | |
192 | +bool FFNvDecoderManager::resumeDecoder(const string name) | |
190 | 193 | { |
191 | 194 | if (name.empty()) |
192 | 195 | { |
... | ... | @@ -208,12 +211,10 @@ bool FFNvDecoderManager::resumeDecoder(string name) |
208 | 211 | bool FFNvDecoderManager::isSurport(FFDecConfig& cfg) |
209 | 212 | { |
210 | 213 | FFNvDecoder dec; |
211 | - bool bRet = dec.init(cfg); | |
212 | - dec.close(); | |
213 | - return bRet; | |
214 | + return dec.isSurport(cfg); | |
214 | 215 | } |
215 | 216 | |
216 | -bool FFNvDecoderManager::isRunning(string name){ | |
217 | +bool FFNvDecoderManager::isRunning(const string name){ | |
217 | 218 | if (name.empty()) |
218 | 219 | { |
219 | 220 | cout << "name 为空!"<< endl; | ... | ... |
src/FFNvDecoderManager.h
... | ... | @@ -9,12 +9,22 @@ using namespace std; |
9 | 9 | |
10 | 10 | struct MgrDecConfig |
11 | 11 | { |
12 | - FFDecConfig cfg; | |
13 | - string name{""}; | |
12 | + FFDecConfig cfg; // 解码器配置 | |
13 | + string name{""}; // 解码器名称 | |
14 | 14 | }; |
15 | 15 | |
16 | +/** | |
17 | + * 解码器管理类,单例类 | |
18 | + **/ | |
16 | 19 | class FFNvDecoderManager{ |
17 | 20 | public: |
21 | + /************************************************** | |
22 | + * 接口:getInstance | |
23 | + * 功能:获取解码器管理者实例 | |
24 | + * 参数:无 | |
25 | + * 返回:成功返回 解码器管理者实例, 失败返回 nullptr | |
26 | + * 备注:调用其他接口前,需要先调用该接口获取管理者实例 | |
27 | + **************************************************/ | |
18 | 28 | static FFNvDecoderManager* getInstance(){ |
19 | 29 | static FFNvDecoderManager* singleton = nullptr; |
20 | 30 | if (singleton == nullptr){ |
... | ... | @@ -28,32 +38,128 @@ public: |
28 | 38 | closeAllDecoder(); |
29 | 39 | } |
30 | 40 | |
41 | + /************************************************** | |
42 | + * 接口:createDecoder | |
43 | + * 功能:根据配置信息创建解码器 | |
44 | + * 参数:MgrDecConfig& config 解码器配置信息 | |
45 | + * 返回:成功返回解码器, 失败返回 nullptr | |
46 | + * 备注: | |
47 | + **************************************************/ | |
31 | 48 | FFNvDecoder* createDecoder(MgrDecConfig& config); |
32 | - void setUserPtr(string name, const void * userPtr); | |
33 | 49 | |
50 | + /************************************************** | |
51 | + * 接口:setUserPtr | |
52 | + * 功能:设置解码数据回调接口的用户自定义参数 | |
53 | + * 参数:string name 解码器名称 | |
54 | + * const void * userPtr 用户自定义的要传到解码数据回调接口的数据 | |
55 | + * 返回:设置成功返回true,失败返回false | |
56 | + * 备注: | |
57 | + **************************************************/ | |
58 | + bool setUserPtr(const string name, const void * userPtr); | |
59 | + | |
60 | + /************************************************** | |
61 | + * 接口:getDecoderByName | |
62 | + * 功能:根据解码器名称返回解码器对象指针 | |
63 | + * 参数:const string name 解码器名称 | |
64 | + * 返回:成功返回对应的解码器对象的指针,失败返回nullptr | |
65 | + * 备注: | |
66 | + **************************************************/ | |
34 | 67 | FFNvDecoder* getDecoderByName(const string name); |
35 | 68 | |
69 | + /************************************************** | |
70 | + * 接口:startDecode | |
71 | + * 功能:启动解码 | |
72 | + * 参数:FFNvDecoder* 解码器指针 | |
73 | + * 返回:void | |
74 | + * 备注: | |
75 | + **************************************************/ | |
36 | 76 | void startDecode(FFNvDecoder*); |
77 | + | |
78 | + /************************************************** | |
79 | + * 接口:startDecode | |
80 | + * 功能:启动全部解码 | |
81 | + * 参数:void | |
82 | + * 返回:void | |
83 | + * 备注: | |
84 | + **************************************************/ | |
37 | 85 | void startAllDecode(); |
38 | - bool startDecodeByName(string name); | |
39 | 86 | |
40 | - bool closeDecoderByName(string name); | |
87 | + /************************************************** | |
88 | + * 接口:startDecodeByName | |
89 | + * 功能:启动解码器名称对应的解码 | |
90 | + * 参数:string name 解码器名称 | |
91 | + * 返回:成功返回true,失败返回false | |
92 | + * 备注: | |
93 | + **************************************************/ | |
94 | + bool startDecodeByName(const string name); | |
95 | + | |
96 | + /************************************************** | |
97 | + * 接口:closeDecoderByName | |
98 | + * 功能:关闭解码器名称对应的解码 | |
99 | + * 参数:string name 解码器名称 | |
100 | + * 返回:成功返回true,失败返回false | |
101 | + * 备注: | |
102 | + **************************************************/ | |
103 | + bool closeDecoderByName(const string name); | |
104 | + | |
105 | + /************************************************** | |
106 | + * 接口:closeAllDecoder | |
107 | + * 功能:关闭全部解码器 | |
108 | + * 参数:void | |
109 | + * 返回:void | |
110 | + * 备注: | |
111 | + **************************************************/ | |
41 | 112 | void closeAllDecoder(); |
42 | - void closeAllFinishedDecoder(); | |
43 | - | |
44 | - bool removeDecoderByName(string name); | |
45 | - | |
46 | - bool pauseDecoder(string name); | |
47 | - bool resumeDecoder(string name); | |
48 | 113 | |
114 | + /************************************************** | |
115 | + * 接口:pauseDecoder | |
116 | + * 功能:暂停指定名称的解码器 | |
117 | + * 参数:const string name 解码器名称 | |
118 | + * 返回:成功返回true,失败返回false | |
119 | + * 备注: | |
120 | + **************************************************/ | |
121 | + bool pauseDecoder(const string name); | |
122 | + | |
123 | + /************************************************** | |
124 | + * 接口:pauseDecoder | |
125 | + * 功能:恢复指定名称的解码器 | |
126 | + * 参数:const string name 解码器名称 | |
127 | + * 返回:成功返回true,失败返回false | |
128 | + * 备注: | |
129 | + **************************************************/ | |
130 | + bool resumeDecoder(const string name); | |
131 | + | |
132 | + /************************************************** | |
133 | + * 接口:isSurport | |
134 | + * 功能:是否支持指定配置的解码 | |
135 | + * 参数:FFDecConfig& cfg 解码器配置 | |
136 | + * 返回:支持返回true,不支持返回false | |
137 | + * 备注: | |
138 | + **************************************************/ | |
49 | 139 | bool isSurport(FFDecConfig& cfg); |
50 | 140 | |
51 | - bool isRunning(string name); | |
52 | - | |
141 | + /************************************************** | |
142 | + * 接口:isRunning | |
143 | + * 功能:根据解码器名称判断解码器是否正在运行 | |
144 | + * 参数:const string name 解码器名称 | |
145 | + * 返回:正在运行返回true,否则返回false | |
146 | + * 备注: | |
147 | + **************************************************/ | |
148 | + bool isRunning(const string name); | |
149 | + | |
150 | + /************************************************** | |
151 | + * 接口:count | |
152 | + * 功能:获取正在运行的解码器数量 | |
153 | + * 参数:void | |
154 | + * 返回:正在运行的解码器数量 | |
155 | + * 备注: | |
156 | + **************************************************/ | |
53 | 157 | int count(); |
54 | 158 | |
55 | 159 | private: |
56 | 160 | FFNvDecoderManager(){} |
161 | + | |
162 | + void closeAllFinishedDecoder(); | |
57 | 163 | |
58 | 164 | private: |
59 | 165 | map<string, FFNvDecoder*> decoderMap; | ... | ... |