MinGW + MSYSを使った static版 ffmpegのコンパイル (その4-2:外部ライブラリのコンパイル [a52・faac・faad2] )
個人的に最新リビジョンのffmpegをコンパイルしてみました。
Windows上で動作するstaticなffmpeg.exeを作ります。
その備忘録です。。。
■共通項目
外部ライブラリのコンパイル共通項目として、コンパイル生成場所をstatic2(実パスは"C:\msys\1.0\static2")にします。
具体的には、configureに必ず"--prefix=/static2"を付与します。
■a52
a52はliba52 - a free ATSC A/52 stream decoderからダウンロードできます。
July 27, 2002: a52dec-0.7.4 is releasedのreleasedからダウンロードします。
・a52dec-0.7.4.tar.tarをダウンロードします
※とりあえずこちらに置いておきます。。。
MSYSを起動して以下を実行します。
$ tar zxfv a52dec-0.7.4.tar.tar
$ cd a52dec-0.7.4
$ ./configure --prefix=/static2 --disable-shared --enable-static
$ make
$ make install
[コンパイル参考リンク]
・ffmpeg_wikiさんのliba52 が詳しいです(英語です)
■faac
faacはSOURCEFORGE.NETからダウンロードできます。
上段faac-srcのfaac-1.25から
・faac-1.25.tar.gzをダウンロードします
※とりあえずこちらに置いておきます。。。
また、このバージョンでlibfaacを利用する場合のパッチがありますので、
ここからダウンロードします。
・faac-1.25.patch.zipをダウンロードします
ダウンロード終了後解凍します。faac-1.25.patchをどこかに保存しておきます。
MSYSを起動して以下を実行します。
$ tar zxfv faac-1.25.tar.gz
作業ルートにfaac-1.25.patchをコピー
$ patch -p0 < faac-1.25.patch
$ cd faac
$ ./bootstrap
$ ./configure --prefix=/static2 --enable-static --disable-shared
$ make LDFLAGS="-no-undefined"
$ make install
[インストール参考リンク]
・ffmpeg_wikiさんのfaacが詳しいです(英語です)
■faad2
faad2はSOURCEFORGE.NETからダウンロードできます。
上段faad2-srcのfaad2-2.5から
・faad2-2.5.tar.gzをダウンロードします
※とりあえずこちらに置いておきます。。。
また、このバージョンでlibfaad2を利用する場合のパッチがありますので、
ここからダウンロードします。
・faad2-2.5.patch.zipをダウンロードします
ダウンロード終了後解凍します。faad2-2.5.patchをどこかに保存しておきます。
MSYSを起動して以下を実行します。
$ tar zxfv faad2-2.5.tar.gz
作業ルートにfaac-1.25.patchをコピー
$ patch -p0 < faad2-2.5.patch
$ cd faad2
//---------------------------------------------------------------
AACのプロファイル[Scalable Sampling Rate(SSR)]を有効にします。
ソースを慎重に修正します。
//---------------------------------------------------------------
SSRとは。。。
ここに詳細があります。
---引用---
MPEG-4 ビデオ同様、 AAC にもプロファイルがあります。
消費者市場ではこのうち Low Complexity (LC AAC) プロファイル
(別名MAIN @ Level 2) がもっとも広く使われています
(例えばApple'の iTunes music store)
その他のプロファイルには、
例えば
Long Term Prediction プロファイル (LTP),
Scalable Sampling Rate (SSR) や
Low Delay (LD)といったものがあります。
ここにも詳細があります。
---引用---
(3) SSR:Scalable Sampling Rate
4バンドのサブバンド分析フィルタを含むゲイン制御部をもつ。
予測部は存在しない。
またTNSの予測次数も制限されている。
4分割サブバンドフィルタ出力の内、例えば最低域バンドのみをデコード、
低域側2つのバンドのみをデコードというように、
スケーラブルな構造をもつデコーダを構成できる。
以下、修正内容です。
[\faad2\libfaad\common.h]
・84行目 //#define SSR_DEC → #define SSR_DEC
[\faad2\libfaad\specrec.c]
・861行目から884行目までコメントアウトする
※cpe->が存在しないエラーを回避するため
[\faad2\libfaad\ssr.h]
・53行目のssr_gc_function( )プロトタイプ宣言の修正
※\faad2\libfaad\ssr.cに合わせる
・static void ssr_gc_function(ssr_info *ssr, real_t *prev_fmd, real_t *gc_function, uint8_t window_sequence, uint8_t band, uint16_t frame_len); とする
[\faad2\libfaad\ssr.c]
・138行目 static void ssr_gc_function(ssr_info *ssr, real_t *prev_fmd, real_t *gc_function, uint8_t window_sequence, uint8_t band, uint16_t frame_len) とする
[\faad2\libfaad\ssr.c]
・ssr_gc_function()をcallしている箇所を修正
117行目 gc_function, window_sequence, frame_len); → gc_function, window_sequence, band, frame_len);
[\faad2\libfaad\common.h]
・93行目に以下を追加する
#ifdef SSR_DEC
#define MUL_R_C(A,B) ((A)*(B))
#endif
※ssr_fb.cでのMUL_R_C未宣言エラーを回避するため
//---------------------------------------------------------------
以上で修正完了です。
//---------------------------------------------------------------
再びMSYSを起動して以下を実行します。
$ ./bootstrap
$ ./configure --prefix=/static2 --enable-static --disable-shared
$ make LDFLAGS="-no-undefined"
$ make install
[インストール参考リンク]
・ffmpeg_wikiさんのfaadが詳しいです(英語です)
今回はちょっと長くなりましたね。
次回も外部ライブラリのコンパイル(x264、xvidcore、amr_nb)です。
ではまたね。