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ある時点でトランジション効果にアクセスしたいので、オブジェクトに固執したいと思います。