尝试编译以下代码,我得到上面的错误:
let ref = CMSampleBufferGetImageBuffer(sampleBuffer)
let image = CIImage(CVImageBuffer: ref)
据我所知,CIImage有一个初始化器,它只接受CVImageBuffer(它有另一个初始化器,也接受一个选项参数)。如果我尝试提供这个,就会得到一个错误我有一个额外的参数叫做options, blurgh)
有什么办法解决这个问题吗?
很简单!原来问题是我没有在。
中传递正确的类型的引用。 let ref = CMSampleBufferGetImageBuffer(sampleBuffer)
行实际上将ref
声明为Unmanaged<>
结构值,这意味着API没有被正确注释,以指示ARC应该解释哪种保留/不保留关系。它基本上被认为是一个松散的经典。
所以我要做的是明确地告诉编译器给我一个未保留的版本,然后代码工作得很好。
let ref : CVImageBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer).takeUnretainedValue()
let image = CIImage(CVImageBuffer: ref)