¿Cómo aplicar un CIFilter de Vignette a una alimentación de cámara en vivo en iOS?

ientras trato de aplicar un filtro de viñeta simple a la alimentación de la cámara sin procesar de un iPhone6, con la ayuda de Metal y Core Image, veo un gran retraso entre los marcos que se procesan y procesan en unaMTKView

El enfoque que he seguido es (MetalViewController.swift):

Obtenga una salida de cámara sin formato conAVCaptureVideoDataOutputSampleBufferDelegateConvertCMSampleBuffer > CVPixelBuffer > CGImageCrear unMTLTexture con esteCGImage.

Point no. 2 y 3 están dentro del método llamado:fillMTLTextureToStoreTheImageData

Aplicar unaCIFilter alCIImage obtenido de laMTLTexture en elMTKViewDelegate
    func draw(in view: MTKView) {

        if let currentDrawable = view.currentDrawable {
            let commandBuffer = self.commandQueue.makeCommandBuffer()

            if let myTexture = self.sourceTexture{

                let inputImage = CIImage(mtlTexture: myTexture, options: nil)

                self.vignetteEffect.setValue(inputImage, forKey: kCIInputImageKey)

                self.coreImageContext.render(self.vignetteEffect.outputImage!, to: currentDrawable.texture, commandBuffer: commandBuffer, bounds: inputImage!.extent, colorSpace: self.colorSpace)

                commandBuffer?.present(currentDrawable)

                commandBuffer?.commit()
            }
        }
    }

El rendimiento no es lo que Apple mencionó en este documento:https: //developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_tasks/ci_tasks.html#//apple_ref/doc/uid/TP30001185-CH3-TPXREF10

¿Me estoy perdiendo de algo

Respuestas a la pregunta(1)

Su respuesta a la pregunta