我使用libavformat-dev包来获取比特率,持续时间等媒体文件属性。但是,我想使用我的自定义malloc,calloc,realloc函数来代替libavformat使用的系统函数。有没有办法在libavformat中注册自定义函数?
答案 0 :(得分:0)
FFmpeg库使用带有“ av_”前缀的函数名进行内存管理。您可以在应用程序中简单地重载这些功能,因此您的版本将由运行时链接程序使用,例如:
void *av_malloc(size_t size) {
fprintf(stderr, "Hijacking FFmpeg malloc(): Requested %zd bytes\n", size);
return malloc(size);
}
FFmpeg源代码中的注释:
如果要使用自己的功能覆盖这些功能 实现(不推荐),您必须将libav *链接为 动态库,并从链接器标志中删除-Wl,-Bsymbolic。 请注意,这会降低性能。
参考: https://ffmpeg.org/doxygen/3.1/group__lavu__mem.html https://ffmpeg.org/doxygen/3.1/mem_8c_source.html#l00260