2012-02-12 5 views
1

私はCIImageのシーケンスにCIFiltersを適用しようとしており、それらをリアルタイム(少なくとも20〜30fps)で表示したいと考えています。iOSのCIFilterから(近くに)リアルタイムのパフォーマンスを得ることは可能ですか?

画像がEAGLを通じてGLKView上に描かれているがCIContext

私は(更新方法で)このコードで自分の画像を描画し、私は(すでにタイトなビットである)±20 FPSを得るを裏付け

image = [image imageByApplyingTransform: CGAffineTransformMakeScale(@scale, @scale)]; 
[self.capture_controller.core_image_context drawImage:image atPoint: [0, 0] fromRect: image.extent]; 

それは10-12 FPS(compoがinputImageとは、すべて一度に設定されているCISourceOverCompositingフィルタである)に低下する前に、私はちょうど1単純なフィルタを追加する場合:

[self.compo setValue:image forKey: @"inputBackgroundImage"]; 
image = [self.compo outputImage]; 

CoreImageのパフォーマンスを向上させる方法はありますか? UIImageViewはシーケンスをより速く表示できるので、可能なはずです。

+0

を私は答えは依存していると仮定します。どのデバイス、解像度、フィルタとフィルタ数に依存しますか。 –

+0

はい、それは問題の一部ですが、現在のところ私の画像はかなり小さいです(640x426)。 WWDCセッションビデオで見ることができるように、ビデオストリーム上のシンプルなフィルタを使用して、リアルタイムまたはほぼリアルタイムの処理が行われます。ここで私はいくつかの画像があり、それは地獄のように遅いです。 – hlidotbe

+0

どの端末でですか? –

答えて

-1

私が集めたものから、そしてジェシュアのコメントから、パフォーマンスは(明らかに)デバイスに縛られています。私がCIFilterを使用していれば、それほど多くはありません。

+4

提案として、私の新しいGPUImageフレームワークを試してみてください。http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework私はベンチマークを実行していますが、初期のテストでは、チェーン内の2つのフィルタを使って640x480フレームのビデオをフィルタリングして、iPhone 4の合計レンダリング時間6ms(〜170FPS)で特定のフィルタを使用したいと思いますか?私はその特定のフィルターチェーンのタイミングをテストし、それが "古い"ハードウェアにも当てはまるかどうかを調べることができます。 –

+0

これは私たちが行ったことです。私は(基本的な)映画入力クラスに貢献しました:) – hlidotbe

2

パフォーマンスを取得する方法については、CoreImageのWWDC 2012ビデオを参照してください。デフォルトでは、パフォーマンスは色管理などの要因によって制限されます。最高のパフォーマンスを得るには、CIContextの作成時にカラー管理をオフにして、コンテキストを1回だけ作成し、フィルタを1回だけ作成します。

1

Appleはこれを行うためのマニュアルを提供しています。マニュアルから引用

EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 

NSDictionary *options = @{ kCIContextWorkingColorSpace : [NSNull null] }; 
CIContext *myContext = [CIContext contextWithEAGLContext:myEAGLContext options:options]; 
関連する問題