gpt4 book ai didi

c++ - 如何使用 AVPacket 作为局部变量(或所说的临时变量)

转载 作者:行者123 更新时间:2023-12-03 01:11:31 25 4
gpt4 key购买 nike

我的程序从网络接收 aac 音频流,并使用 ffmpeg 解码流,所以我必须将流数据打包到 AVPacket 结构,我使用局部变量来执行此操作,代码如下:

bool OnRecvAACStream(const char * audioDataPtr,int audioDataSize,int64_t tBeg,int64_t tDura)
{
AVPacket pkt_tmp; // local varible
av_init_packet(&pkt_tmp);
pkt_tmp.data = audioDataPtr;
pkt_tmp.size = audioDataSize;
pkt_tmp.pts = tBeg;
pkt_tmp.duration = tDura;

if (avcodec_send_packet(m_codec_ctx, &pkt_tmp) < 0)
{
assert(false);
return false;
}
while (avcodec_receive_frame(m_codec_ctx, m_dec_frame) == 0)
{
// read out dec audio data
...
}

retur true;
}

我只是使用 av_init_packet() 来初始化本地变量,没有调用 av_packet_unref() 和 av_packet_free() ,所以它有效吗?有内存泄漏问题吗?

最佳答案

av_init_packet不分配任何东西。只需为 AVPacket 结构设置默认值,不触及数据和大小字段。您应该跟踪 .data部分,当分配任何内容时,必须在覆盖之前将其释放。
根据上面的代码,你可能想使用 av_frame_free和/或 av_frame_unref , 在你完成当前帧和下一帧之前。

关于c++ - 如何使用 AVPacket 作为局部变量(或所说的临时变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63590275/

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