在NSOperation中运行时,Core Image过滤器会间歇性地崩溃

时间:2018-04-14 08:07:06

标签: ios nsoperationqueue nsoperation core-image metal

我在Core Image中运行了一个简单的NSOperation过滤器。它大部分时间都可以工作,但是,它会偶尔崩溃(其余的代码永远不会崩溃而不会使用Core Image )。当它崩溃时,它总是具有指向MetalTools-[MTLDebugComputeCommandEncoder setSamplerState:atIndex:]的相同回溯。

通常我只对每个图像运行一次滤镜,但是如果我将滤镜放在for循环中并且每个图像运行50次,它通常会在{{1}处理的第10和第20个图像之间崩溃。 }。但是反复运行会使崩溃在大多数情况下都是可重现的。

这是我的核心图像过滤器:

NSOperationQueue

当它崩溃时,它总是在调用func adjustImage(withSaturation saturation: Float, image: UIImage!) -> UIImage? { let ciimage = CIImage.init(cgImage: image.cgImage!) if self.isCancelled {return nil} let filter = CIFilter.init(name: "CIColorControls") filter?.setValue(ciimage, forKey: kCIInputImageKey) filter?.setValue(saturation, forKey: kCIInputSaturationKey) if self.isCancelled {return nil} let result = filter?.value(forKey: kCIOutputImageKey) as! CIImage if self.isCancelled {return nil} let context = CIContext.init(options: nil) if self.isCancelled {return nil} //When it crashes, it always crashes on the following line: if let cgimage = context.createCGImage(result, from: result.extent) { if self.isCancelled {return nil} let image = UIImage.init(cgImage: cgimage) if self.isCancelled {return nil} return image } return nil }

的同一行崩溃

context.createCGImage()过滤器不是线程安全的吗?这就是它的样子。

这是回溯:

Core Image

0 个答案:

没有答案