Как переопределить функции доступа к памяти (malloc, realloc и т. д.) в libavformat с помощью моих собственных пользовательских функций

Я использую пакет libavformat-dev для получения некоторых свойств медиафайла, таких как битрейт, продолжительность и т. д. Однако я хочу использовать свои пользовательские функции malloc, calloc, realloc вместо системных функций, которые использует libavformat. Есть ли способ зарегистрировать мои пользовательские функции в libavformat?


person java_geek    schedule 29.11.2013    source источник
comment
Посмотрите здесь: linuxforu.com/2011/08/ давайте подключим библиотечную функцию   -  person alk    schedule 29.11.2013
comment
Алк, я думаю, что это тоже мог быть ответ.   -  person peterh    schedule 29.11.2013


Ответы (1)


Библиотека 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

person Arkq    schedule 17.08.2020