记录备忘(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就能解决的