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:

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

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

    ReplyDelete
  2. This comment has been removed by the author.

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

    ReplyDelete

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.