opengl、ffmpeg内存泄露及混编问题(2017-4-20)

来源:互联网 发布:北风网大数据课程 编辑:程序博客网 时间:2024/06/14 07:30

记录备忘(2017-4-20)

ffmpeg

a.
从摄像头获取到数据为yuv422格式,通过ffmpeg库函数或者yuyv转rgb的方式来处理数据,然后用opengl显示。直接用ffmpeg的库来转比较方便,各种格式都有,还有缩放等功能

不过,注意sws_getContext只能调用一次,在初始化时候调用即可,另外调用完后,在析构函数中使用sws_free_Context,将它的内存释放

否则会导致内存一直增长

b.
用sws_scale函数转换出来的图像是上下左右颠倒的,两种处理方法:1.改变传入buffer的数据结构,在转换之前就颠倒过来;2.在opengl渲染的时候改变texture的坐标,用1.0来减去texture的坐标就可以了

opengl

glGenTextures()函数,放到初始化里
这个函数每被调用一次,就给纹理重新分配新的ID,这样重复的次数越多,就占内存越多,最终导致内存泄露

ffmpeg库

a.

在mac app开发中,有个文件需要改为.mm混编

编译器的问题导致ffmpeg的函数成了undefined symbol,这是混编的锅,两种方法:1.不在混编的文件里面调用ffmpeg函数;2.extern “c”

b.

编译出Mac上可以用的ffmpeg库,我直接使用的是ijkplayer提供的源码,在iOS那个目录里面找到iOS的compile-ffmpeg.sh文件里面把编译的选项改为Mac平台支持的i386和x86_64再编译

Mac动态库链接问题

mac动态库要放到指定的位置usr/local/…具体看库的要求,并不是加了header search path和library search path就能解决的

0 0
原创粉丝点击