Есть ли способ заставить GPUImageView выводить существующий CMSampleBuffer?
Я хочу использовать GPUImageView
выводить CMSampleBuffer
который я получаю от моего AVCaptureVideoDataOutputSampleBufferDelegate
, Так что, по сути, я не хочу, чтобы инфраструктура GPUImage управляла AVCaptureSession
Я просто хочу нарисовать то, что передам. Тем не менее я не вижу очевидного и простого способа сделать это. Это вообще возможно?
1 ответ
Вот что вы можете сделать быстро и просто:
1. Установите GPUImage с помощью GPUImageView, чтобы вывести кадры как обычно. Также как они делают это на примерах.
Погрузитесь в класс GPUImageVideoCamera. Добавьте туда делегата. Как один:
@protocol GPUImageVideoCameraDelegate @optional
- (void) videoCameraCaptureOutput: (AVCaptureOutput *) captureOutput didOutputSampleBuffer: (CMSampleBufferRef) sampleBuffer fromConnection: (AVCaptureConnection *) соединение; @конец
Перейдите к GPUImageVideoCamera.m, найдите: - (void) captureOutput: (AVCaptureOutput *) captureOutput didOutputSampleBuffer: (CMSampleBufferRef) sampleBuffer fromConnection: (AVCaptureConnection *) метод соединения.
Добавьте туда свой делегатский звонок.
if (self.delegate) {[self.delegate videoCameraCaptureOutput: captureOutput didOutputSampleBuffer: sampleBuffer fromConnection: connection]; }
Установите свой контроллер / класс / что угодно в качестве делегата,
videoCamera.delegate = self;
Используйте метод делегата в вашем классе и делайте все что угодно с CMSampleBufferRef.
Убедитесь, что вы работаете с CMSampleBufferRef "на месте", то есть не копируйте его в память ЦП, если хотите избежать использования относительно медленного ЦП по сравнению с более быстрым ГП.
Оттуда вы можете установить любое изображение в CMSampleBufferRef.