libvpxは、以下の場所にあります。
The WebM project
http://www.webmproject.org/メニューのCodeより、
http://www.webmproject.org/code/Get the Code
snapshots
と、たどっていくと、
http://code.google.com/p/webm/downloads/listここに、libvpxのソースコードや、FFmpegでWebM(VP8)動画のエンコードに対応するパッチ、WebM(VP8)動画再生用のDirectShowフィルタなどがあります。
ですが、このままだとFFmpegのビルドができませんでしたので、gitでダウンロードしたlibvpxのソースコードと、修正したパッチを置いておきます。libvpx-0.9.0-31.tar.bz2最新のソースコードは、gitでダウンロードできます。
$ git clone git://review.webmproject.org/libvpx.git
snapshotsにあるソースコード
libvpx-v0.9.6.tar.bz2
でも問題ありませんが、当サイトの更新に合わせて、ソースコードも置いておきます。
libvpx-0.9.5-28.tar.bz22011/07/31 追記ソースコードをアップデートしました。
libvpx-0.9.6-485.tar.bz2MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xjf libvpx-0.9.6-485.tar.bz2
$ cd libvpx
libvpxでpthreadを使用するためのパッチを適用します。
$ patch -p1 < libvpx-0.9.0-20100528.diff2011/04/12 追記パッチを更新しました。
libvpx-0.9.6-20110412.diff$ patch -p1 < libvpx-0.9.6-20110412.diff
その後、
$ CFLAGS="-fno-tree-vectorize" ./configure --target=x86-win32-gcc --cpu=i686 --disable-examples
$ make
$ cp libvpx.a /mingw/lib/
$ mkdir -p /mingw/include/vpx
$ cp vpx/*.h /mingw/include/vpx/
以上で終了です。
【補足】
--cpu=i686 は、これを付けないと、FFmpegがエラーを吐いてエンコードできませんでした。
CFLAGS="-DPTW32_STATIC_LIB" は、pthreadライブラリをスタティックリンクするための、おまじないです。2011/02/16 追記試しに、--cpu=athlon64 でコンパイルしてもクラッシュしました。
gccのオプションに、
-fno-tree-vectorize
を追加したらクラッシュしなくなりましたので、--cpu=i686 でも念のため追加することにしました。
-fomit-frame-pointer も、若干速くなるかもしれないので追加しました。
FFmpegでWebM(VP8)動画のエンコードに対応するためには、以下のパッチが必要です。
(libvpxではなく、FFmpeg本体のパッチです。)
ffmpeg-vp8-encdec-20100528.diffこのパッチを適用する前に、もう一つ先に適用するパッチがありますので、FFmpeg本体のコンパイル手順を参照してください。2010/06/05 追記FFmpeg rev.23474以降、FFmpeg本体へのパッチは不要になりました。
【更新履歴】を見る
2010/06/15 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.0-93.tar.bz2
2010/06/22 追記
ソースコードをアップデートしました。
バージョンが0.9.1になりました。
パッチは変更ありません。
libvpx-0.9.1-13.tar.bz2
2010/07/16 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.1-39.tar.bz2
2010/07/18 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.1-40.tar.bz2
2010/07/28 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.1-69.tar.bz2
2010/08/04 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.1-81.tar.bz2
2010/08/22 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.1-106.tar.bz2
2010/09/01 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.1-122.tar.bz2
2010/09/10 追記
ソースコードをアップデートしました。
バージョンが0.9.2になりました。
パッチは変更ありません。
libvpx-0.9.2-9.tar.bz2
2010/09/23 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.2-37.tar.bz2
2010/10/02 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.2-75.tar.bz2
2010/10/14 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.2-102.tar.bz2
2010/10/25 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.2-125.tar.bz2
2010/11/09 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-28.tar.bz2
2010/11/16 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-46.tar.bz2
2010/12/03 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-66.tar.bz2
2010/12/12 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-86.tar.bz2
2010/12/23 追記
configureオプション、CFLAGSと補足を修正しました。
・修正前
$ CFLAGS="-march=i686 -DPTW32_STATIC_LIB" ./configure --target=x86-win32-gcc --disable-examples
CFLAGSについて、
-march=i686 は、これを付けないと、FFmpegがエラーを吐いてエンコードできませんでした。
-DPTW32_STATIC_LIB は、pthreadライブラリをスタティックリンクするための、おまじないです。
・修正後
$ CFLAGS="-DPTW32_STATIC_LIB" ./configure --target=x86-win32-gcc --cpu=i686 --disable-examples
--cpu=i686 は、これを付けないと、FFmpegがエラーを吐いてエンコードできませんでした。
CFLAGS="-DPTW32_STATIC_LIB" は、pthreadライブラリをスタティックリンクするための、おまじないです。
2010/12/25 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-116.tar.bz2
2011/01/04 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-125.tar.bz2
2011/01/05 追記
CFLAGS="-DPTW32_STATIC_LIB" は、最新のpthreadsライブラリでは不要になったため、削除しました。
2011/01/18 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-154.tar.bz2
2011/01/30 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-203.tar.bz2
2011/02/02 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-214.tar.bz2
2011/02/09 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-236.tar.bz2
2011/02/16 追記
configureに、
CFLAGS="-fomit-frame-pointer -fno-tree-vectorize"
を追加しました。
2011/02/17 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-270.tar.bz2
2011/02/21 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-286.tar.bz2
2011/02/27 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-300.tar.bz2
2011/03/04 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.5-308.tar.bz2
2011/04/01 追記
snapshotsにあるソースコードの最新版が、
libvpx-v0.9.5.tar.bz2 から libvpx-v0.9.6.tar.bz2 になりました。
2011/04/01 追記
ソースコードをアップデートしました。
パッチは変更ありません。
libvpx-0.9.6-90.tar.bz2
2011/04/12 追記
パッチを更新しました。
libvpx-0.9.6-2011412.diff
2011/04/13 追記
ソースコードをアップデートしました。
libvpx-0.9.6-120.tar.bz2
2011/04/20 追記
ソースコードをアップデートしました。
libvpx-0.9.6-150.tar.bz2
デフォルトで -fomit-frame-pointer が付くようになったので、削除しました。
2011/05/08 追記
ソースコードをアップデートしました。
libvpx-0.9.6-219.tar.bz2
2011/05/17 追記
ソースコードをアップデートしました。
libvpx-0.9.6-239.tar.bz2
2011/05/30 追記
ソースコードをアップデートしました。
libvpx-0.9.6-296.tar.bz2
2011/06/04 追記
ソースコードをアップデートしました。
libvpx-0.9.6-309.tar.bz2
2011/06/07 追記
ソースコードをアップデートしました。
libvpx-0.9.6-313.tar.bz2
2011/06/17 追記
ソースコードをアップデートしました。
libvpx-0.9.6-366.tar.bz2
2011/06/30 追記
ソースコードをアップデートしました。
libvpx-0.9.6-408.tar.bz2
2011/07/14 追記
ソースコードをアップデートしました。
libvpx-0.9.6-439.tar.bz2
2011/07/25 追記
ソースコードをアップデートしました。
libvpx-0.9.6-467.tar.bz2
2011/07/31 追記
ソースコードをアップデートしました。
libvpx-0.9.6-485.tar.bz2
【更新履歴】を閉じる
もう解決されたかもしれませんが、FFmpeg本体のコンパイル手順も合わせてお読みください。
よろしくお願いします。
minaと申します。
ブログを見させていただき、手順通りにlibvpxをコンパイルし、ffmpegに組み込んでコンパイルしようとしたのですが、ffmpegのコンパイルの際に
C:/MinGW/lib/libvpx.a(x86_dsystemdependent.c.o):(.text+0x1d): undefined reference to `vp8_dequantize_b_impl_mmx'
C:/MinGW/lib/libvpx.a(loopfilter_x86.c.o):(.text+0xa6c): undefined reference to `vp8_loop_filter_simple_vertical_edge_sse2
といったエラーが大量に出てしまい。失敗してしまいます。
また、libvpx.aを自作プログラム内に組み込み、libvpx単体で使用を試みたのですが、同様に"undefined reference to ..."のエラーが発生してしまいます。もしこのようなご経験、または対処法をご存知でしたら、教えていたいだけないでしょうか。よろしくお願いします。
この記事の通りにパッチを当てると、pthreadsライブラリも必要になりますので、パッチを当てないでコンパイルし直してみてください。
とりあえず、それぐらいしか思いつきません…。
お返事ありがとうございます。
パッチを当てずにコンパイルしてみましたが、同様の結果でした。
もう少し原因を探ってみたいと思います。
ありがとうございました。
あと考えられるのは、gccとかbinutilsなどが最新版でないとか?
私は、gcc-4.6.1を自前でビルドして使用しているのですが、MinGW公式のgcc-4.5.2でも問題なかったと思います。
ググってみたら、同じエラーで質問している方を見つけたのですが、それに対する回答はありませんでした。
もし、ご自身で解決できましたら、ご報告いただけるとありがたいです。
ご参考まで。
binutilsが原因でしたか。
ご報告ありがとうございます。
minaさんも、解決していると良いですが…。