headerAd

2014年7月25日金曜日

GPUImage周りの話

多用途カメラではGPUImageっていうSDKを使っている。



前にはこれについて書いた投稿もあったんだけど、GPUImageっていう単語の検索に引っかかって、おそらく何の興味もない内容なのにここに飛んできた人がいると思われるため、公開停止にしてある。

ではひとつGPUImageにまつわる話を書いてみましょう。


今回のテーマとしては、GPUImageの最新版では
[filter imageFromCurrentFramebuffer] を使ってUIImageを取得するきにはその前で必ず
[filter useNextFrameForImageCApture] を使ってバッファをとる必要があるんだよ!
そうしないとクラッシュするよ!
っていう話。
以下、今困っていることなどを挙げる。

多用途カメラでは最新バージョンを使っていません。それどころか半年前のを使っています。
え?それが不安定な原因じゃないかって?そうなのかもしれません。でも今のところちょっと厳しいんだな、これが。最新のバージョンだと、画像を取得する前に必ず手動でバッファを作らなきゃいけない。これのおかげでメモリの消費が抑えられる場合が多いんだけど、複数スレッドで同時に、タイマーなんか使って画像を取得する場合には向いていない。
例えばこのアプリの場合には疑似ナイトビジョンを実装するために画像の明るさを使う必要がある。基本的にはカメラ撮影ウインドウを開いている場合にはすべての条件下で0.5秒おきに画像を取得している。これは静音設定時におけるオートフラッシュの使用判定にも用いている画像だ。最新のGPUImageではバッファは一つ後のフレームしか取得することができなくなったために、タイマーで取得したバッファと(主に静穏モードで)撮影に使用するバッファ取得とのタイミングが被った場合には、どちらかのバッファが消滅するわけだ。運が良ければ撮影が失敗するだけで済むのだが(これも非常にまずい)、大体の場合にはクラッシュに直結する。

これらの事情から、何かうまいこと書いて解決してやれない限り最新バージョンを入れることができなかったりする。日々いろいろなパターンを試してはみているのだが、難しいね。できるだけ早い段階で最新に更新したいんだけど、まあ、ちょっと頑張ってみる。


0 件のコメント:

コメントを投稿