現在、この情報は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:
現在、この情報はobsolateになっています。というのも、x264はC99を使っているため、C89しかサポートしていないVC++ではコンパイルできません。
最近、VCで、x264をビルドしようとしてハマリました。
どうも、2008年6月5日のリビジョンから、C99がまぎれこんだみたいです。
で、適当にドキュメントに「C99で書いてあるから、古いコンパイラじゃ無理」って追記されてるようです。
連投失礼します。
2009年1月のメールで結構議論されてました。
Post a Comment