Утечка памяти в 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 ответ

Решение

Возвращаясь к этому, если кто-то найдет это полезным.

Оказывается, если я просто открываю и закрываю файл, происходит утечка памяти. Однако, если я выполняю такие функции, как (чтение, поиск и т. Д.), Утечки памяти не происходит.

Другие вопросы по тегам