From 98d01a35d01aa0b0f172590da545d489fc49637d Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 23 十月 2019 09:52:11 +0800
Subject: [PATCH] add fps get
---
csrc/wrapper.cpp | 3 +++
csrc/wrapper.hpp | 3 +++
goffmpeg.go | 5 +++++
cffmpeg.h | 1 +
libcffmpeg.c | 8 ++++++++
csrc/cffmpeg.cpp | 5 +++++
libcffmpeg.h | 3 +++
7 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/cffmpeg.h b/cffmpeg.h
index 8f8abeb..0a7ebd1 100644
--- a/cffmpeg.h
+++ b/cffmpeg.h
@@ -15,6 +15,7 @@
void c_ffmpeg_destroy(const cffmpeg h);
void c_ffmpeg_run(const cffmpeg h, const char *input);
+int c_ffmpeg_get_fps(const cffmpeg h);
void c_ffmpeg_run_gb28181(const cffmpeg h);
void c_ffmepg_use_cpu(const cffmpeg h);
/////////passive api
diff --git a/csrc/cffmpeg.cpp b/csrc/cffmpeg.cpp
index 6e54de4..4cf92da 100644
--- a/csrc/cffmpeg.cpp
+++ b/csrc/cffmpeg.cpp
@@ -33,6 +33,11 @@
s->RunStream(input);
}
+int c_ffmpeg_get_fps(const cffmpeg h){
+ Wrapper *s = (Wrapper*)h;
+ return s->GetFPS();
+}
+
void c_ffmpeg_run_gb28181(const cffmpeg h){
Wrapper *s = (Wrapper*)h;
s->GB28181();
diff --git a/csrc/wrapper.cpp b/csrc/wrapper.cpp
index 721d366..86662a1 100644
--- a/csrc/wrapper.cpp
+++ b/csrc/wrapper.cpp
@@ -52,6 +52,7 @@
,decoder_(nullptr)
,rec_(new rec)
,logit_(false)
+ ,fps_(25)
{
makeTheWorld();
}
@@ -189,6 +190,8 @@
continue;
}
+ fps_ = in->getFPS();
+
int wTime = 1000000.0 / in->getFPS() ;
wTime >>= 1;
logIt("WAIT TIME PER FRAME: %d", wTime);
diff --git a/csrc/wrapper.hpp b/csrc/wrapper.hpp
index 5677ad0..73da823 100644
--- a/csrc/wrapper.hpp
+++ b/csrc/wrapper.hpp
@@ -50,6 +50,8 @@
void CPUDec(){cpu_ = 1;}
void AudioSwitch(const bool a);
void SetRecMinCacheTime(const int mind);
+
+ int GetFPS(){return fps_;}
public: //decoder
void BuildDecoder();
void GetPicDecoder(unsigned char **data, int *w, int *h, int *format, int *length, int64_t *id);
@@ -74,6 +76,7 @@
// 褰曞儚璇锋眰缂撳瓨,绛夊緟runstream鍚庢坊鍔�
std::function<void()> fn_rec_lazy_;
bool logit_;
+ int fps_;
};
uint8_t* Decode(const char *file, const int gb, int *w, int *h);
diff --git a/goffmpeg.go b/goffmpeg.go
index 4fb54af..efaf6cc 100644
--- a/goffmpeg.go
+++ b/goffmpeg.go
@@ -94,3 +94,8 @@
C.wrap_fn_run(unsafe.Pointer(libcffmpeg), h.ffmpeg, in)
}
+
+// FPS fps
+func (h *GoFFMPEG) FPS() int {
+ return int(C.wrap_fn_fps(unsafe.Pointer(libcffmpeg), h.ffmpeg))
+}
diff --git a/libcffmpeg.c b/libcffmpeg.c
index edc7b5c..7c30caf 100644
--- a/libcffmpeg.c
+++ b/libcffmpeg.c
@@ -63,6 +63,14 @@
fn_run(h, input);
}
+int wrap_fn_fps(void *lib, const cffmpeg h){
+ if(!fn_fps){
+ fn_fps = (lib_cffmpeg_fps)dlsym(lib, "c_ffmpeg_get_fps");
+ if (!fn_fps) return 25;
+ }
+ return fn_fps(h);
+}
+
void wrap_fn_run_gb28181(void *lib, const cffmpeg h){
if (!fn_gb28181){
fn_gb28181 = (lib_cffmpeg_gb28181)dlsym(lib, "c_ffmpeg_run_gb28181");
diff --git a/libcffmpeg.h b/libcffmpeg.h
index 10ebfd6..7bc4998 100644
--- a/libcffmpeg.h
+++ b/libcffmpeg.h
@@ -14,6 +14,7 @@
typedef cffmpeg(*lib_cffmpeg_create2)(const char*);
typedef void (*lib_cffmpeg_destroy)(const cffmpeg);
typedef void (*lib_cffmpeg_run)(const cffmpeg, const char*);
+typedef int (*lib_cffmpeg_fps)(const cffmpeg);
typedef void (*lib_cffmpeg_gb28181)(const cffmpeg);
typedef void (*lib_cffmpeg_cpu)(const cffmpeg);
typedef void (*lib_cffmpeg_rec_duration)(const cffmpeg, const int, const int);
@@ -29,6 +30,7 @@
static lib_cffmpeg_create2 fn_create2 = NULL;
static lib_cffmpeg_destroy fn_destroy = NULL;
static lib_cffmpeg_run fn_run = NULL;
+static lib_cffmpeg_fps fn_fps = NULL;
static lib_cffmpeg_gb28181 fn_gb28181 = NULL;
static lib_cffmpeg_cpu fn_cpu = NULL;
static lib_cffmpeg_rec_duration fn_rec_duration = NULL;
@@ -48,6 +50,7 @@
cffmpeg wrap_fn_create2(void *lib, const char *logfile);
void wrap_fn_destroy(void *lib, const cffmpeg h);
void wrap_fn_run(void *lib, const cffmpeg h, const char* input);
+int wrap_fn_fps(void *lib, const cffmpeg h);
void wrap_fn_run_gb28181(void *lib, const cffmpeg h);
void wrap_fn_use_cpu(void *lib, const cffmpeg h);
void wrap_fn_rec_duration(void *lib, const cffmpeg h, const int min, const int max);
--
Gitblit v1.8.0