CoreVideoTools

Platform Compatibility Swift Version

概述

CoreVideoTools 为 CoreVideo 功能提供了一个更符合 Swift 习惯的接口,使其在 Swift 代码中更容易、更安全地使用 CVPixelBuffersIOSurfaces 和相关的 CoreVideo 概念。

请参阅软件包的文档,获取更详细的使用说明。

CVPixelBuffer

这里有很多对原始 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 中查看更多示例。

IOSurface

便捷初始化

let surface = try IOSurface.create(
    width: 1920,
    height: 1080,
    cvPixelFormat: .type_32BGRA,
    bytesPerElement: 4,
    bytesPerRow: 1920 * 4
)

有关更多详细信息,请查看 使用 IOSurface

CVPixelFormat

在调试 Core Video 对象时,您需要了解其中使用的像素格式。 使用原始 API 执行此操作时,您必须找到匹配的 OSType 值,因为 OSType 本质上是一个数字。 此项目使用 CVPixelFormat 枚举来代替原始的 OSType 公共变量,这更加方便,并且您可以轻松获取当前像素格式的 description

let cvPixelFormat: CVPixelFormat = cvPixelBuffer.cvPixelFormat
let description = cvPixelFormat.description

CVReturn Result & CVError

Core Video 中有一些函数会返回一个代码,以指示操作是否成功。 本项目旨在简化此错误检查。 CVReturn ResultCVError 类型用于将原始 API 包装为可抛出异常的函数。

原始 API

let returnCode = CVPixelBufferLockBaseAddress(cvPixelBuffer, lockFlags)
guard returnCode == kCVReturnSuccess else { /* handle the error ... */ }

Swifty API

try cvPixelBuffer.lockBaseAddress(lockFlags: lockFlags)

许可证

MetalTools 在 MIT 许可证 下发布。