以前曾经问过这个问题,但是自从被问到以后,Swift的内容一定有所改变。我正在尝试存储从CMSampleBuffer
返回的AVCaptureSession
个对象,以便稍后处理。经过一些实验,我发现AVCaptureSession
必须重用其CMSampleBuffer
引用。当我试图保持超过15时会话挂起。所以我想我会复制样本缓冲区。但我似乎无法让它发挥作用。这是我写的:
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
。我看了很多例子,他们要么编译也不要工作,否则他们不会编译。
任何人都能看到我在这里做错了什么?
答案 0 :(得分:7)
您可以简单地传递CMSampleBuffer?
变量(作为可选项,
使用nil
}隐式初始化为inout参数
&
:
var bufferCopy : CMSampleBuffer?
let err = CMSampleBufferCreateCopy(kCFAllocatorDefault, buffer, &bufferCopy)
if err == noErr {
// ...
}
答案 1 :(得分:2)
字面意思是你在初始化之前尝试使用变量bufferCopy。
你已经为它声明了一个类型,但是没有分配它所指向的内存。
创建CMSampleBuffers您应该可以将缓冲区复制到此处(只要缓冲区的格式与您要复制的格式匹配)。