2012年01月29日

libvpxのコンパイル&インストール (v1.0.0以降)

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.diff

2016/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ライブラリが無いように見せかけるようにしました。

【更新履歴】を見る
posted by あべちん at 15:40 | Comment(3) | TrackBack(0) | FFmpeg追加ライブラリ
この記事へのコメント
あべちんさん、いつもお世話になってます。まどぎわです。ffmpegのビルド時にlibvpx.aにpthread_onceがないと怒られるようになったので、
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でした。あべちんさんとこではこんな症状でてませんか。

Posted by まどぎわ at 2012年05月13日 13:16
まどぎわさん、こんにちは。管理人です。

たしかに、pthreadがインストールされていると、pthreadの方が優先的に選択されてしまいますね。(汗

記事には書いていなかったのですが、私の場合は、configureの前にpthread.hをリネームしてpthreadが無いように見せかけていました。

まどぎわさんの手順どおり、configureの後にvpx_config.hを修正しても良いですね。

他にも困っている方がいるかもしれませんので、記事を修正しておきます。

ご指摘ありがとうございました。
Posted by あべちん at 2012年05月13日 19:26
あべちんさん、ご返事ありがとうございます。
systemdependent.cでエラーがでないので不思議に思ってました。結局、こちらでは、systemdependent.cとvpx_mem_tracker.cに、パッチをあることにしました。
あべちんさんのパッチも取り込んでます。
感謝感謝です。
Posted by まどぎわ at 2012年05月13日 20:15
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/53351775
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック