gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:25:09 24 4
gpt4 key购买 nike

我现在正在处理一个 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com