4

我有一个应用程序,它反复告诉一个VNImageRequestHandler对象执行VNDetectFaceRectanglesRequestCVPixelBufferiOS 相机传递给我的一个。

我经常看到来自 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。

有任何想法吗?

4

0 回答 0