我有一个应用程序,它反复告诉一个VNImageRequestHandler
对象执行VNDetectFaceRectanglesRequest
从CVPixelBuffer
iOS 相机传递给我的一个。
我经常看到来自 Fabric 的崩溃,如下所示:
#0 Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000
0 CoreVideo
CVPixelBufferGetWidth + 20
在将扩展程序传递给这样的愿景之前,我已经尝试并验证了我CVPixelBuffer
是否使用了扩展程序:
var isValid: Bool {
let cvBufferWidth = CVPixelBufferGetWidth(self)
let cvBufferHeight = CVPixelBufferGetHeight(self)
let size = CVPixelBufferGetDataSize(self)
let bytesPerRow = CVPixelBufferGetBytesPerRow(self)
guard cvBufferWidth > 0 && cvBufferHeight > 0 && size > 0 && bytesPerRow > 0 else {
return false
}
return true
}
我也一次只处理一个CVPixelBuffer
(Apple 有一个示例项目,在评论中说这是最佳实践)。
我应该怎么办?我似乎无法摆脱这个错误!我应该锁定CVPixelBuffer
的基地址吗?
CVPixelBufferLockBaseAddress(self, CVPixelBufferLockFlags.readOnly)
Apple 说如果使用 GPU 就不要这样做,而且我知道 Vision 在某些情况下会使用 GPU。
有任何想法吗?