libvpxは、以下の場所にあります。
The WebM project
http://www.webmproject.org/メニューの Developer → Overview & Code Repos より、
http://www.webmproject.org/code/WebM Repositories
と書いてある少し上にある、
snapshots
のリンクからたどっていくと、以下のページに行きます。
http://downloads.webmproject.org/releases/webm/index.htmlここに、libvpxのソースコードや、WebM(VP8)動画再生用のDirectShowフィルタなどがあります。
ここから、
libvpx-v1.1.0.tar.bz2
を、ダウンロードします。最新のソースコードは、
WebM Repositories
と書いてある下のpullのリンクから、gitでダウンロードできます。
$ git clone
https://chromium.googlesource.com/webm/libvpxダウンロードが終わったら、
$ cd libvpx
$ mv /mingw/include/pthread.h /mingw/include/pthread.h.bak
$ ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --extra-cflags="-fno-tree-vectorize" --disable-unit-tests
$ mv /mingw/include/pthread.h.bak /mingw/include/pthread.h
$ make
$ make install
以上で終了です。
MinGW環境のlibvpxで、pthreadsライブラリを優先的に使用するには、ソースコードを解凍した後、configureの前に、以下のパッチを適用してください。
libvpx-v1.0.0-pthreads.diff2016/08/12 追記pthreadsライブラリ用のパッチを更新しました。
libvpx-v1.6.0-pthreads.diff$ patch -p1 < libvpx-v1.6.0-pthreads.diff
$ ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --extra-cflags="-fno-tree-vectorize" --disable-unit-tests
$ make
$ make install
以上で終了です。
【補足】
試しに、--cpu=athlon64 でコンパイルしたら、FFmpegがクラッシュしてエンコードできなかったのですが、gccのオプションに、
-fno-tree-vectorize
を追加したらクラッシュしなくなりました。
--cpu=i686 だと必要ないのですが、念のため追加することにしました。
2012/05/13 追記pthreadsライブラリがインストールされていると、win32threadsよりも優先的に選択されてしまうため、configureの前後で「pthread.h」をリネームして、pthreadsライブラリが無いように見せかけるようにしました。
【更新履歴】を見る
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ライブラリを優先的に使用する場合の説明を修正しました。
MinGW環境のlibvpxでpthreadsライブラリを使用するには、ソースコードを解凍した後、configureの前に、以下のパッチを適用してください。
MinGW環境のlibvpxで、pthreadsライブラリを優先的に使用するには、ソースコードを解凍した後、configureの前に、以下のパッチを適用してください。
$ patch -p1 < libvpx-v1.1.0-pthreads.diff
$ patch -p1 < libvpx-v1.1.0-20120512.diff
$ patch -p1 < libvpx-makefile.diff
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-examples
$ make
$ make install
w32threadsとpthreadsのコンパイル手順は、パッチ以外は同じです。
以上で終了です。
2012/05/26 追記
unit tetsがデフォルトでenableになり、こんなエラーが出るようになりました。
[AR] libgtest_g.a
[STRIP] libgtest.a < libgtest_g.a
/bin/sh: /mingw/bin/strip: Bad file number
make[1]: *** [libgtest.a] Error 126
make: *** [.DEFAULT] Error 2
configureオプションに、--disable-unit-tests を追加しました。
2012/12/29 追記
ソースコードは、git版を使用する説明に修正しました。
MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xjf libvpx-v1.1.0.tar.bz2
$ cd libvpx-v1.1.0
Downloadsにあるソースコードは更新が遅いので、gitでダウンロードします。
$ git clone http://git.chromium.org/webm/libvpx.git
$ cd libvpx
2012/12/29 追記
libvpx-v1.2.0-1423-g16810c1でvp9-previewがマージされましたが、makeの最後でエラーになります。
とりあえず、VP9はまだFFmpegでサポートされていませんので、configureオプションに、--disable-vp9 を追加しました。
2012/12/30 追記
makeの最後、strip処理の所で以下のようなエラーが出ます。
/bin/sh: /mingw/bin/strip: Bad file number
stripの他に、nm、grep、awkを組み合わせて処理しているのを、単純にstripだけにしたらmakeできました。
ソースコードに、以下のパッチを適用してください。
libvpx-makefile.diff
$ patch -p1 < libvpx-makefile.diff
2012/12/30 追記
Makefileのstripを修正して、examplesとunit-testsもmakeできましたので、configureオプションの「--disable-examples」と「--disable-unit-tests」を削除しました。
VP9もmakeできましたが、FFmpegでサポートされるまで、「--disable-vp9」は付けておきます。
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-examples --disable-unit-tests --disable-vp9
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-vp9
2012/12/30 追記
libvpx-v1.1.0で出ていた以下のエラーは、libvpx-v1.1.0-92-g8df79e9で修正されていました。
パッチは不要になりました。
#2012/06/15付って…、もう半年も前なのに、今日まで気づきませんでした。
vp8/common/generic/systemdependent.c: In function 'once':
vp8/common/generic/systemdependent.c:103:5: error: unknown type name 'CRITICAL_SECTION'
$ patch -p1 < libvpx-v1.1.0-20120512.diff
2013/01/16 追記
FFmpeg rev.48901(353dbaa)から、VP9(libvpx-vp9)も選択できるようになりました。
configureオプションの「--disable-vp9」を削除しました。
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-vp9
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686
2013/03/14 追記
2013/03/05の更新で、こんなエラーが出るようになりました。
third_party/libyuv/source/scale.c:642:32: warning: 'naked' attribute directive ignored [-Wattributes]
third_party/libyuv/source/scale.c: In function 'ScaleRowDown2_SSE2':
third_party/libyuv/source/scale.c:643:9: error: expected '(' before '{' token
third_party/libyuv/source/scale.c:644:5: error: unknown type name 'mov'
書式の異なるインラインアセンブラを#if definedで切り替えているのですが、GCCに対応していない所をコンパイルしてしまうのが原因です。
以下のパッチを適用してください。
libvpx-v1.2.0-1606-g7d8fc26-mingw.diff
$ patch -p1 < libvpx-v1.2.0-1606-g7d8fc26-mingw.diff
2013/06/16 追記
third_party/libyuv/source/scale.c のパッチは不要になりました。
$ patch -p1 < libvpx-v1.2.0-1606-g7d8fc26-mingw.diff
2013/09/07 追記
test/vp9_thread_test.cc のところで、pthread関連のエラーが出てしまうため、configureオプションに
--disable-unit-tests
を追加しました。
$ CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-unit-tests
2013/09/16 追記
configureオプションの「CFLAGS="-fno-tree-vectorize"」を「--extra-cflags="-fno-tree-vectorize"」に変更しました。
CFLAGS="-fno-tree-vectorize" ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --disable-unit-tests
./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --extra-cflags="-fno-tree-vectorize" --disable-unit-tests
2013/12/16 追記
./libvpx.a(svc_encodeframe.c.o):(.text+0x165): undefined reference to `strtok_r'
(以下略)
というエラーが出る場合、以下のパッチを適用してください。
libvpx-svc_encodeframe_c.diff
$ patch -p1 < libvpx-svc_encodeframe_c.diff
2014/02/21 追記
svc_encodeframe.c のエラーは修正されたので、パッチは不要になりました。
$ patch -p1 < libvpx-svc_encodeframe_c.diff
2014/03/23 追記
pthreadsライブラリ用のパッチを更新しました。
libvpx-v1.3.0-pthreads.diff
2014/05/24 追記
third_party/libyuv/source/cpu_id.cc
のコンパイルでエラーが出るため、以下のパッチを適用してください。
libvpx-cpu_id_cc-20140524.diff
$ patch -p1 < libvpx-cpu_id_cc-20140524.diff
2014/07/24 追記
build/make/Makefile の、stripの時に出ていたエラーは修正されましたので、パッチを削除しました。
libvpx-makefile.diff
$ patch -p1 < libvpx-makefile.diff
2014/09/12 追記
third_party/libyuv/source/cpu_id.cc のエラーは修正されたので、パッチは不要になりました。
$ patch -p1 < libvpx-cpu_id_cc-20140524.diff
2015/05/28 追記
snapshotsのリンクが変わりました。
http://code.google.com/p/webm/downloads/list
http://downloads.webmproject.org/releases/webm/index.html
2015/05/28 追記
git cloneのURLが変わりました。
$ git clone http://git.chromium.org/webm/libvpx.git
$ git clone https://chromium.googlesource.com/webm/libvpx
2015/08/15 追記
VP10が実装されましたが、makeの最後にstripでエラーになるため、configureオプションに「--disable-vp10」を追加しました。
$ ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --extra-cflags="-fno-tree-vectorize" --disable-unit-tests
$ ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --extra-cflags="-fno-tree-vectorize" --disable-unit-tests --disable-vp10
2016/08/12 追記
VP10は削除されましたので、configureオプションの「--disable-vp10」を削除しました。
https://chromium.googlesource.com/webm/libvpx/+/67edc5e83be285004804c67c5348bbc81503a04d
$ ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --extra-cflags="-fno-tree-vectorize" --disable-unit-tests --disable-vp10
$ ./configure --prefix=/mingw --target=x86-win32-gcc --cpu=i686 --extra-cflags="-fno-tree-vectorize" --disable-unit-tests
2016/08/12 追記
メニューが変わっていたので、修正しました。
メニューのCodeより、
メニューの Developer → Overview & Code Repos より、
2016/08/12 追記
説明がダブっているのを修正しました。
Downloadsにあるソースコードは更新が遅いので、gitでダウンロードします。
$ git clone https://chromium.googlesource.com/webm/libvpx
ダウンロードが終わったら、
2016/08/12 追記
pthreadsライブラリ用のパッチを更新しました。
libvpx-v1.6.0-pthreads.diff
【更新履歴】を閉じる
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に、パッチをあることにしました。
あべちんさんのパッチも取り込んでます。
感謝感謝です。