Core Video
概要
映像処理のための Framework。Metal や OpenGL をサポートしている。映像処理を扱いやすくするために、パイプラインベースの API を提供している。パイプラインベースの API とは、連続した映像に対して、開発者が前後のフレーム間のためのデータ変換や同期などを意識することなく、個々のフレームに対する処理のみに集中できるように設計された API のことを言っているようだ。
映像を扱う場合で、さらに個々のフレームに対して処理を加えたいような場合に、Core Video は威力を発揮する。
https://developer.apple.com/documentation/corevideo
Core Video Programming Guide
データとのやり取り
visual context
描画先に合わせたコンテキストオブジェクト
Core Graphics とか OpneGL とか
まずこれに割り当てて、それから frame をいじっていく
display link
描画の同期をとるための仕組み
ディスプレイの refresh rate に合わせて映像のフレームを同期する必要がある
Core Video が提供する特別なタイマー
アプリの動作に影響しないような、優先度の高めな別スレッドで動いている
まだよくわからない
バッファの管理
映像や音声のある瞬間のフレームに対して何か処理を行う場合、処理中はそのフレーム情報をメモリ上に保持, 管理しておく必要があるし、必要に応じてバッファの種別の変換する必要もある。Core Video では、これらの操作を CoreFoundation Framework のオブジェクトライクに行えるようにするための I/F として CVBuffer 抽象クラスを提供している。
CVBuffer を基底クラスとして、映像や音声等の様々なデータバッファーが定義されている。
CVImageBuffer
映像のフレーム画像を保持する。OpenGL buffer, pixel buffer の super class
CVPixelBuffer
画像をメモリに保持する
Core Video でバッファを扱う場合、buffer pool として一定量のメモリがすでに割り当てられているため、必要に応じた割り当てと開放のオーバーヘッドがない。この量は変更することもできる
バッファを扱う場合、Buffer Pool を作成しておくのが推奨されている。Buffer Pool は、必要に応じて再利用可能なバッファ分のメモリを予め割り当てておく仕組みであり、利用することでメモリの割り当て/開放のオーバーヘッドを低減できる。
CVBuffer | Apple Developer Documentation