From 0c98249d381d6e56c78d6e752a49e768a4c4d22e Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期五, 27 九月 2019 12:46:29 +0800
Subject: [PATCH] lib log fix

---
 csrc/wrapper.cpp      |   29 ++++++++++++--
 csrc/wrapper.hpp      |    4 +
 goffmpeg.go           |    8 +---
 cffmpeg.h             |    4 +
 libcffmpeg.c          |   10 ++++-
 csrc/cffmpeg.cpp      |   14 +++---
 libcffmpeg.h          |    7 ++-
 csrc/buz/recorder.cpp |   11 +++++
 8 files changed, 62 insertions(+), 25 deletions(-)

diff --git a/cffmpeg.h b/cffmpeg.h
index 93f1754..c794216 100644
--- a/cffmpeg.h
+++ b/cffmpeg.h
@@ -9,7 +9,9 @@
 
 typedef void* cffmpeg;
 
-cffmpeg c_ffmpeg_create(const int, const char *logfile);
+cffmpeg c_ffmpeg_create();
+cffmpeg c_ffmpeg_create2(const char *logfile);
+
 void c_ffmpeg_destroy(const cffmpeg h);
 void c_ffmpeg_run(const cffmpeg h, const char *input);
 
diff --git a/csrc/buz/recorder.cpp b/csrc/buz/recorder.cpp
index 7b6a483..7d2afd7 100644
--- a/csrc/buz/recorder.cpp
+++ b/csrc/buz/recorder.cpp
@@ -74,7 +74,16 @@
             
             int pid = getpid();
             file_path_ = dir_ + "/" + sole::uuid4().base62() + "-" + std::to_string(pid) + ".mp4";
-            auto ret = out_->JustWriter(in_->getStream(AVMEDIA_TYPE_VIDEO), in_->getStream(AVMEDIA_TYPE_AUDIO), file_path_.c_str());
+
+            auto v = in_->getStream(AVMEDIA_TYPE_VIDEO);
+            if (!v){
+                return -2;
+            }
+            AVStream *a = in_->getStream(AVMEDIA_TYPE_AUDIO);
+            if (!audio){
+                a = NULL;
+            }
+            auto ret = out_->JustWriter(v, a, file_path_.c_str());
             if (ret){
                 logIt("start record file: %s", file_path_.c_str());
                 return 0;
diff --git a/csrc/cffmpeg.cpp b/csrc/cffmpeg.cpp
index af3d0c1..7b31f3f 100644
--- a/csrc/cffmpeg.cpp
+++ b/csrc/cffmpeg.cpp
@@ -10,17 +10,17 @@
 }
 #endif
 
-#ifndef LIB_CFFMPEG
-#include "csrc/all.hpp"
-#endif
 #include "csrc/wrapper.hpp"
 
 using namespace cffmpeg_wrap;
 
