iPhone OpenGLES2.0を使ったリアルタイムビデオ処理(カメラ編)
iOS4からは、キャプチャーアウトプットを使うことで、
カメラからの入力画像をOpenGLESのテクスチャとして
利用することができるようになりました。
これができるようになると当然リアルタイムに
シェーダーを使った演出を行いたくなるわけですが、
カメラからの入力画像は、非同期で送られてくるためこれらを処理するには、
排他制御を行う必要があります。
id:nakamura001さんがとても興味深い記事をTwitterでポストされていたので、
早速読んでみました。記事は、こちらからどうぞ。
カメラからの入力画像が非同期で送られてくるということは、
その画像情報をOpenGLESにして、かつシェーダーで処理する時間が
次の画像フレームの取得までに間に合わないといけません。
このサンプルでは、OSAtomicIncrement32Barrierを使い、
ビデオフレームを取得したときのフラグと
描画を行う必要があるフラグをカウントしています。
これにより、仮にシェーダーなどで処理負荷がかかってしまい
次のビデオフレームを処理できなかった場合、そのフレームは、
うまくスキップすることができます。
カメラ周りのプログラムでリアルタイム処理をされていて
困っている方は、是非この記事を参考にしてみてはいかがでしょうか?