2007-12-18

x264をVCでコンパイルする方法

現在、この情報はobsolateになっています。というのも、x264はC99を使っているため、C89しかサポートしていないVC++ではコンパイルできません。

 x264をVCでコンパイルする方法

 0. 大前提
 ・Visual C++ 2008 Express Editionを入手する。
  ・NASMを入手する。
  ・SVNクライアントをインストールする。Windowsならば、シェル拡張として使える、TortoiseSVNがお勧めだ。

 1. x264のSVNからHEAD revisionを取ってくる。面倒な場合はtarballでも可。

 2. Visual Studioのソリューションファイルを開く。

 3. strtok_rをstrtokに置き換える(たぶん将来的には、マクロで適切に置換されると思う)VCのCRTは最初からスレッドセーフなので問題ない(VC9ではデフォルトのCRTはマルチスレッドDLLになっている。)

 4. ビルドする。
 5. 動画をエンコードする(Windowsなら、AviSynthも使えてヒャッハー)

 追加要素

 ・マルチスレッド対応にする
  http://sourceware.org/pthreads-win32/からpthreadをWindows用に移植したライブラリを入手してコンパイルする。
  ヘッダとライブラリのディレクトリを設定し、マクロ、HAVE_PTHREAD を#defineしてコンパイルする(コンパイラオプションで行うのが簡単)

 未解決要素
 ・mp4出力を可能にする
  GPACを入手して、コンパイルする。パスを適切に設定する。
  MP4_OUTPUT を#defineしてコンパイルすればいいはず。

 しかし、どういうわけか、GPACとCRTとで、名前が重複して、リンクエラーになってしまう。
 誰かGPACをVCで使う方法、教えてください。(追記:単にGPACのコンパイルオプションの変更を忘れていた)

 まあ、mp4出力がいまだできないが、それ以外は問題がない。しかし、別にVC9でコンパイルしたからといって、エンコードが早くなるわけではない。重要な部分はすべてアセンブラで書かれているからだ。コンパイルオプションでSSE2を有効にして、--no-asmを試してみたが、まったくエンコード速度に違いはない。

3 comments:

resh said...

現在、この情報はobsolateになっています。というのも、x264はC99を使っているため、C89しかサポートしていないVC++ではコンパイルできません。

最近、VCで、x264をビルドしようとしてハマリました。
どうも、2008年6月5日のリビジョンから、C99がまぎれこんだみたいです。
で、適当にドキュメントに「C99で書いてあるから、古いコンパイラじゃ無理」って追記されてるようです。

resh said...
This comment has been removed by the author.
resh said...

連投失礼します。
2009年1月のメールで結構議論されてました。