Утечка памяти в libavcodec для Windows?
Я использую libavcodec для Windows и avformat_open_input()
кажется, имеет значительную утечку памяти. Если я открою 5000 видео, ОС сообщит о 2 ГБ ОЗУ, которое не было освобождено при выходе из приложения. Вот код:
AVFormatContext *pFormatCtx = NULL;
AVDictionary *dict = NULL;
int result = 0;
av_register_all();
// open the input video file
IntPtr ip = Marshal::StringToHGlobalAnsi(videoFilename);
const char* filename = static_cast<const char*>(ip.ToPointer());
result = avformat_open_input(&pFormatCtx, filename, NULL, &dict);
if (result < 0) {
Marshal::FreeHGlobal(ip);
return result;
}
Marshal::FreeHGlobal(ip);
avformat_close_input(&pFormatCtx);
return result;
Приведенный выше код находится в библиотеке классов, которая вызывается из C#. Я использую управляемый C++ для вызова библиотек libavcodec. Поток C# -> Управляемый C++ -> libavcodec. Я использую DLL и динамическое связывание. Это однопоточное приложение. Когда я использую потоки, как и ожидалось, утечка увеличивается.
Я пробовал следующее:
- Я попробовал пару 32-битных сборок, и утечка памяти была постоянной.
- С помощью
NULL
вместо&dict
, - призвание
avformat_open_input()
с тем же именем файла 5000+ раз, который не пропускает память. - Использование комбинаций
avformat_alloc_context()
а такжеavformat_free_context()
, Я не могу найти комбинацию, которая освобождает память.
1 ответ
Возвращаясь к этому, если кто-то найдет это полезным.
Оказывается, если я просто открываю и закрываю файл, происходит утечка памяти. Однако, если я выполняю такие функции, как (чтение, поиск и т. Д.), Утечки памяти не происходит.