IOS 操作完成后如何释放 vImage 缓冲区
how to free vImage buffers after operation completed in IOS
我尝试在 Accelerate 框架中使用 vImage 缓冲区进行一些直方图计算,并且我将相机图像作为从 CVpixelbuffer 转换而来的 UIimage 提供。算法运行没有错误,但屏幕上处理的相机图像数据非常慢。我在 Apple 文档中阅读了一些有关在任务完成时释放缓冲区的信息。我在抓取缓冲区数据后写了两行代码。然而什么都没有改变。 freed.SourceBuffer 和 histogramSourceBuffer 似乎未被释放后,请参阅缓冲区数据的附加屏幕截图。我不知道如何在调试器中看到空闲缓冲区,但我的缓冲区显示有高度、宽度和数据信息。关于如何释放缓冲区以及如何确保它被释放的任何建议。非常感谢
if let finalImage = try? sourceBuffer.createCGImage(format: format) {
sourceBuffer.free()
histogramSourceBuffer.free()
return UIImage(cgImage: finalImage)
您需要在 vImage_Buffer.data 指针上调用 free() 来释放内存。结构本身是一个不同的分配。
直方图本身是指向 vImagePixelCounts 数组的指针数组。应该根据您分配 vImagePixelCounts 数组的方式释放它。 vImage 不涉及该部分,因此它在您和您之间。
我尝试在 Accelerate 框架中使用 vImage 缓冲区进行一些直方图计算,并且我将相机图像作为从 CVpixelbuffer 转换而来的 UIimage 提供。算法运行没有错误,但屏幕上处理的相机图像数据非常慢。我在 Apple 文档中阅读了一些有关在任务完成时释放缓冲区的信息。我在抓取缓冲区数据后写了两行代码。然而什么都没有改变。 freed.SourceBuffer 和 histogramSourceBuffer 似乎未被释放后,请参阅缓冲区数据的附加屏幕截图。我不知道如何在调试器中看到空闲缓冲区,但我的缓冲区显示有高度、宽度和数据信息。关于如何释放缓冲区以及如何确保它被释放的任何建议。非常感谢
if let finalImage = try? sourceBuffer.createCGImage(format: format) {
sourceBuffer.free()
histogramSourceBuffer.free()
return UIImage(cgImage: finalImage)
您需要在 vImage_Buffer.data 指针上调用 free() 来释放内存。结构本身是一个不同的分配。
直方图本身是指向 vImagePixelCounts 数组的指针数组。应该根据您分配 vImagePixelCounts 数组的方式释放它。 vImage 不涉及该部分,因此它在您和您之间。