ffmpeg优化

爱茂勋
2023-12-01


不同版本有很大的区别,注意你的版本是不是最新版

解码优化:
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秒的位置 

我对MMX优化没有研究,不过/libavcodec/x86里有很多针对X86平台的汇编优化,或许你可以用到。另外,不要局限在FFMPEG, 现在GOOGLE推出的OPENCORE里的H264解码器效率比FFMPEG高很多,可以试试这个base :)

http://blog.csdn.net/lius1984/article/details/4167392


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:

[plain] view plain copy

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的优化上挣扎呀。

http://www.rosoo.net/a/201003/8943.html

http://blog.csdn.net/linzhiji/article/details/6750791

通过sdl显示视频的过程如下:SDL_Init -- SDL_SetVideoMode -- SDL_CreateYUVOverlay -- SDL_LockYUVOverlay  -- SDL_DisplayYUVOverlay -- SDL_UnlockYUVOverlay 。


没有调用主线程去SDL_DisplayYUVOverlay.

sws_scale是新版ffmpeg的函数,替代了img_convert




“双语播放器”已在app store上架,欢迎大家前去下载(主要用于看电影,学英语,程序员一定要学好英语!)

这里是链接:

https://itunes.apple.com/cn/app/shuang-yu-bo-fang-qi-kan-dian/id950279764?mt=8


 类似资料: