問題点を整理すると
1)OpenCVとの連携は後で考えるとして、FFmpeg単独でのiPhone移植を行う。
2)FFmpeg4iphone に実際のリブもあった
http://code.google.com/p/ffmpeg4iphone/
が、アプリにリンクすると ldr 12bit displacement out of range のエラーが出る。
3)上記のエラーはXcode3.1.xのバグのようだ。内容的にはjumpテーブルのオーバフロー
だろうから、全体コードを少なくすれば良いかも。。。アップルがBUGFIXするまで待て
ないので。
4)そのためには、FFmpegを自前でインストールして不要な部分を削除するなどの方法を
取る必要がある。
なので、FFmpeg最新版のインストールからはじめる。
1.gas-preprocesser.pl のダウンロード
2.FFmpegのダウンロード
svnを利用して最新をダウンロードします。
3.ffmpeg環境でコンフィグを実行しますが、私の場合、動画作成したいので、動画再生
部分は作らない事にします。また、そのままインストールすると/usr/localの下になる
のでMacOS用ではないので、ローカルフォルダーinst_ffmpegに保存するようにします。
毎回、./configure --xxxx xxxx と叩くのはいやなので、いかのようなスクリプトを
つくって実行します。
#/usr/bin/bash
# all iPhones
#./configure --disable-decoders --prefix=inst_ffmpeg --enable-cross-compile
--arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-
preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'
--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk
--cpu=arm1176jzf-s --extra-cflags='-arch armv6' --extra-ldflags='-arch armv6'
#
# iPhone 3GS
./configure --disable-decoders --prefix=inst_ffmpeg --enable-cross-compile
--arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc
--as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'
--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk
--cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7'
--enable-pic
上記を実行して、その後
make install で、inst_ffmpeg フォルダー以下にlib includeなどが作製
されました。
この結果、libcodec.aのサイズが27M程度から12Mになった。
4.このlibを使ってアプリにリンクしたら、4つほどcodec関連の関数が無いとのエラー
が出たので、ダミーで作っておきます。。。問題ないなら良いが。。。
/**************************************************************/
void ff_mpeg4_decode_picture_header() { printf("----") ;}
int ff_h264_decode_seq_parameter_set ;
void ff_h264_decode_picture_parameter_set() { printf("----") ;}
void ff_h264_decode_sei() { printf("----") ;}
5.これでリンクしたら、見事に ldr 12bit displacement out of range エラーは
出なくなった。ライブラリィーサイズが半分になったのが効いたようですね。
6.これで一応はリンクまで出来たので後は動作実験。。。さて、無事ビデオ撮影できるか。。
(PS)
なぜ、ビデオ撮影にFFmpegを使うかというと、3GS標準のビデオは外部から制御
できないので使えない。。。当然3Gも使えない。。。ので、性能は悪いが、
プログラム制御できる「ビデオもどき」を作るためです。 APP-STOREに同じような
プログラムが出ていました。。カメラ機能のみでTOP10以内になっています。。。
私は当然RunLogger機能の一部として考えており、「サーキットログとしてビデオ撮影
もするつもり」です。
Appleがビデオ制御APIを公開してくれれば、こんな事しなくて済むのですが。。