-cffmpeg c_ffmpeg_create(const int log, const char *logfile){
-    bool logit = false;
-    if (log != 0) logit = true;
-    return new Wrapper(logit, logfile);
+cffmpeg c_ffmpeg_create(){
+    
+    return new Wrapper();
+}
+
+cffmpeg c_ffmpeg_create2(const char *logfile){
+    return new Wrapper(logfile);
 }
 
 void c_ffmpeg_destroy(const cffmpeg h){
diff --git a/csrc/wrapper.cpp b/csrc/wrapper.cpp
index a630271..26aee19 100644
--- a/csrc/wrapper.cpp
+++ b/csrc/wrapper.cpp
@@ -38,7 +38,7 @@
 namespace cffmpeg_wrap{
     using namespace buz;
 
-    Wrapper::Wrapper(const bool logit, const char *logfile)
+    Wrapper::Wrapper()
     :input_url_("")
     ,scale_w_(0)
     ,scale_h_(0)
@@ -52,11 +52,29 @@
     ,stream_(nullptr)
     ,decoder_(nullptr)
     ,rec_(new rec)
+    ,logit_(false)
     {
         makeTheWorld();
-        if (logit){
-            logif::CreateLogger(logfile, true);
-        }
+    }
+
+    Wrapper::Wrapper(const char *logfile)
+    :input_url_("")
+    ,scale_w_(0)
+    ,scale_h_(0)
+    ,scale_f_(SWS_POINT)
+    ,audio_(false)
+    ,gb_(0)
+    ,cpu_(0)
+    ,run_dec_(false)
+    ,thread_(nullptr)
+    ,stop_stream_(false)
+    ,stream_(nullptr)
+    ,decoder_(nullptr)
+    ,rec_(new rec)
+    ,logit_(true)
+    {
+        makeTheWorld();
+        logif::CreateLogger(logfile, true);
     }
 
 
@@ -74,7 +92,8 @@
         {
             logIt("WRAPPER EXCEPTION: ", e.what());
         }
-        logif::DestroyLogger();
+        if (logit_)
+            logif::DestroyLogger();
     }
 
     std::unique_ptr<ffwrapper::FormatIn> Wrapper::init_reader(const char* input){
diff --git a/csrc/wrapper.hpp b/csrc/wrapper.hpp
index 9fce37d..af976e5 100644
--- a/csrc/wrapper.hpp
+++ b/csrc/wrapper.hpp
@@ -27,7 +27,8 @@
 
     class Wrapper{
     public:
-        explicit Wrapper(const bool logit, const char *logfile);
+        Wrapper();
+        explicit Wrapper(const char *logfile);
         ~Wrapper ();
     private: 
         std::unique_ptr<ffwrapper::FormatIn> init_reader(const char* input);
@@ -75,6 +76,7 @@
         rec* rec_;
         // 褰曞儚璇锋眰缂撳瓨,绛夊緟runstream鍚庢坊鍔�
         std::function<void()> fn_rec_lazy_;
+        bool logit_;
     };
 
     uint8_t* Decode(const char *file, const int gb, int *w, int *h);
diff --git a/goffmpeg.go b/goffmpeg.go
index c341b73..d23bf80 100644
--- a/goffmpeg.go
+++ b/goffmpeg.go
@@ -76,10 +76,7 @@
 // New 2nd new
 func New(conf Config) *GoFFMPEG {
 
-	var l *C.char
-
-	logit := 0
-	f := C.wrap_fn_create(C.int(logit), l)
+	f := C.wrap_fn_create()
 
 	if f == nil {
 		return nil
@@ -104,8 +101,7 @@
 	lf := C.CString(logfile)
 	defer C.free(unsafe.Pointer(lf))
 
-	logit := 1
-	f := C.wrap_fn_create(C.int(logit), lf)
+	f := C.wrap_fn_create2(lf)
 	if f == nil {
 		return nil
 	}
diff --git a/libcffmpeg.c b/libcffmpeg.c
index 44838d4..69fcbb9 100644
--- a/libcffmpeg.c
+++ b/libcffmpeg.c
@@ -19,6 +19,8 @@
     if(lib){
         fn_create = (lib_cffmpeg_create)dlsym(lib, "c_ffmpeg_create");
         release_if_err(fn_create, lib);
+        fn_create2 = (lib_cffmpeg_create)dlsym(lib, "c_ffmpeg_create2");
+        release_if_err(fn_create2, lib);
         fn_destroy = (lib_cffmpeg_destroy)dlsym(lib, "c_ffmpeg_destroy");
         release_if_err(fn_destroy, lib);
         fn_run = (lib_cffmpeg_run)dlsym(lib, "c_ffmpeg_run");
@@ -63,8 +65,12 @@
     }
 }
 
-cffmpeg wrap_fn_create(const int log, const char *logfile){
-    return fn_create(log, logfile);
+cffmpeg wrap_fn_create(){
+    return fn_create();
+}
+
+cffmpeg wrap_fn_create2(const char *logfile){
+    return fn_create2(logfile);
 }
 
 void wrap_fn_destroy(const cffmpeg h){
diff --git a/libcffmpeg.h b/libcffmpeg.h
index 47e7b5c..5b43da3 100644
--- a/libcffmpeg.h
+++ b/libcffmpeg.h
@@ -10,7 +10,8 @@
 
 typedef void* cffmpeg;
 
-typedef cffmpeg(*lib_cffmpeg_create)(const int, const char*);
+typedef cffmpeg(*lib_cffmpeg_create)();
+typedef cffmpeg(*lib_cffmpeg_create2)(const char*);
 typedef void (*lib_cffmpeg_destroy)(const cffmpeg);
 typedef void (*lib_cffmpeg_run)(const cffmpeg, const char*);
 typedef void (*lib_cffmpeg_scale)(const cffmpeg, const int, const int, const int);
@@ -25,6 +26,7 @@
 typedef void*(*lib_cffmpeg_decode)(const char*, const int, int*, int*);
 
 static lib_cffmpeg_create              fn_create = NULL;
+static lib_cffmpeg_create2             fn_create2 = NULL;
 static lib_cffmpeg_destroy             fn_destroy = NULL;
 static lib_cffmpeg_run                 fn_run = NULL;
 static lib_cffmpeg_scale               fn_scale = NULL;
@@ -42,7 +44,8 @@
 libcffmpeg init_libcffmpeg(const char *so_file);
 void release_libcffmpeg(libcffmpeg lib);
 
-cffmpeg wrap_fn_create(const int log, const char *logfile);
+cffmpeg wrap_fn_create();
+cffmpeg wrap_fn_create2(const char *logfile);
 void wrap_fn_destroy(const cffmpeg h);
 void wrap_fn_run(const cffmpeg h, const char* input);
 void wrap_fn_scale(const cffmpeg h, const int wid, const int hei, const int flags);

--
Gitblit v1.8.0