Использование памяти FFMPEG или утечки памятиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Использование памяти FFMPEG или утечки памяти

Сообщение Anonymous »

Я написал простую программу для получения данных о форме аудиосигнала, которая использует ffmpeg версии 6.1. И программа работает нормально. Но у меня возникла проблема: при запуске программы система сообщает об использовании около 6 МБ памяти, но когда я вызываю функцию и очищаю выделенный ресурс, система сообщает об использовании 9 МБ памяти. По моей теории после очистки должно снова стать 6МБ. [Я уверен, что я освободил AVPacket при чтении потока и AVFrame для декодирования.] Мой вопрос: это нормально или нет?

Код: Выделить всё

int main(int argc, char *argv[])
{
// breakpoint here: ~= 6MB
get_audio_waveform();
// breakpoint here: ~= 9MB
}
Использованная мной структура ffmpeg:

Код: Выделить всё

AVFormatContext*    p_input_fmt_ctx = nullptr;
AVCodecContext*     p_input_cdc_ctx = nullptr;
SwrContext*         p_resampler_ctx = nullptr;
AVAudioFifo*        p_audio_fifo    = nullptr;
uint8_t**           p_converted_input = nullptr;
uint8_t**           p_converted_output = nullptr;
< /code>
func officup: < /p>
void _cleanup()
{
avformat_close_input(&p_input_fmt_ctx);
avcodec_free_context(&p_input_cdc_ctx);
swr_free(&p_resampler_ctx);

if (p_audio_fifo)
{
av_audio_fifo_reset(p_audio_fifo);
av_audio_fifo_free(p_audio_fifo);
p_audio_fifo = nullptr;
}

if (p_converted_input)
{
av_freep(&p_converted_input[0]);
free(p_converted_input);
p_converted_input = nullptr;
}

if (p_converted_output)
{
av_freep(&p_converted_output[0]);
free(p_converted_output);
p_converted_output = nullptr;
}
}
По моему мнению, если эта функция имеет утечки памяти около 3 МБ [6 МБ -> 9 МБ]. когда я запускаю эту функцию 5 раз, утечка памяти должна составлять около 15 МБ. [6 МБ -> 21 МБ]. Но когда я запускаю эту функцию 5 раз. После этого система просто сообщает об использованной памяти 10-11. Я сомневаюсь, что программа использует библиотеку времени выполнения (т. е. libc или эквивалентную), и библиотека выделяет часть памяти для собственных нужд? Я не знаю, какой шаг неправильный! :(


Подробнее здесь: https://stackoverflow.com/questions/793 ... mory-leaks
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»