FFMPEG, C ++, утечка памяти, что я делаю не так? - PullRequest
0 голосов
/ 10 сентября 2018

Итак, я построил это приложение, которое использует IP-камеры IP-камеры и делает с ним забавные вещи, однако у меня есть небольшая утечка памяти, которую я только сейчас зафиксировал.

Если я просто запустилэто

while (av_read_frame(input_format_context, &input_packet) >= 0) {}

Это будет только расти, расти, расти, расти ... Так чего мне не хватает?

Я использую порт Windows ffmpeg, и моя версия - 58.9.100.0.это будет утечка в самом FFMPEG?

1 Ответ

0 голосов
/ 10 сентября 2018

Из документации:

Если pkt-> buf равен NULL, то пакет действителен до следующего av_read_frame () или до avformat_close_input (). В противном случае пакет действует до бесконечности. В обоих случаях пакет должен быть освобожден с av_packet_unref, когда он больше не нужен.

Как то так?

 AVPacket *pPacket = av_packet_alloc();
 if (!pPacket)
 {
    logging("failed to allocated memory for AVPacket");
    return -1;
 }

 while (av_read_frame(pFormatContext, pPacket) >= 0)
 {
    auto  response = decode_packet(pPacket, pCodecContext, pFrame);
    if (response < 0)
        break;
    }

    av_packet_unref(pPacket);
  }

PS: Не будьте жертвой культа груза, изучите исходный код. это ни в коем случае не полный пример. Есть рабочие проекты, которые используют ffmpeg.

...