Форум программистов, компьютерный форум, киберфорум
Программирование мультимедиа
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 1
Регистрация: 24.01.2023
Сообщений: 20

Ffmpeg, av_frame_free - утечка памяти

28.01.2025, 19:03. Показов 7187. Ответов 2

Студворк — интернет-сервис помощи студентам
Столкнулся с совершенно непонятной проблемой. У меня есть плейер. Последовательность работы в цикле примерно такая:
av_packet_alloc
av_read_frame
avcodec_send_packet
av_frame_alloc
avcodec_receive_frame
тут я обрабатываю полученный кадр, преобразую в нужный мне формат и отправляю на выходное устройство
av_packet_unref
av_frame_free

Всё прекрасно работало. утечек памяти не было (у меня есть машины, где этот плейер работает месяцами). Но сейчас мне нужно перейти в более высокое разрешение и частоту кадров и я упёрся в то, что обработка полученного кадра занимает слишком много времени. Ок, ядер сейчас много, разложу по нескольким потокам и всё будет хорошо.
Соответственно, из цикла убирается av_frame_free. Кадры складываются в очередь и несколькими потоками из этой очереди забираются и обрабатываются. И в конце обработки тем же av_frame_free память освобождается.
И тут я проваливаюсь в какой-то ад, потому что работа av_frame_free в этих условиях становится странной. Иногда всё работает, но течёт память со скоростью примерно мегабайт в секунду. Иногда av_frame_free вдруг начинает дико тормозить и программа тупо перестаёт успевать обрабатывать видео в реалтайм.
Ладно, думаю, может я тупой и av_frame_free нельзя пихать в thread. В очереди к кадру добавляю флажок processed, который ставлю в thread, а освобождение кадров делаю в основном потоке по флажку. Результат точно такой же.
Уже второй день бьюсь и ничего не понимаю. То есть если я освобождаю кадр до того, как шлю следующий пакет в декодер - всё отлично. Если же я "откладываю" полученный из декодера кадр "на потом" и шлю следующий пакет в декодер - всё сходит с ума.
Да, пытался заменить av_frame_free на av_frame_unref не меняет ничего. Гугление не даёт ничего.
Может кто-то с чем-то подобным сталкивался?
Да, я понимаю, что можно просто скопировать данные кадра куда-то себе в основном процессе и спокойно с ними работать. Но это +750МБ/сек копирования памяти просто на ровном месте. Чего хотелось бы избежать.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2025, 19:03
Ответы с готовыми решениями:

Утечка памяти
Добрый день! При создании графического проекта (солнечная система) на базе OpenGL в C++ возникла утечка памяти, которая со временем...

Утечка памяти
Здравствуйте, у у меня есть редактор где каждый кадр обновляется меш на редактируемом объекте и когда я запихиваю в меш рендерер...

Будет ли утечка памяти?
Здравствуйте, имеется: ASTUBaseWeapon* CurrentWeapon = nullptr; CurrentWeapon =...

2
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
03.02.2025, 14:17
An_private, а если с кадром ничего не делать кроме освобождения все равно течет и странности эти вот все? на тот случай если на самом деле он не виноват
0
4 / 4 / 1
Регистрация: 24.01.2023
Сообщений: 20
26.02.2025, 18:00  [ТС]
Лучший ответ Сообщение было отмечено vxg как решение

Решение

Честно говоря - я тогда немного психанул, снёс этот кусок и переписал заново. И всё стало нормально - видимо где-то была какая-то неочевидная ошибка, которая приводила к утечке памяти. Так что - я сам дурак.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2025, 18:00
Помогаю со студенческими работами здесь

Утечка памяти и SFML
Здравствуйте! Столкнулся с проблемой того, что при выводе текста через SFML и поток ostream у меня начинает быстро забиваться оперативка, а...

WglMakeCurrent утечка памяти
Подскажите, происходит утечка памяти, при обновлении информации в окне OpenGL Переменные класса HWND child_window; HDC hDC; ...

SDL утечка памяти
Всем доброго времени суток! Написал функцию (использую sdl и си): bool Draw_Text(TScene* Scene, int x, int y, int textsize, char...

Утечка памяти из Unity
Всем привет!!! При работе с Unity переполняется память как бороться с этой проблемой не знаю, может кто подскажет как побороть это и где...

Утечка памяти openGL
Здравствуйте. Начал изучать openGL и возникла проблема с выводом текста. Нашел класс по выводу текста в картинку и немного видоизменил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru