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