XvidをVC2005でビルドする [C++]
前置き
MonsterXでHuffyuvを使ってキャプチャーをすると1分で2Gとか平気で使うので我が家のPCにやさしくない。そこで、DivX6.7.0でエンコードして見るとビットレートが~3000kbpsならコマ落ち無しでうまく動いてくれた。CODECの表示に 2 processorsとなってるので並列処理も入っているのだろう。画質も文句無い。で、ふとXvidならどうかと思ってみたところ、ドロップフレームのほうが多い始末。そこで、なんでそんなに重いのか、ちょっとソースを見てみようとソースを落としてみたが、コンパイルしてみたところエラーが出てコンパイルできなかった
必要なもの
・Xvidソースコード(http://www.xvid.org/)
1.1.3はコンパイルできないので、修正のために最新版も落とす
・nasm(http://nasm.sourceforge.net/)
落としたVerは2.0.0
コンパイル手順
・xvidcore-1.1.3\build\win32\xvidcore.dswを開き、すべてコンバートする
・すぐに閉じる
・libxvidcore.vcprojをテキストエディタで開き以下の置換をする
-I"$(InputDir)"\ を -I$(InputDir) に置換
nasm を nasm -Xvc -w-orphan-labels に置換
・エディタを保存して閉じる
・xvidcore-1.1.3\src\dct\x86_asm\fdct_mmx_skal.asmを、最新版のものと入れ替える
・xvidcore.slnを開く
・intptr_tで検索をかけると、portab.hでdefineしてある場所があるので、そこの部分を最新版からマージするか、コメントアウトをする
・ビルドを行う
・_CRT_SECURE_NO_WARNINGSを適宜追加する
・なぜかcolorspace_yuyv_mmx.asmのアセンブリに失敗するが、単独でコンパイルを選ぶとコンパイルできる・・・
とりあえず、これでOK.他にもVC2005の余計なStuffをOffにしないといけないかもしれないが、コンパイルは通る。
#最新版をビルドする場合には、上記に加え、build/win32にあるプロジェクトファイルをすべてテキストエディタで開き、改行コードをLFからCR+LFにする・・・(1.1.3は大丈夫)
最新の1.2.0-devと1.1.3を比較してみた
ざっとみたところ
・SMP対応
・SSE3対応
・intptr_tが定義されていて、コンパイルでエラーが出る部分の修正
・fdct_mmx_skal.asmがアセンブルできないのを修正
1.2.0-devのコードの一部でエラーのみ取り除いて、とりあえずコンパイルはできるようになった。
にしてもコンパイルできないソースを公開して放置しつつ、次の開発のみ進んでるところは、OpenSource&外人らしい。
その他
・最新版のプロジェクトファイルを見ると、どうもIntel C++ Compilerを使うようになっているようだ
・ベンチマークのソースで、CバージョンでH263の処理を2回やってるところあるが、片方はmpegではなかろうか・・・コピペしてそのままって気がする
・MMXで動作させるためか、動画データは16ビット処理のようだ・・・
1.2.0で速くなってたりするかとかはまた今度。
コメント 0