video analysis2.0拆分,ffmpeg封装go接口库
chenshijun
2019-07-17 803388b511d31b9e25f6829298bb12e06323474c
libcffmpeg.c
@@ -41,6 +41,14 @@
        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);
        fn_create_encoder = (lib_cffmpeg_create_encoder)dlsym(lib, "c_ffmpeg_create_encoder");
        release_if_err(fn_create_encoder, lib);
        fn_destroy_encoder = (lib_cffmpeg_destroy_encoder)dlsym(lib, "c_ffmpeg_destroy_encoder");
        release_if_err(fn_destroy_encoder, lib);
        fn_encode = (lib_cffmpeg_encode)dlsym(lib, "c_ffmpeg_encode");
        release_if_err(fn_encode, lib);
    }else{
        printf("dlopen - %s\n", dlerror());  
    }
@@ -99,4 +107,24 @@
void* wrap_fn_decode_jpeg(const cffmpeg h, const char* file, int* wid, int* hei){
    return fn_dec_jpeg(h, file, wid, hei);
}
}
// for encoder
cencoder wrap_fn_create_encoder(const int w, const int h, const int fps, const int br, const int scale_flag, const int gi){
    return fn_create_encoder(w, h, fps, br, scale_flag, gi);
}
void wrap_fn_destroy_encoder(const cencoder h){
    fn_destroy_encoder(h);
}
void* wrap_fn_encode(cencoder hdl, void *in, const int w, const int h, int *out_size, int *key){
    uint8_t *out = NULL;
    const int flag = fn_encode(hdl, (uint8_t*)in, w, h, &out, out_size, key);
    if (flag > 0 && out != NULL) {
        return out;
    }
    *out_size = 0;
    *key = 0;
    return NULL;
}