【发布时间】:2020-06-23 01:56:12
【问题描述】:
我正在维护从AVCaptureSynchronizedData 获得的一组数据。我使用的一种方法是修改从AVCaptureSynchronizedData 获得的CVPixelBuffers。修改时。 CVPixelBuffer,我通过
CVPixelBuffer 的副本
let status = CVPixelBufferCreateWithBytes(nil, scaleWidth, scaleHeight,
pixelFormat, destData,
destBytesPerRow, releaseCallback,
nil, nil, &dstPixelBuffer)
releaseCallBack 被引用为
let releaseCallback: CVPixelBufferReleaseBytesCallback = { _, ptr in
if let ptr = ptr {
free(UnsafeMutableRawPointer(mutating: ptr))
}
}
但是,我希望能够跟上这被调用的次数。但是,如果我添加类似
var num:Int = 0
let releaseCallback: CVPixelBufferReleaseBytesCallback = { _, ptr in
if let ptr = ptr {
num += 1
free(UnsafeMutableRawPointer(mutating: ptr))
}
}
我得到了错误
不能从捕获上下文的闭包中形成 C 函数指针
不确定是否有可能,但能够记录指针被销毁的次数会非常有用
【问题讨论】:
-
可能有帮助:stackoverflow.com/a/33262376/1187415。 – 问题是(我假设)
num是一个实例变量,因此闭包实际上捕获了self。 -
正确。它是隐含的 self.num
-
问题是,我无法更改回调类型,因为它严格来说是在 Swift 中创建的类型。它正在寻找那个特定的回调。我相信其他解决方案对其进行了一些修改
标签: swift unsafe-pointers cvpixelbuffer unsafemutablepointer