不同版本有很大的區別,注意你的版本是不是最新版
解碼優化:
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