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