Я создаю объект AVFrame с помощью функции av_frame_alloc() и очищаю его с помощью av_frame_free(&frame), который внутренне вызывает av_frame_unref(), но он не очищает память должным образом. Размер кучи моего приложения растет экспоненциально во время выполнения.
Не работает:
AVFrame* frame = av_frame_alloc();
av_frame_free(&frame);
Работающий:
AVFrame* frame = av_frame_alloc();
av_free(frame->data[0]);
Насколько я знаю, av_frame_free() вызывает av_freep(), который вызывает av_free() для освобождения динамической памяти. Память очищается, если я использую av_free(frame->data[0]) напрямую вместо av_frame_free(&frame)
av_frame_unref(frame)
, а затемav_frame_free(&frame)
. - person the kamilz   schedule 02.04.2019av_frame_copy_props
в следующей строке или вашformat_converter_
. Вам лучше переключиться на простой C и проверить пошагово (вручную освобождая). Затем вернитесь к умным указателям (C++). - person the kamilz   schedule 02.04.2019