如何解决如何将AVPacket用作局部变量或所说的临时变量
我的程序从网络接收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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。