首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

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

2012-02-29 
关于ffmpeg解码的几个基础性的问题在使用ffmpeg解码文件时,先为AVFormatContext 变量分配内存。AVFormatCon

关于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

热点排行