【问题标题】:captureOutput stops being called after switching CIFilters切换 CIFilter 后停止调用 captureOutput
【发布时间】:2020-07-24 23:50:46
【问题描述】:

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

    我猜系统跟不上图像的渲染速度。 UIImageView 并不是要以每秒 30 帧的速度显示新图像,同时还要在其上添加过滤。

    更有效的方法是直接渲染到MTKView。我鼓励您查看AVCamFilter example project 了解如何做到这一点。

    【讨论】:

      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多