iOS: конвертировать CMSampleBuffer в UIImage, вернуть изображение с неправильным направлением и пропорцией - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь обработать видео в реальном времени с камеры iPhone с помощью функции AVCaptureVideoDataOutputSampleBufferDelegate.

Видео было отредактировано, но направление видео изменилось, а пропорция видео странная.

Я использую следующий код для редактирования видео.

 override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    guard let captureDevice = AVCaptureDevice.default(for: .video) else { return }
    guard let input = try? AVCaptureDeviceInput(device: captureDevice) else { return }
    captureSession.addInput(input)
    let dataOutput = AVCaptureVideoDataOutput()
    dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
    captureSession.addOutput(dataOutput)
    let preview = AVCaptureVideoPreviewLayer(session: captureSession)
    preview.frame = cview.frame
    cview.layer.addSublayer(preview) 
    captureSession.startRunning()

}

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {

            let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
            let cameraImage = CIImage(cvPixelBuffer: imageBuffer!)
            let comicEffect = CIFilter(name: "CIComicEffect")

            comicEffect!.setValue(cameraImage, forKey: kCIInputImageKey)

            let filteredImage = UIImage(ciImage: comicEffect!.value(forKey: kCIOutputImageKey) as! CIImage!)

            DispatchQueue.main.async {
                self.image.image = filteredImage
            }

}

И он возвращает следующий вывод:

image output

Чтобы сделать изображение проще для сравнения, я убрал comicEffect: image without comic effect

Правильная пропорция должна быть такой:

image with correct proportion

Могу ли я узнать, как решить эту проблему?

...