我使用此功能来更改相机预览中的CIFilter。它可以正常工作,但是以某种方式切换了多个滤镜之后,captureOutput停止调用,并且预览卡在最后捕获的图像上。它不会返回我的“警卫让过滤器”。该应用程序不会崩溃-当我关闭相机并重新打开它时,它可以再次运行。
我如何防止这种行为?
func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!)
{
guard let filter = Filters[FilterNames[currentFilter]] else
{
return
}
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
let cameraImage = CIImage(CVPixelBuffer: pixelBuffer!)
filter!.setValue(cameraImage, forKey: kCIInputImageKey)
let filteredImage = UIImage(CIImage: filter!.valueForKey(kCIOutputImageKey) as! CIImage!)
dispatch_async(dispatch_get_main_queue())
{
self.imageView.image = filteredImage
}
}
我想系统无法跟上图像的渲染。 UIImageView
并不意味着要以每秒30帧的速度显示新图像,同时还要在其上添加过滤条件。
更有效的方法是直接渲染到MTKView
。我鼓励您检查AVCamFilter example project以了解如何完成此操作。