From 25a151d517f60a76de91095abcbf32a395949825 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 25 五月 2021 15:14:02 +0800
Subject: [PATCH] bug avoid gb28181 lib
---
csrc/wrapper.cpp | 53 ++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/csrc/wrapper.cpp b/csrc/wrapper.cpp
index 4b6bd93..e743dcb 100644
--- a/csrc/wrapper.cpp
+++ b/csrc/wrapper.cpp
@@ -1,6 +1,7 @@
#include "wrapper.hpp"
#include <thread>
+#include <atomic>
#include <unistd.h>
#include <sys/time.h>
@@ -455,23 +456,45 @@
int GetGb28181Pic(const char *rtspUrl, char *retData, int *retDataLen, const int tt){
int ret = 0;
- std::string fn = rtspUrl;
+ std::atomic_bool add_camera{false};
- auto handle_gb28181 = new GB28181API;
- if(handle_gb28181->addCamera(fn) == -1){
- delete(handle_gb28181);
- logIt("do addCamera Error\n");
- return -1;
+ std::thread t([&]{
+ auto handle_gb28181 = new GB28181API;
+ std::string ru(rtspUrl);
+ if(handle_gb28181->addCamera(ru) == -1){
+ delete(handle_gb28181);
+ logIt("do addCamera Error\n");
+ ret = -2;
+ return;
+ }
+ add_camera.store(true);
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+ int retLen = handle_gb28181->capturePic(handle_gb28181, retData, retDataLen, tt);
+ if(retLen == 0){
+ logIt("do capturePic failed:%d");
+ ret = -1;
+ }
+
+ handle_gb28181->deleteCamera();
+ delete handle_gb28181;
+ });
+
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+
+ int ttt = tt;
+ if (ttt < 6) ttt = 6;
+
+ int i = -1;
+ while (true) {
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+ if (add_camera.load()) {
+ t.join();
+ return ret;
+ }
+ if (i++ > ttt) break;
}
-
- int retLen = handle_gb28181->capturePic(handle_gb28181, retData, retDataLen, tt);
- if(retLen == 0){
- logIt("do capturePic failed:%d");
- ret = -1;
- }
-
- handle_gb28181->deleteCamera();
- return ret;
+ t.detach();
+ return -1;
}
}
--
Gitblit v1.8.0