CVPixelBuffer
概要
メモリ上にピクセルデータを保持しているバッファ。このバッファを元に、ビデオフレームを生成したり、圧縮/解凍したり、Core Image で扱ったりすることができる。 バッファには様々な属性を設定できるようになっている。ピクセルデータの幅や高さに加え、パディング、他データ (Metal や OpenGL 等) への互換性などが設定できる。以下に主なものを列挙する kCVPixelBufferWidthKey
バッファの幅
kCVPixelBufferHeightKey
バッファの高さ
kCVPixelBufferPixelFormatTypeKey
kCVPixelBufferMetalCompatibilityKey
サイズやフォーマットを指定して pixel buffer を生成する。これを利用すると、指定したフォーマットや属性に基づいて必要なメモリが割り当てられる。この時、属性として指定した設定よりも引数として渡された設定の方が優先される。例えば、kCVPixelBufferWidth, kCVPixelBufferHeight が属性として指定されても、引数の width, height の設定が優先される。
この関数は呼び出すたびにメモリの割り当て行う。そのため、頻繁に呼び出すことは推奨されない。頻繁い呼び出す場合は、代わりに buffer pool を利用する。
pixel buffer pool から pixel buffer を生成する。生成される pixel buffer の属性設定は、pixel buffer pool に設定された属性設定に準拠する。
CVPixelBufferLockBaseAddress(_:_:) は、CPUから ピクセルデータにアクセスする場合に呼び出す必要があり、アクセスが終了した場合には CVPixelBufferUnlockBaseAddress(_:_:) を呼び出す必要がある。GPUから バッファにアクセスする場合は呼び出す必要はなく、呼び出すとむしろパフォーマンスに悪影響が出る。