Rob*_*Rob 5 unsafe-pointers avfoundation core-media ios swift2
以前曾经问过这个问题,但是有问题的话,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)")
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为它说Variable 'bufferCopy' used before being initialized.我看了很多例子,他们要么编译也不能工作,否则他们就不会编译.
有谁看到我在这里做错了什么?
你可以简单地传递一个CMSampleBuffer?变量(作为一个可选的,隐式初始化的nil)作为inout参数
&:
var bufferCopy : CMSampleBuffer?
let err = CMSampleBufferCreateCopy(kCFAllocatorDefault, buffer, &bufferCopy)
if err == noErr {
// ...
}
Run Code Online (Sandbox Code Playgroud)
从字面上看,您试图在变量 bufferCopy 初始化之前使用它。
您已为其声明了类型,但尚未分配其指向的内存。
您应该使用以下调用创建 CMSampleBuffers https://developer.apple.com/library/tvos/documentation/CoreMedia/Reference/CMSampleBuffer/index.html#//apple_ref/c/func/CMSampleBufferCreate
然后您应该能够将缓冲区复制到其中(只要缓冲区的格式与您从中复制的格式匹配)。
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |