おそらく、これを処理する最も効率的な方法は、これらのビデオ フレームのフィルタリングと表示に OpenGL ES を使用することです。AVCaptureVideoPreviewLayer を直接使用して多くのことを行うことはできません。別のビューまたはレイヤーと重ね合わせたときに不透明度を調整することは別として。
ここでは、カメラからフレームを取得し、OpenGL ES 2.0 シェーダーを適用してビデオをリアルタイムで処理して表示するサンプル アプリケーションを用意しています。このアプリケーション (ここで詳しく説明されています) では、色ベースのフィルタリングを使用してカメラ ビュー内のオブジェクトを追跡していましたが、他の人はこのコードを変更して、いくつかの優れたビデオ処理効果を実行しました。画面に表示されるこのアプリケーションのすべての GPU ベースのフィルターは、iPhone 4 で 60 FPS で実行されます。
ビデオをサポートしているが、OpenGL ES 2.0 対応の GPU を搭載していない唯一の iOS デバイスは、iPhone 3G です。そのデバイスもターゲットにする必要がある場合は、ビデオ キャプチャと OpenGL ES テクスチャの生成のための基本コードを取得し、Apple のGLImageProcessingサンプル アプリケーションのフィルター コードを使用できる場合があります。このアプリケーションは OpenGL ES 1.1 を中心に構築されており、すべての iOS デバイスでサポートされています。
ただし、これには OpenGL ES 2.0 の使用を検討することを強くお勧めします。シェーダーを使用すると、固定機能の OpenGL ES 1.1 パイプラインよりも多くの種類の効果を引き出すことができるからです。
(編集: 2012 年 2 月 13 日) 上記の更新として、この種のカスタム イメージ フィルタリングをカプセル化するGPUImageというオープン ソース フレームワークを作成しました。また、ビデオのキャプチャとフィルター処理後の画面への表示も処理します。これらすべてを設定するには、わずか 6 行のコードしか必要ありません。フレームワークの詳細については、より詳細な発表をご覧ください。