Я использую пакет libavformat-dev для получения некоторых свойств медиафайла, таких как битрейт, продолжительность и т. д. Однако я хочу использовать свои пользовательские функции malloc, calloc, realloc вместо системных функций, которые использует libavformat. Есть ли способ зарегистрировать мои пользовательские функции в libavformat?
Как переопределить функции доступа к памяти (malloc, realloc и т. д.) в libavformat с помощью моих собственных пользовательских функций
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