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