如何使用我自己的自定义函数覆盖libavformat中的内存访问函数(malloc,realloc等)

时间:2013-11-29 07:07:36

标签: c ffmpeg mpeg libavcodec libavformat

我使用libavformat-dev包来获取比特率,持续时间等媒体文件属性。但是,我想使用我的自定义malloc,calloc,realloc函数来代替libavformat使用的系统函数。有没有办法在libavformat中注册自定义函数?

1 个答案:

答案 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