Commit 0573bd980b8a8c92de81dce4b59afde0575ab934

Authored by Hu Chunming
1 parent e65720d4

优化代码;添加注释

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;
... ...