為了要使ffmpeg要能在davinici(上面的arm是armejs 屬於armv5e的instruction)上面跑
我必須要尋找看看在ffmpeg裡面哪些部份有用到硬體的加速
不管是dsp或是mmx或sse等等的 我看看有哪些是可以有用到硬體加速的
我看的是ffmpeg 0.5的版本 (不是svn上面的版本)
目前才資料夾方面來看
基本上從top的資料夾看應該只有兩個資料夾有硬體相關的code
libavutil跟libavcodec這兩個
而在libavutil中 不管是哪一個硬體架構都只有一個檔案bswap.h
在這幾個檔案主要是處理endian的問題 雖然說可以用c code來完成
但是其實也可以用cpu提供的instruction來完成 這會更快
像其中個bswap裡面的function是bswap_32就是將32bit的變數轉換endian
如果是armv6的話 因為有armv6提供的instruction rev就可以用一個instruction來完成
這樣就可以加速程式了
在arch這邊我看到了 沒看過的arch就順便查一下
bfin是blackfin 這種processor 沒看過耶
sh4這是hitachi 發展的cpu 網路上可以查 Renesas superH
這裡他區分arch dependent的code的方式是在bswap.h的檔案中
根據config的macro來決定include哪一個arch
我的arm architecutre的manual在這裡下載的
http://www.arm.com/miscPDFs/14128.pdf
接下來是看libavcodec的部份
先看一下這資料夾底下 在這個底下 有一些資料夾
我稍微看了一下 發現大部分都是arch的名稱 除了mlib不知道是什麼
我稍微查了一下 這是hp的一個 數學lib耶 不想看下去了
在看這一部份的code之前 我發現了ffmpeg自己寫得一份文件
在(ffmpeg top directory)/doc/optimization.txt裡面
他有提到要怎麼做optimization.txt大部分的最佳化在x86里面都有做
可以先看x86的最佳化 就知道其他最佳化是怎麼做的
我開始看arm相關的optimization的部份
首先看到一個有趣的東西是neon 這是arm新推出來的東西
這是提供一些SIMD的instruction 不過我找不到文件可以看
但是因為davinici的MPU沒這麼新 就先不用看這部份
接下來我又看到另一樣東西iwMMXt 這應該是intel的processor才會有的東西
這是像intel普通的processor才會有的MMX
不過davinici沒有
目前就看到這裡 其他之後再看
沒有留言:
張貼留言