c++ - 如何新建和删除 AVPacket?

标签 c++ ffmpeg memory-leaks

我现在正在处理一个 FFmpeg 项目,我必须存储 AVPacket 的数据来自av_read_frame , 并将数据填充到新的 AVPacket用于后续解码。
这是我的问题:当我尝试新建和释放 AVPacket 时,内存泄漏总是发生。
我只是在做一个简单的测试:

for(;;) {
    AVPacket pkt;
    av_new_packet(&pkt, 1000);
    av_init_packet(&pkt);
    av_free_packet(&pkt);
}
我究竟做错了什么?

最佳答案

  • av_new_packet创建一个数据包并分配数据
  • av_init_packet将所有数据包成员设置为默认值,并将数据指针设置为 NULL ,
    泄漏在这里
  • av_free_packet清除所有可见成员,但
    您的数据已经泄露

  • 如果你想让FFmpeg为你分配数据,不要调用av_init_packet .如果您想自己处理数据,请在堆栈上分配数据包对象并自己设置数据(并自己释放):
    AVPacket pkt;
    av_init_packet(&pkt);
    pkt.data = dataBuffer;
    pkt.size = dataBufferSize;
    // use your packet
    // free your dataBuffer
    

    关于c++ - 如何新建和删除 AVPacket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25438861/

    相关文章:

    c++ - 选择什么标准容器(如果有)?

    audio - FFmpeg 串联,最终输出中没有音频

    python - 使用 Google Colab 和 FFmpeg 对同一文件夹中的多个文件进行编码

    c++ - 用于查找不匹配的大括号/预处理器指令的提示和工具

    c++ - 通过泊松过程生成随机到达 C++

    java - Scala 和进程中的内存泄漏

    ios - 为什么ios上fread不释放内存

    java - 已编译的 Groovy 类 - GC

    c++ - Linux 上缺少包含文件的编译器选项

    php - windows VC9 ffmpeg 和魔法棒