From d0b8204e3939e1e2d841a90ea254bc4b91309ab5 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期日, 19 一月 2020 13:32:13 +0800
Subject: [PATCH] update ffmepg gpu balance

---
 csrc/wrapper.cpp |   44 +++++++++++++++++++++++++++++++++++++-------
 1 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/csrc/wrapper.cpp b/csrc/wrapper.cpp
index 19357c5..3e34b2c 100644
--- a/csrc/wrapper.cpp
+++ b/csrc/wrapper.cpp
@@ -47,6 +47,7 @@
     ,cpu_(0)
     ,run_dec_(false)
     ,run_stream_(true)
+    ,run_rec_(false)
     ,thread_(nullptr)
     ,stop_stream_(false)
     ,stream_(nullptr)
@@ -65,6 +66,7 @@
     ,cpu_(0)
     ,run_dec_(false)
     ,run_stream_(true)
+    ,run_rec_(false)
     ,thread_(nullptr)
     ,stop_stream_(false)
     ,stream_(nullptr)
@@ -103,16 +105,19 @@
         prop.gpu_acc_ = !cpu_;
 
     	std::unique_ptr<FormatIn> in(new FormatIn(prop.gpuAccl()));
-    	AVDictionary *avdic = prop.optsFormat();
     	int flag = -1;
         if (gb_){
             flag = in->openGb28181(input, NULL);
         }else{
-            flag = in->open(input, &avdic);
+    	    AVDictionary *avdic = prop.optsFormat();
+            if(avdic){
+                flag = in->open(input, &avdic);
+    	    	av_dict_free(&avdic);
+    	    }else{
+                flag = in->open(input, NULL);
+            }
         }
-    	if(avdic){
-    		av_dict_free(&avdic);
-    	}
+    	
         if(flag == 0){
             if(!in->findStreamInfo(NULL)){
                 logIt("can't find video stream\n");
@@ -170,7 +175,7 @@
         int flag = 0;
         if (run_stream_ && stream_) stream_->SetPacket(pkt);
         if (run_dec_ && decoder_) flag = decoder_->SetFrame(pkt);
-        if (rec_->Loaded()) rec_->SetPacket(pkt);
+        if (run_rec_ && rec_->Loaded()) rec_->SetPacket(pkt);
 
         return flag;
     }
@@ -251,6 +256,10 @@
         rec_->SetRecMinCacheTime(mind);
     }
 
+    void Wrapper::OpenRecorder(){
+        run_rec_ = true;
+    }
+    
     void Wrapper::BuildRecorder(const char* id, const char *output, const int64_t &fid, const int mindur, const int maxdur, const bool audio){
         bool a = audio;
         if (gb_) a = false;
@@ -275,7 +284,7 @@
         }
     }
     ////////decoder
-    void Wrapper::BuildDecoder(){
+    void Wrapper::OpenDecoder(){
         run_dec_ = true;
     }
 
@@ -397,5 +406,26 @@
 
         return flag;
     }
+
+    int GetGb28181Pic(const char *rtspUrl, char *retData, int *retDataLen){
+        int ret = 0;
+        std::string fn = rtspUrl;
+
+        auto handle_gb28181 = new GB28181API;
+        if(handle_gb28181->addCamera(fn) == -1){
+            delete(handle_gb28181);
+            logIt("do addCamera Error\n");
+            return -1;
+        }
+
+        int retLen = handle_gb28181->capturePic(handle_gb28181, retData, retDataLen);
+        if(retLen == 0){
+            logIt("do capturePic failed:%d");
+            ret = -1;
+        }
+
+        handle_gb28181->deleteCamera();
+        return ret;
+    }
 }
 

--
Gitblit v1.8.0