captureOutput在切换CIFilter后停止被调用

问题描述 投票:0回答:1

我使用此功能来更改相机预览中的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
    }

}
swift xcode avfoundation
1个回答
0
投票

我想系统无法跟上图像的渲染。 UIImageView并不意味着要以每秒30帧的速度显示新图像,同时还要在其上添加过滤条件。

更有效的方法是直接渲染到MTKView。我鼓励您检查AVCamFilter example project以了解如何完成此操作。

© www.soinside.com 2019 - 2024. All rights reserved.