移植FFMPEG到VS2008系列之一

做音視頻編解碼的人都知道ffmpeg。然而,要想在windows上調試ffmpeg卻不是一件容易的事情。之前也曾經把x264的代碼移植到vs2008上面,具體可以參見我前面的文章。最近終於把ffmpeg的最新代碼完全移植到vs2008環境中來。在移植過程中深深的感覺到codec的多樣性,我雖然在codec領域工作了很多年,但是ffmpeg裏面大多數codec甚至連名字都沒有見過。下面把移植過程中需要注意的問題描述一下。


首先,必須要有堅強的毅力和決心。ffmpeg代碼量超級大,其總共有3千多個文件,將近100w行代碼。移植ffmpeg是一項體力很繁重的活,所以,如果你決定要做,就不要中途放棄。


其次,也是最重要的,就是要掌握方法。ffmpeg代碼採用C99的語法,使得微軟VS開發環境的不兼容導致產生大量的語法錯誤。其次,ffmpeg有些採用的linux下面的庫也會使得windows上沒法編譯的問題。如何快速的修改c99語法成爲移植ffmpeg的關鍵!


工欲善其事,必先利其器。通過正則表達式的強大功能,可以一定程度上解決這一問題。對於精通正則表達式的朋友們,完全可以用某種編程語言,例如python,perl等寫若干個腳本語言,就可以很輕鬆的修改c99的語法爲標準的c89的語法。這樣只需要3,4天的時間完成這項任務。


而我花了將近2個禮拜的時間,其中調試bug花了3天。主要是對於正則表達式不是很在行,只是瞭解一些正則表達式的寫法。也沒有用某種編程語言來操作正則表達式的編程經驗。我使用的正則表達式工具就是常見的文本編輯器UE。


1. 下載最新的ffmpeg源代碼。

我是在github上下載的代碼ffmpeg-master。當我把代碼跑起來之後發現crash了,調試之後發現ffmpeg-master的版本在初始化的時候有幾個bug導致的,對於不熟悉音視頻編解碼的朋友很難修改這些bug。後來我又下載的穩定的ffmpeg1.2的版本,一比較,發現有三分之一的文件不一樣。大概看了下,不一樣的地方大部分都不是很關鍵。我不知道ffmpeg-master的版本是介於1.1和1.2之間的還是高於1.2沒有發佈的版本,也許ffmpeg1.2的版本沒有這些bug。但我已經在master版本中修改的差不多了,所以也沒有必要在1.2的版本上重新改。建議大家下載穩定的ffmpeg1.2的版本。


2. 文件重命名。

    ffmpeg不同的文件夾下面有很多的文件名都是相同的,這在vs2008開發環境下會是個問題。所以,乾脆把所以的文件名都重命名,例如可以都以某個文件夾的前綴。文件太多,不可能一個一個的改。以文件夾libavcodec下面的所有文件爲例說明如下:

2.1 打開dos窗口,切換到libavcodec目錄下面執行DOS命令:

dir *.c /b >>c_files.txt


2.2 UE打開c_files.txt,使用正則表達式執行替換操作,具體看下圖:

         


         在查找什麼方框裏面輸入的正則表達式爲:(?m)(^[\w.]+)

         在替換爲方框裏面輸入的正則表達式爲:rename $1 av_codec_$1

         選中正則表達式 perl選項 不用勾選 只匹配整個詞語和匹配大小寫選項

       

          執行全部替換,保存文件。

2.3  把文件c_files.txt文件後綴改成批處理文件,即c_files.bat。運行這個批處理文件,這樣libavcodec文件夾下面的所 有的文件都變成以av_codec_打頭的文件了。


2.4  用同樣的方法把其它文件夾下面的所有文件重命名。

    


      







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章