在Swift 2.0中创build一个CMSampleBuffer的副本
这已经被问过了,但是自从被问到以后,Swift肯定会发生一些变化。 我试图存储从AVCaptureSession
返回的CMSampleBuffer
对象稍后处理。 经过一番实验,我发现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
了Variable 'bufferCopy' used before being initialized
。 我看了很多例子,他们会编译或不工作,否则他们不会编译。
有人看到我在这里做错了吗?
从字面上看,您正试图在初始化之前使用variablesbufferCopy。
你已经为它声明了一个types,但是没有分配它指向的内存。
您应该使用以下调用创buildCMSampleBuffers https://developer.apple.com/library/tvos/documentation/CoreMedia/Reference/CMSampleBuffer/index.html#//apple_ref/c/func/CMSampleBufferCreate
您应该可以将缓冲区复制到此缓冲区(只要缓冲区的格式与您正在复制的缓冲区的格式相匹配即可)。
你可以简单地通过一个CMSampleBuffer?
variables(作为一个可选项,用nil
隐含地初始化)
var bufferCopy : CMSampleBuffer? let err = CMSampleBufferCreateCopy(kCFAllocatorDefault, buffer, &bufferCopy) if err == noErr { // ... }