ios - 在 Swift 2.0 中创建 CMSampleBuffer 的副本

标签 ios swift2 avfoundation unsafe-pointers core-media

以前有人问过这个问题,但自从有人问起之后,Swift 中肯定发生了一些变化。我正在尝试存储从 AVCaptureSession 返回的 CMSampleBuffer 对象,以便稍后处理。经过一些实验,我发现 AVCaptureSession 必须重用其 CMSampleBuffer 引用。当我尝试保持超过 15 个时, session 挂起。所以我想我会制作样本缓冲区的副本。但我似乎无法让它发挥作用。这是我写的:

var allocator: Unmanaged<CFAllocator>! = CFAllocatorGetDefault()
var bufferCopy: UnsafeMutablePointer<CMSampleBuffer?>
let err = CMSampleBufferCreateCopy(allocator.takeRetainedValue(), sampleBuffer, bufferCopy)
if err == noErr {
    bufferArray.append(bufferCopy.memory!)
} else {
    NSLog("Failed to copy buffer. Error: \(err)")
}

这不会编译,因为它说 Variable 'bufferCopy' used before being initialized。我看过很多示例,它们要么编译但无法运行,要么无法编译。

有人看到我在这里做错了什么吗?

最佳答案

您可以简单地传递一个 CMSampleBuffer? 变量(作为可选的, 被隐式初始化为 nil) 作为 inout 参数 &:

var bufferCopy : CMSampleBuffer?
let err = CMSampleBufferCreateCopy(kCFAllocatorDefault, buffer, &bufferCopy)
if err == noErr {
    // ...
}

关于ios - 在 Swift 2.0 中创建 CMSampleBuffer 的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35467847/

相关文章:

ios - AVMutableVideoComposition 停止渲染视频

ios - 使用动画 UIView 覆盖从相机录制视频

iphone - 是否可以追踪拨出电话和短信?

html - 样式化滚动选择器

ios - 如何在 TableView Cell 中创建长按按钮以进行 segue

ios - did设置使用建议?

Swift:守卫 let 与 if let

ios - CloudKit fetchRecordChangesOperation 给出了 "AppDefaultZone does not support sync semantics"

ios - 向 Swift 2 中的类添加 'for...in' 支持

iOS AVFoundation 设置曝光值,以 EV 为单位