码迷,mamicode.com
首页 > 其他好文 > 详细

使用ffmpeg解码 需要注意的内存泄漏问题

时间:2018-06-17 21:24:33      阅读:745      评论:0      收藏:0      [点我收藏+]

标签:结束   tps   https   数据   mpeg   run   avpacket   失误   .com   

说说项目中遇到的两点失误:

1. AVFrame结构,av_frame_alloc申请内存,av_frame_free释放内存。容易混淆的是av_frame_unref,它的作用是释放音视频数据资源,而av_frame_free是释放所有资源,包括音视频数据资源和结构体本身的内存。可以从源码中看到,av_frame_free函数体内是先调用了av_frame_unref释放数据缓存,再free本身结构体内存。

2. AVPacket结构,比较神奇的是,av_read_frame执行过程中,内部为形参pkt自动申请一块缓存用来存储音视频数据,而释放资源却由我们自己调用av_free_packet来释放缓存。从源码分析得知,当av_read_frame返回值不小于0时,内部会进行缓存操作,需要外界释放;当返回值小于0时,内部会进行缓存并释放,或者不进行缓存,由数据本身损坏或正常结束来决定。

相关源码可以参看:

https://github.com/FFmpeg/FFmpeg/blob/master/libavutil/frame.c

https://www.ffmpeg.org/doxygen/0.6/avpacket_8c-source.html

https://ffmpeg.org/doxygen/trunk/libavformat_2utils_8c-source.html

https://www.ffmpeg.org/doxygen/2.7/libavcodec_2utils_8c_source.html

使用ffmpeg解码 需要注意的内存泄漏问题

标签:结束   tps   https   数据   mpeg   run   avpacket   失误   .com   

原文地址:https://www.cnblogs.com/jiu0821/p/9193647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!