Seasons.NET

ちょっとした技術ブログです

iPhone OpenGLES2.0を使ったリアルタイムビデオ処理(カメラ編)

iOS4からは、キャプチャーアウトプットを使うことで、
カメラからの入力画像をOpenGLESのテクスチャとして
利用することができるようになりました。


これができるようになると当然リアルタイムに
シェーダーを使った演出を行いたくなるわけですが、
カメラからの入力画像は、非同期で送られてくるためこれらを処理するには、
排他制御を行う必要があります。


id:nakamura001さんがとても興味深い記事をTwitterでポストされていたので、
早速読んでみました。記事は、こちらからどうぞ。


カメラからの入力画像が非同期で送られてくるということは、
その画像情報をOpenGLESにして、かつシェーダーで処理する時間が
次の画像フレームの取得までに間に合わないといけません。


このサンプルでは、OSAtomicIncrement32Barrierを使い、
ビデオフレームを取得したときのフラグと
描画を行う必要があるフラグをカウントしています。


これにより、仮にシェーダーなどで処理負荷がかかってしまい
次のビデオフレームを処理できなかった場合、そのフレームは、
うまくスキップすることができます。


カメラ周りのプログラムでリアルタイム処理をされていて
困っている方は、是非この記事を参考にしてみてはいかがでしょうか?