video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2019-11-13 64fed650d429fdbdfa4011956a2c057dd0348914
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
 
#ifdef __cplusplus
extern "C"{
#endif
 
#include "../cffmpeg.h"
#include <string.h>
 
#ifdef __cplusplus
}
#endif
 
#include "csrc/wrapper.hpp"
 
using namespace cffmpeg_wrap;
 
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){
    Wrapper *s = (Wrapper*)h;
    delete s;
}
 
void c_ffmpeg_run(const cffmpeg h, const char *input){
    Wrapper *s = (Wrapper*)h;
    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();
}
 
void c_ffmepg_use_cpu(const cffmpeg h){
    Wrapper *s = (Wrapper*)h;
    s->CPUDec();
}
 
 
//////passive api
void c_ffmpeg_set_record_duration(const cffmpeg h, const int min, const int max){
    Wrapper *s = (Wrapper*)h;
    s->SetRecMinCacheTime(min);
}
 
void c_ffmpeg_build_recorder(const cffmpeg h, const char* id, const char *dir, const int64_t fid, int mind, int maxd, int audio){
    Wrapper *s = (Wrapper*)h;
 
    bool a = audio == 0 ? false : true;
    s->BuildRecorder(id, dir, fid, mind, maxd, a);
}
 
void c_ffmpeg_fire_recorder(const cffmpeg h, const char* sid, const int64_t id){
    Wrapper *s = (Wrapper*)h;
    s->FireRecorder(sid, id);
}
 
void c_ffmpeg_get_info_recorder(const cffmpeg h, int *index, char** recid, int *recidLen, char **fpath, int *pathLen){
    Wrapper *s = (Wrapper*)h;
    int i;
    std::string p(""), id("");
    s->GetInfoRecorder(id, i, p);
 
    // printf("cffmpeg get info : index : %d, file : %s, recid: %s\n", i, p.c_str(), id.c_str());
 
    *index = i;
    
    *pathLen = p.length();
    char *path = (char*)malloc(*pathLen + 1);
    memcpy(path, p.c_str(), *pathLen);
    path[*pathLen] = '\0';
    *fpath = path;
 
    *recidLen = id.length();
    char *rid = (char*)malloc(*recidLen + 1);
    memcpy(rid, id.c_str(), *recidLen);
    rid[*recidLen] = '\0';
    *recid = rid;    
}
 
void c_ffmpeg_build_decoder(const cffmpeg h){
    Wrapper *s = (Wrapper*)h;
    s->BuildDecoder();
}
 
void* c_ffmpeg_get_pic_decoder(const cffmpeg h, int *wid, int *hei, int *format, int *length, int64_t *id){
    Wrapper *s = (Wrapper*)h;
    unsigned char *data = NULL;
    s->GetPicDecoder(&data, wid, hei, format, length, id);
    return data;
}
 
void* c_ffmpeg_get_avpacket(const cffmpeg h, int *size, int *key){
    Wrapper *s = (Wrapper*)h;
    unsigned char *data = NULL;
    s->GetPacket(&data, size, key);
    return data;
}
 
/////////////////////test
void* c_ffmpeg_decode(const char *file, const int gb, int *wid, int *hei){
    return Decode(file, gb, wid, hei);
}
 
// pic encoder
void *c_ffmpeg_create_encoder(const int w, const int h, const int fps, const int br, const int scale_flag, const int gi, const int fmt, const char *file){
    return CreateEncoder(w, h, fps, br, scale_flag, gi, fmt, file);
}
 
void c_ffmpeg_destroy_encoder(void *h){
    DestroyEncoder(h);
}
 
int c_ffmpeg_encode(void *hdl, uint8_t *in, const int w, const int h, uint8_t **out, int *size, int *key){
    return Encode(hdl, in, w, h, out, size, key);
}
 
void *c_ffmpeg_create_conv(const int srcW, const int srcH, const int srcFormat,
                          const int dstW, const int dstH, const int dstFormat, const int flag){
    return CreateConvertor(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flag);
}
 
void *c_ffmpeg_conv(void *h, uint8_t *in){
    return Convert(h, in);
}
 
void c_ffmpeg_destroy_conv(void *h){
    DestoryConvertor(h);
}