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