2

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

4

1 回答 1

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

于 2020-08-17T20:13:58.677 回答