gpt4 book ai didi

c - 在这个简单的 ffmpeg 示例中,这个指针在哪里被释放?

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

我正在阅读这个简单的 ffmpeg 解码示例: http://ffmpeg.org/doxygen/4.0/decode__video_8c_source.html 。这部分代码引起了我的注意:

while (data_size > 0) {
ret = av_parser_parse2(parser, c, &pkt->data, &pkt->size,
data, data_size, AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0);
if (ret < 0) {
fprintf(stderr, "Error while parsing\n");
exit(1);
}
data += ret;
data_size -= ret;

if (pkt->size)
decode(c, frame, pkt, outfilename);
}
如您所见,它通过了 &pkt->data ,其中 pkt->data 已经是一个指针。所以它传递一个指向指针的指针。因此,它使 pkt->data 在每次调用时都指向一个新分配的数据。然后,将 pkt 传递给 decode: decode(c, frame, pkt, outfilename); 。但是, pkt->data 中的数据永远不会被释放。我没有找到它所在的任何地方。
当代码完成时,它会调用 av_packet_free(&pkt); ,但这还不够,因为在每次调用 av_parser_parse2 时, pkt->data 都指向一个带有新数据的新指针。所有这些新缓冲区在哪里被删除?

最佳答案

FFMpeg 使用引用计数来管理(某些)数据包。本文档AVPacket reference提到 av_free_packet() 只需要显式删除数据包。
寻找 av_packet_unref代码中的引用,这可以解释没有 av_packet_free称呼。

关于c - 在这个简单的 ffmpeg 示例中,这个指针在哪里被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64201922/

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