captureOutput перестает вызываться после переключения CIFilters - PullRequest
0 голосов
/ 12 апреля 2020

Я использую эту функцию, чтобы изменить CIFilter в окне предварительного просмотра камеры. Работает как надо, но почему-то после переключения нескольких фильтров captureOutput перестает вызываться, и предварительный просмотр застревает на последнем захваченном изображении. Он не возвращается на мой "фильтр охраны". Приложение не обрабатывает sh - когда я закрываю камеру и снова открываю ее, оно снова работает.

Как я могу предотвратить такое поведение?

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
    }

}

1 Ответ

0 голосов
/ 14 апреля 2020

Полагаю, система не успевает за рендерингом изображений. UIImageView не предназначен для отображения новых изображений со скоростью 30 кадров в секунду, а также добавляет фильтрацию к этому.

Гораздо более эффективным способом было бы сделать рендеринг непосредственно в MTKView. Я рекомендую вам проверить пример AVCamFilter , чтобы увидеть, как это можно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...