专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 多媒体/流媒体开发

关于ffmpeg解码的几个基础性的有关问题

发布时间:2011-06-27 19:31:09 文章来源:www.iduyao.cn 采编人员:星星草
关于ffmpeg解码的几个基础性的问题
在使用ffmpeg解码文件时,先为AVFormatContext 变量分配内存。
AVFormatContext *pFileFormatCtx=av_alloc_format_context()
然后调用av_open_input_file打开文件
再调用av_find_stream_info获取流信息
再调用avcodec_find_decoder和avcodec_open等函数获取解码信息;

此时再定义一个AVFormatContext 变量,并分配内存;
AVFormatContext *pSecondormatCtx=av_alloc_format_context()

然后将第一个变量的内存拷贝给第二个变量
memcpy(pSecondormatCtx,pFileFormatCtx,sizeof(AVFormatContext));

按说此时第二个变量应该就有自己的内存及成员了,可我测试发现,如果此时我调用av_close_input_file(pFileFormatCtx)关闭文件,结果发现,第二个变量的解码相关的成员都变为无效值了,这是怎么回事?我明明已经为第二个变量分配了内存呀?

还有个问题就是在程序中自己调用avcodec_alloc_context或av_alloc_format_context()等函数分配的内存,在程序关闭时,用手动释放吗?我发现好像自己不释放也没有内存泄漏发生。如果需要释放,调用什么函数?

------解决方案--------------------
because you do not provide the actual copy constructor

your problem is same as the following scenario:

void *ptr = malloc(100);
void *ptr2 = NULL;
if (ptr) {
memset(ptr,0,100);
ptr2 = ptr;
}
...
if (ptr)
free(ptr);
...
//still use ptr2
...
//crash, or wrong
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: