移植ffmpeg到VC環境心得

maojunxu發表於2018-03-10

所有想學習ffmpeg的網友有福了,大名鼎鼎的ffmpeg,移植到Windows的VC6版本全部開源,編譯環境為VC6+SP5+VCPP5。別忘記了頂貼哦。

移植ffmpeg到windows,主要的修改是ffmpeg中VC6不支援C99語法,簡單移植步驟如下:

1:首先裝好Linux、VMware和SDL,配置好smb,在Linux下編譯通過,驗證能正確的Run。

2:把Linux下相應目錄的所有檔案通過smb拖到Windows,以後的修改移植都在Windows下進行。

3:對照所有同名的.c檔案和.o檔案,如果有.c檔案沒有對應的同名.o檔案,說明此.c檔案沒有編譯,是多餘的,可直接刪除。不過我的習慣是在此檔案後加.old字尾來標示,這類檔案有幾十個。注意有幾個.c檔案是被include在其他.c檔案中,因此沒有.o檔案,不可刪除,我的習慣是把這類檔案加.inc字尾,並且修改相應include的檔名。這類檔案共計有 jpeg_ls.c.inc,mdec.c.inc,motion_est_template.c.inc,svq3.c.inc和wmv2.c.inc。

4:修改config.h檔案,關閉掉MMX/SSE2等彙編加速開關。定義CONFIG_WIN32標示目標系統為WIN32。

5:刪掉目錄下所有Linux編譯生成的中間檔案,包括.o檔案,.d檔案,還有Linux下的可執行檔案。 如果怕刪錯了,就做好備份。

6:現在用VC6建一個工程檔案,把所有檔案的.c和.h檔案加入到工程中,不包括ffmpeg.c/ffserver.c檔案,不包括改了字尾名的.old檔案和.inc檔案。

    注意在libavcodec和libavformat目錄下有些同名的.c檔案,為區別同名.c檔案,我的習慣是libavcodec目錄下的檔名加_codec,libavformat目錄下的檔名加_format。

7:為避免思維過多的切換,一次只處理一個方面的內容。首先搜查所有的AVCodec,對照.h檔案中的定義改C99語法,通常是填一些NULL或0之類的值,接著搜查並處理所有的AVInputFormat,最後搜查並處理所有的AVOutputFormat。

8:搜查並處理所有AVRational語法。

9:至此,基本上主要的修改已經完成,剩下的主要有 動態陣列和一些陣列初始化,函式實參初始化等。

10:一維的動態陣列比較好改,多維的動態陣列比較困難,但是多維的動態陣列多半用於編碼,如果只要解碼可以簡單的註釋掉。

11:陣列初始化和函式實參初始化只需要多加一個臨時變數,很簡單的修改。

12:有些.h檔案在VC6中找不到,有些可以從Linux中拷貝,也可以自己簡單定義。最後編譯修改.c檔案的時候,一個一個的編譯,一個一個的修改,沒必要全部編譯。

最後祝大家好運,移植順利。開源的ffmpeg 是 51.8.0的版本,我大約修改了5天左右。

http://files.cnblogs.com/mcodec/ffmpeg.51.8_vc6.rar


相關文章