a
554325746@qq.com
2019-07-15 e6c8834e2aa2f3c1f46e588d94ae8ec6aa6c8dec
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
#ifdef __cplusplus
extern "C"{
#endif
 
#include <dlfcn.h>
#include <stdlib.h>
#include <stdio.h>
 
#include "libcffmpeg.h"
 
#ifdef __cplusplus
}
#endif
 
#define release_if_err(fn, lib) do{if(!fn){dlclose(lib); return NULL;}}while(0)
 
libcffmpeg init_libcffmpeg(const char *so_file){
    libcffmpeg lib = dlopen(so_file, RTLD_LAZY);
    if(lib){
        fn_create = (lib_cffmpeg_create)dlsym(lib, "c_ffmpeg_create");
        release_if_err(fn_create, 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");
        release_if_err(fn_run, lib);
        fn_recorder = (lib_cffmpeg_recorder)dlsym(lib, "c_ffmpeg_build_recorder");
        release_if_err(fn_recorder, lib);
        fn_fire_recorder = (lib_cffmpeg_fire_recorder)dlsym(lib, "c_ffmpeg_fire_recorder");
        release_if_err(fn_fire_recorder, lib);
        fn_info_recorder = (lib_cffmpeg_info_recorder)dlsym(lib, "c_ffmpeg_get_info_recorder");
        release_if_err(fn_info_recorder, lib);
        fn_decoder = (lib_cffmpeg_decoder)dlsym(lib, "c_ffmpeg_build_decoder");
        release_if_err(fn_decoder, lib);
        fn_decoder_pic = (lib_cffmpeg_pic)dlsym(lib, "c_ffmpeg_get_pic_decoder");
        release_if_err(fn_decoder_pic, lib);
        fn_active_recorder = (lib_cffmpeg_active_recorder)dlsym(lib, "c_ffmpeg_active_recorder");
        release_if_err(fn_active_recorder, lib);
        fn_active_decoder = (lib_cffmpeg_active_decoder)dlsym(lib, "c_ffmpeg_active_decoder");
        release_if_err(fn_active_decoder, lib);
        fn_dec_jpeg = (lib_cffmpeg_decode_jpeg)dlsym(lib, "c_ffmpeg_decode_jpeg");
        release_if_err(fn_dec_jpeg, lib);
    }else{
        printf("dlopen - %s\n", dlerror());  
    }
    return lib;
}
 
void release_libcffmpeg(libcffmpeg lib){
    if(lib){
        dlclose(lib);
    }
}
 
cffmpeg wrap_fn_create(){
    return fn_create();
}
 
void wrap_fn_destroy(const cffmpeg h){
    fn_destroy(h);
}
 
void wrap_fn_run(const cffmpeg h, const char* input){
    fn_run(h, input);
}
 
void wrap_fn_recorder(const cffmpeg h, const char* dir, int mind, int maxd){
    fn_recorder(h, dir, mind, maxd);
}
 
void wrap_fn_fire_recorder(const cffmpeg h, const int64_t id){
    fn_fire_recorder(h, id);
}
 
char* wrap_fn_info_recorder(const cffmpeg h, int* index, int* length){
    return fn_info_recorder(h, index, length);
}
 
void wrap_fn_decoder(const cffmpeg h){
    fn_decoder(h);
}
 
void* wrap_fn_decoder_pic(const cffmpeg h, int* wid, int* hei){
    return fn_decoder_pic(h, wid, hei);
}
 
void wrap_fn_active_recorder(const cffmpeg h, const char* dir, int mind, int maxd, rec_func fn){
    fn_active_recorder(h, dir, mind, maxd, fn);
}
 
void wrap_fn_active_decoder(const cffmpeg h, dec_func fn){
    fn_active_decoder(h, fn);
}
 
void* wrap_fn_decode_jpeg(const cffmpeg h, const char* file, int* wid, int* hei){
    return fn_dec_jpeg(h, file, wid, hei);
}