The WebM project
http://www.webmproject.org/
メニューのCodeより、
http://www.webmproject.org/code/
WebM Repositories
と書いてある少し上にある、
snapshots
のリンクからたどっていくと、以下のページに行きます。
http://code.google.com/p/webm/downloads/list
ここに、libvpxのソースコードや、WebM(VP8)動画再生用のDirectShowフィルタなどがあります。
ここから、
libvpx-v1.1.0.tar.bz2
を、ダウンロードします。
最新のソースコードは、
WebM Repositories
と書いてある下のpullのリンクから、gitでダウンロードできます。
$ git clone http://git.chromium.org/webm/libvpx.git
2012/05/12 追記
libvpx-v1.1.0で、以下のようなエラーが出ます。
vp8/common/generic/systemdependent.c: In function 'once':
vp8/common/generic/systemdependent.c:103:5: error: unknown type name 'CRITICAL_SECTION'
windows.h がインクルードされないのが原因です。
このエラーが出る場合、以下のパッチを適用してください。
libvpx-v1.1.0-20120512.diff
2012/05/13 追記
pthreadsライブラリがインストールされていると、win32threadsよりも優先的に選択されてしまうため、configureの前後で「pthread.h」をリネームして、pthreadsライブラリが無いように見せかけるようにしました。
MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xjf libvpx-v1.1.0.tar.bz2
$ cd libvpx-v1.1.0
$ patch -p1 < libvpx-v1.1.0-20120512.diff
$ mv /mingw/include/pthread.h /mingw/include/pthread.h.bak
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-examples
$ mv /mingw/include/pthread.h.bak /mingw/include/pthread.h
$ make
$ make install
以上で終了です。
MinGW環境のlibvpxで、pthreadsライブラリを優先的に使用するには、ソースコードを解凍した後、configureの前に、以下のパッチを適用してください。
2012/05/12 追記
pthreadsライブラリ用のパッチを更新しました。
libvpx-v1.1.0-pthreads.diff
$ patch -p1 < libvpx-v1.1.0-pthreads.diff
$ patch -p1 < libvpx-v1.1.0-20120512.diff
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-examples
$ make
$ make install
以上で終了です。
【補足】
試しに、--cpu=athlon64 でコンパイルしたら、FFmpegがクラッシュしてエンコードできなかったのですが、gccのオプションに、
-fno-tree-vectorize
を追加したらクラッシュしなくなりました。
--cpu=i686 だと必要ないのですが、念のため追加することにしました。
【更新履歴】
2012/01/29 追記
v1.0.0になったのを機に書き直しました。
w32threadsとpthreadsのコンパイル手順は、パッチ以外は同じなので、一つの記事にまとめました。
2012/05/12 追記
最新版は、libvpx-v1.1.0 です。
libvpx-v1.0.0 を libvpx-v1.1.0 に修正しました。
2012/05/12 追記
libvpx-v1.1.0で、以下のようなエラーが出ます。
vp8/common/generic/systemdependent.c: In function 'once':
vp8/common/generic/systemdependent.c:103:5: error: unknown type name 'CRITICAL_SECTION'
windows.h がインクルードされないのが原因です。
このエラーが出る場合、以下のパッチを適用してください。
libvpx-v1.1.0-20120512.diff
$ patch -p1 < libvpx-v1.1.0-20120512.diff
2012/05/12 追記
pthreadsライブラリ用のパッチを更新しました。
libvpx-v1.1.0-pthreads.diff
2012/05/13 追記
pthreadsライブラリがインストールされていると、win32threadsよりも優先的に選択されてしまうため、configureの前後で「pthread.h」をリネームして、pthreadsライブラリが無いように見せかけるようにしました。
$ mv /mingw/include/pthread.h /mingw/include/pthread.h.bak
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-examples
$ mv /mingw/include/pthread.h.bak /mingw/include/pthread.h
2012/05/13 追記
pthreadsライブラリを優先的に使用する場合の説明を修正しました。
MinGW環境のlibvpxで、pthreadsライブラリを優先的に使用するには、ソースコードを解凍した後、configureの前に、以下のパッチを適用してください。
$ patch -p1 < libvpx-v1.1.0-pthreads.diff
$ patch -p1 < libvpx-v1.1.0-20120512.diff
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-examples
$ make
$ make install
以上で終了です。



vp8/common/generic/systemdependent.cと
vpx_mem/vpx_mem_tracker.cの、
if HAVE_PTHREAD_H を
if defined(WIN32) より優先度さげてみました。それから、libvpx-v1.1.0-20120512.diffを適用してやると、問題なくbuildができるようになりました。また、vpx_config.hで、
#define HAVE_PTHREAD_H 0 としてやってもOKでした。あべちんさんとこではこんな症状でてませんか。
たしかに、pthreadがインストールされていると、pthreadの方が優先的に選択されてしまいますね。(汗
記事には書いていなかったのですが、私の場合は、configureの前にpthread.hをリネームしてpthreadが無いように見せかけていました。
まどぎわさんの手順どおり、configureの後にvpx_config.hを修正しても良いですね。
他にも困っている方がいるかもしれませんので、記事を修正しておきます。
ご指摘ありがとうございました。
systemdependent.cでエラーがでないので不思議に思ってました。結局、こちらでは、systemdependent.cとvpx_mem_tracker.cに、パッチをあることにしました。
あべちんさんのパッチも取り込んでます。
感謝感謝です。