ffmpeg优化
不同版本有很大的区别,注意你的版本是不是最新版
解码优化:
1)对IDCT汇编化,并优化VLD的实现
2)根据ARM9 cache & cache line的大小做MB的分组,使得每次可以同时处理多个MB
即 对多个MB在一个循环内做VLD--->IDCT-->MC--.......
3)优化关键代码段的内存访问(MC)
4)不要使用FFmpeg内置的img_convert()做yuv2rgb转换
5)其他更深层次的优化细节可能告诉你,目前也没有用!
基于不同平台的优化,指令集优化,arm
http://blog.csdn.net/huyinguo/article/details/4721212
如何正确使用av_seek_frame实现视频拖放
time=5;//拖放到5秒的位置
ffmpeg->neon->版本-》asm
yasm是汇编编译器,因为ffmpeg中为了提高效率用到了汇编指令,比如MMX和SSE。解决这个问题方面有两个:
1、在网上下载一个yasm.exe并安装在mingw/bin下面,编译代码时你注意看,会发现asm后缀的文件用的编译器是yasm,c文件用的是gcc;
2、不使用汇编指令,在配置时加上,即./configure --disable-yasm
3、yasm下载(非必须):
用mac下的MacPorts下载yasm,前提是系统已经安装了MacProts
Macports安装方法:http://www.ccvita.com/434.html
通过Macports下载并且安装yasm:
sudo port install yasm
yuv转rgb 如果在iPhone 3GS上,可以利用GPU做转换输出
版主找到可行的方法了吗?用opengl画图的话也得转换成rgb格式的吧,而且这个过程很耗时
不过一般LCD控制器支持输入数据是YUV420或YUV422,可以调用系统API来显示。比如Mac OS X的Core Image接口就能接受YUV420的数据类型
多重纹理,和纹理格式可以说没啥关联,这个要看具体的实现。你可以把YUV数据当作RGB载入GLSL,然后shader转换为RGB显示。
用查表法,把YUV转成RGB输出
YUV display in OpenGl
http://stackoverflow.com/questions/1106741/need-help-with-yuv-display-in-opengl
在任何平台上执行sws_scale函数都慢(相对来说)
我在ARM9上执行sws_scale更吓人,根本没法用,后面改用自己写的YUV2RGB函数转换有了一个质的飞越,但是还是达不到要求(解码花了四十多MS,转RGB模式带显示到SDL表面花了七十多MS),每秒能播个8-10帧,还是不带播声音的说。痛苦中,为啥FFMPEG不能发布一个已经优化了的转码版本,让我们这些莱鸟不要在ARM的优化上挣扎呀。
通过sdl显示视频的过程如下:SDL_Init -- SDL_SetVideoMode -- SDL_CreateYUVOverlay -- SDL_LockYUVOverlay -- SDL_DisplayYUVOverlay -- SDL_UnlockYUVOverlay 。
没有调用主线程去SDL_DisplayYUVOverlay.
sws_scale是新版ffmpeg的函数,替代了img_convert