新聞速報

        

2014年3月3日 星期一

嵌入式程式開發 FFmpeg-0.5  cross compiler asm 程式碼修正

FFmpeg-0.5 ( update )
 
cross compiler( toolchain ) ==> gcc-4.1.0 + glibc-2.3.2
 
第一次產生config檔,第二次正式make
 
執行以下命令,會產生 config.mak 檔案
./configure --enable-cross-compile 
       --cc=arm-linux-gcc 
       --cpu=armv4 
       --arch=arm 
       --enable-gpl 
       --enable-static 
       --disable-shared 
       --enable-small 
       --disable-parsers <不要去使用該參數,轉檔會錯誤>
       --disable-debug
       --disable-network 
       --disable-mmx 
       --disable-iwmmxt 
       --disable-altivec  
       --disable-vhook 
       --disable-ffserver 
       --disable-altivec     
       --disable-amd3dnow 
       --disable-amd3dnowext 
       --disable-mmx 
       --disable-mmx2 
       --disable-sse 
       --disable-ssse3 
       --disable-armv5te 
       --disable-armv6 
       --disable-armv6t2 
       --disable-armvfp 
       --disable-iwmmxt 
       --disable-mmi 
       --disable-neon 
       --disable-vis 
       --disable-yasm 
 
 
這裡有修改一些檔案,因為在make的時候會發生一些asm指令找不到的問題。
 
diff -r ffmpeg-0.5/libavcodec/arm/asm.S  ffmpeg_modify-0.5/libavcodec/arm/asm.S
 24c24
<     .eabi_attribute 24, \val
---
>     @.eabi_attribute 24, \val
 28c28
<     .eabi_attribute 25, \val
---
>     @.eabi_attribute 25, \val
 
diff -r ffmpeg-0.5/libavcodec/arm/dsputil_arm_s.S  ffmpeg_modify-0.5/libavcodec/arm/dsputil_arm_s.S
 641c641
<     push      {r4-r10}
---
>     stmfd      sp!, {r4-r10} @ push      {r4-r10}
 724c724
<     pop       {r4-r10}
---
>     ldmfd      sp!, {r4-r10} @ pop       {r4-r10}
 726c726
<     pop       {r4-r10}
---
>     mov       pc,lr     @ bx       lr
 
 
 
diff -r ffmpeg-0.5/libavcodec/arm/mpegvideo_armv5te_s.S  ffmpeg_modify-0.5/libavcodec/arm/mpegvideo_armv5te_s.S
 39c39
<     push      {r4-r9,lr}
---
>     stmfd      sp!, {r4-r9,lr} @ push      {r4-r9,lr}
 102c102
<     pople      {r4-r9,pc}
---
>     ldmlefd     sp!, {r4-r9,pc} @ pople      {r4-r9,pc}
 116c116
<     pop       {r4-r9,pc}
---
>     ldmfd      sp!, {r4-r9,pc} @ pop       {r4-r9,pc}
 
 

若是用 gcc 4.0 以下的版本 make 編譯 時會出現錯誤訊息:
出現error : unrecognize option: -Wno-pointer-sign
 
vim config.mak 
刪除文字串 -Wno-pointer-sign ,再一次重新 make 編譯 ....
會產生 ffmpeg 可執行檔


 
最後一個步驟會看見 strip ffmpeg 失敗...
改用 arm-linux-strip ffmpeg 成功執行檔瘦身
 
ps:如何確認 ffmpeg 是由正確的 gcc版本編譯出來 ?
當你的 linux 主機有許多版本 toolchain時,常有機會使用到不正確的版本。
傳至實驗版,輸入 ./ffmpeg 可看到 built on Oct 30 2009 13:42:32, gcc: 4.1.0  
 
測試轉檔:
./ffmpeg -i 2004-11-15-1.mpeg -f avi newmovie.avi

沒有留言:

張貼留言