RGBA malloc されたデータの生のビットマップ イメージがあります。行は明らかに 4 バイトの倍数です。このデータは実際には AVI (24 ビット BGR 形式) に由来しますが、32 ビット ARGB に変換します。フレームあたり約 8 MB の 32 ビット データ (1920x1080) があります。
フレームごとに:
NSData
を介してそのフレームのデータをオブジェクトに変換しますNSData:initWithBytes:length
。CIImage
次に、 を介してそれをオブジェクトに変換しますCIImage:imageWithBitmapData:bytesPerRow:size:format:colorSpace
。- そこから
CIImage
、 を使用して最終的なNSOpenGLView
コンテキストに描画しますNSOpenGLView:drawImage:inRect:fromRect
。ターゲット イメージの「モザイク」の性質により、さまざまなソース/宛先 Rects を使用して、これに対して約 15 ~ 20 回の呼び出しが行われます。
NSTimer
を呼び出す30hz を使用する[self setNeedsDisplay:YES]
とNSOpenGLView
、2012 MacMini/2.6ghz/i7 で約 20 ~ 25 fps を達成できます。30hz では安定していません。NSTimer
これは、 の代わりに を使用すると予想されCVDisplayLink
ます。
しかし...NSTimer
今のところ問題を無視して、このフレームごとのレンダリングをもう少し効率的にするための提案/指針はありますか?
ありがとう!
注意:CIImage
ある時点でトランジション効果にアクセスしたいので、オブジェクトに固執したいと思います。