本文主要是介绍avcodec_copy_context函数引发的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在FFmpeg库中,有一个旧的API函数:avcodec_copy_context,主要的功能就是编码参数上下文的拷贝,函数原型如下:
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
在使用过程中没有发现问题,使用方式如下:
AVCodecContext *ctx = NULL;
//经过一系列的操作,ctx已经被赋值AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264);
if(!codec)...AVCodecContext *ctx_video = avcodec_alloc_context3(codec);
if(!ctx_video)...avcodec_copy_context(ctx_video, ctx);
...
在最后释放的时候,居然出错了:
avcodec_close(ctx);
avcodec_close(ctx_video);//释放它的时候出错,出现部分double free
跟踪avcodec_close发现,是在释放AVCodecContext结构体中的nb_coded_side_data变量引起的错误
所以,在copy上下文之后,加了下面两行代码:
ctx_video->coded_side_data = NULL;
ctx_video->nb_coded_side_data = 0;
不太清楚这个变量的功能。这样操作后,编码正常,且在调用avcodec_close的时候,也没出现double free的错误,暂且这样处理吧。
这篇关于avcodec_copy_context函数引发的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!