video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2020-07-24 f93ee1a42e8c47e472332287b7350b66a6b0fa11
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
142
143
144
145
146
147
148
149
150
151
152
153
154
 
#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();
}
 
char * c_ffmpeg_get_gb28181_pic(const char *rtspUrl, int *retDataLen){
    char * retData = (char *)malloc(sizeof(char) * 3000000);
    int flag = GetGb28181Pic(rtspUrl, retData, retDataLen);
    if(flag == -1){
        free(retData);
        *retDataLen = 0;
        return NULL;
    }
 
    return retData;
}
 
void c_ffmepg_use_cpu(const cffmpeg h){
    Wrapper *s = (Wrapper*)h;
    s->CPUDec();
}
 
 
//////passive api
void c_ffmpeg_open_recorder(const cffmpeg h){
    Wrapper *s = (Wrapper*)h;
    s->OpenRecorder();
}
void c_ffmpeg_set_record_duration(const cffmpeg h, const int min, const int max){
    Wrapper *s = (Wrapper*)h;
    s->SetRecMinCacheTime(min, max);
}
 
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);
}
 
int c_ffmpeg_fire_recorder(const cffmpeg h, const char* sid, const int64_t id){
    Wrapper *s = (Wrapper*)h;
    return s->FireRecorder(sid, id);
}
 
int 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("");
    int ret = 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;    
    return ret;
}
 
void c_ffmpeg_build_decoder(const cffmpeg h){
    Wrapper *s = (Wrapper*)h;
    s->OpenDecoder();
}
 
int c_ffmpeg_get_pic_decoder(const cffmpeg h, unsigned char **data, int *wid, int *hei, int *format, int *length, int64_t *id){
    Wrapper *s = (Wrapper*)h;
    return s->GetPicDecoder(data, wid, hei, format, length, id);
}
 
void c_ffmpeg_close_stream(const cffmpeg h){
    Wrapper *s = (Wrapper*)h;
    s->CloseStream();
}
 
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;
}
 
int c_ffmpeg_get_avpacket2(const cffmpeg h, unsigned char **data, int *size, int *key){
    Wrapper *s = (Wrapper*)h;
    return s->GetPacket(data, size, key);
}
 
void c_ffmpeg_release_buf(void* buf){
    if (buf){
        free(buf);
    }
}
 
// pic encoder
void *c_ffmpeg_create_encoder(const int w, const int h, const int fps, const int br, const int pix_fmt, const int scale_flag, const int gi){
    return CreateEncoder(w, h, fps, br, pix_fmt, scale_flag, gi);
}
 
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);
}