QTKit で QTMovie を開いています。
このビデオの各フレームを YV12 形式 ( kYUV420PixelFormat ) でリアルタイムで取得する必要があります (つまり、YV12 のみを受け入れ、ビデオをリアルタイムで再生する必要がある外部コードに渡します)。
それが行われるべき方法は、現在のフレームに対して[movie frameImageAtTime: [movie currentTime] withAttributes: error: ]を呼び出し、次に[movie stepForward]を呼び出して次のフレームに移動することです。すべてのフレームを取得するまで同様です。 . しかし、調べてみると、QTKit で YV12 形式やその他の YUV 形式のデータを取得する方法が見つかりません。frameImageAtTime:呼び出しで次のように変換できます:
- NSImage (ただし、NSImage は平面 YUV を格納できません)、
- CGImage(同じもの)、
- CIImage(同じもの)、
- CVPixelBuffer (これは YUV を格納できますが、そこから YUV を取得するように呼び出しを構成する方法がないようです。デフォルトでは ARGB32 データを返します)
- OpenGL テクスチャ (これもおそらく構成できますが、OpenGL ではこのデータは必要ありません。メモリに必要です)
したがって、このおそらく新しく最適化された QTKit テクノロジを使用する唯一の方法は、そこから ARGB データを取得し、カスタム コードを使用して各フレームを YV12 に変換し、それでもリアルタイムで十分に高速であることを期待することです。または、何か不足していますか?
古い QuickTime では、 kYUV420PixelFormat を使用してGWorldを設定するのは比較的簡単で、それに Movie をレンダリングするだけでうまくいきました。しかし、古い QuickTime 呼び出しはレガシーで非推奨の呼び出しであり、もはや使用されません...
不要な変換なしで YUV420 平面フレームを取得するにはどうすればよいですか?