CoreVideoTools 为 CoreVideo
功能提供了一个更符合 Swift 习惯的接口,使其在 Swift 代码中更容易、更安全地使用 CVPixelBuffers
、IOSurfaces
和相关的 CoreVideo
概念。
请参阅软件包的文档,获取更详细的使用说明。
这里有很多对原始 CVPixelBuffer C 风格 API 的 Swift 封装。
Swifty API
let width = pixelBuffer.width
let height = pixelBuffer.height
let format = pixelBuffer.cvPixelFormat
let bytesPerRow = pixelBuffer.bytesPerRow
便捷初始化
let pixelBuffer = try CVPixelBuffer.create(
width: 1920,
height: 1080,
cvPixelFormat: .type_32BGRA
)
请在 使用 CVPixelBuffer 中查看更多示例。
便捷初始化
let surface = try IOSurface.create(
width: 1920,
height: 1080,
cvPixelFormat: .type_32BGRA,
bytesPerElement: 4,
bytesPerRow: 1920 * 4
)
有关更多详细信息,请查看 使用 IOSurface。
在调试 Core Video
对象时,您需要了解其中使用的像素格式。 使用原始 API 执行此操作时,您必须找到匹配的 OSType
值,因为 OSType
本质上是一个数字。 此项目使用 CVPixelFormat
枚举来代替原始的 OSType
公共变量,这更加方便,并且您可以轻松获取当前像素格式的 description
。
let cvPixelFormat: CVPixelFormat = cvPixelBuffer.cvPixelFormat
let description = cvPixelFormat.description
Core Video 中有一些函数会返回一个代码,以指示操作是否成功。 本项目旨在简化此错误检查。 CVReturn
Result
和 CVError
类型用于将原始 API 包装为可抛出异常的函数。
原始 API
let returnCode = CVPixelBufferLockBaseAddress(cvPixelBuffer, lockFlags)
guard returnCode == kCVReturnSuccess else { /* handle the error ... */ }
Swifty API
try cvPixelBuffer.lockBaseAddress(lockFlags: lockFlags)
MetalTools 在 MIT 许可证 下发布。