Blame view

src/interface/FFNvDecoderManager.h 8.72 KB
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 gpuid
  	* 返回: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
  };