昨日はffmpegのコンパイルで嫌気がさしてきたところであったが、「流星ワゴン」の最終回を観てやる気がまた復活してきた。こんなことでめげていてはいけないのだ。
Silicon & Lithium: Building FFmpeg in Visual Studio はffmpegのconfigure/makeをVS2013のソリューション/プロジェクトファイルに変換するツールffmpeg_generatorを紹介したものだ。githubリポジトリにはffmpegをforkしたものとSMPディレクトリ内にffmpeg_generator.exeで変換ずみのソリューション・プロジェクトファイルが入っている。
リポジトリをクローンしてビルドしてみると大量のエラーが発生する。リポジトリのSMPフォルダ内にReadme.txtが入っているので読むとビルドには依存ライブラリのビルドおよびヘッダーファイルをインクルードできるようにできるようにしないといけないと書いてあった。ビルドエラーの大半はこれである。このプロジェクトファイルでビルドするためには以下のライブラリが必要だとのことである。
bzlib
iconv
zlib
lzma
sdl
libmp3lame
libvorbis
libspeex
libopus
libilbc
libfdk-aac
libtheora
libx264
libx265
libxvid
libvpx
libgme
libmodplug
libsoxr
libfreetype
fontconfig
libfribidi
libass
gnutls
librtmp
libssh
libcdio
libbluray
opengl
opencl
nvenc
上記のライブラリのうちいくつかは「Shift Media Project」のレポジトリに入っている。それぞれのライブラリはやはりVSのソリューション/プロジェクトファイル付きである。
それとYASMでビルドできるようにするための事前準備が必要であった。Readme.txtによれば以下の作業が必要だと書いてあった。
- まずVSサポートつきのYASMをダウンロードする。私の場合は64ビット版のYASMをダウンロードした。
- YASMを解凍したディレクトリ中にあるReadme.txtに従いセットアップを行う。Readmeによれば3通りの方法がある。私の場合は解凍したファイルをMSBuildのBuildCustomizationsディレクトリにコピーした。私の環境だとこのフォルダは「C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations」にあった。
- カスタムビルドで正常に動かすためにvsyasm.propsの中の[Input]に"%(FullPath)"を付加する。
- vsyasmの1.3.0使用するためにvsyasm.props中の$(Platform)をwin$(PlatformArchitecture)に置き換える。
このアセンブラコード混じりのソースコードは非常に興味をそそられるところだ。やはりまだまだアセンブラで最適化する余地は残されているのだ。
SMPフォルダのReadme.txtはほかにもいろいろなことが書いてあるので読んでみるといい。
とここまでやったところでffmpegのWindowsダウンロードを見るとちゃんと共有ライブラリ(DLL)バージョンでビルドしているものがアップされているではないか。これを使えばヘッダーのインクルードだけで使えるだろうね。ちょっと試してみるか。。