Есть ли способ заставить GPUImageView выводить существующий CMSampleBuffer?

Я хочу использовать GPUImageView выводить CMSampleBuffer который я получаю от моего AVCaptureVideoDataOutputSampleBufferDelegate, Так что, по сути, я не хочу, чтобы инфраструктура GPUImage управляла AVCaptureSession Я просто хочу нарисовать то, что передам. Тем не менее я не вижу очевидного и простого способа сделать это. Это вообще возможно?

1 ответ

Вот что вы можете сделать быстро и просто:

1. Установите GPUImage с помощью GPUImageView, чтобы вывести кадры как обычно. Также как они делают это на примерах.

  1. Погрузитесь в класс GPUImageVideoCamera. Добавьте туда делегата. Как один:

    @protocol GPUImageVideoCameraDelegate @optional

    • (void) videoCameraCaptureOutput: (AVCaptureOutput *) captureOutput didOutputSampleBuffer: (CMSampleBufferRef) sampleBuffer fromConnection: (AVCaptureConnection *) соединение; @конец
  2. Перейдите к GPUImageVideoCamera.m, найдите: - (void) captureOutput: (AVCaptureOutput *) captureOutput didOutputSampleBuffer: (CMSampleBufferRef) sampleBuffer fromConnection: (AVCaptureConnection *) метод соединения.

  3. Добавьте туда свой делегатский звонок.

if (self.delegate) {[self.delegate videoCameraCaptureOutput: captureOutput didOutputSampleBuffer: sampleBuffer fromConnection: connection]; }

  1. Установите свой контроллер / класс / что угодно в качестве делегата, videoCamera.delegate = self;

  2. Используйте метод делегата в вашем классе и делайте все что угодно с CMSampleBufferRef.

Убедитесь, что вы работаете с CMSampleBufferRef "на месте", то есть не копируйте его в память ЦП, если хотите избежать использования относительно медленного ЦП по сравнению с более быстрым ГП.

Оттуда вы можете установить любое изображение в CMSampleBufferRef.

Другие вопросы по тегам