2015-08-27 2 views
2

Итак, Брэд Ларсон потрясающий. Я использую его библиотеку GPUImage, так как он оптимизировал CGContextCreateImage для вывода видео, чтобы вместо этого работать прямо в OpenGL. Затем он переписал его еще более удивительно, и половина вопросов устарела. Другая половина имеет новые обратные вызовы, Like this question, но для жизни меня я не могу получить обратный вызов видеокадров, чтобы он не был ник. (функции CMSampleBuffer для CIImage)Возьмите изображение из willOutputSampleBuffer или связанного?

Я знаю, что мне нужно «пометить следующий кадр», который будет храниться в памяти, благодаря его блогу. Я также знаю, что я его обрабатываю (но GPUImageVideo тоже делает это), затем я берусь из фреймбуфера. Все еще ноль.

Команда захвата, которая должна автоматически фильтровать ее в CGImage, из функции processImageUpToFilter из CGImagePicture, похоже, является тем, что я хочу, и я видел, как это упоминалось, но я теряюсь относительно того, как подключить вывод к его frameBuffer.

Или использовать GPUImageRawDataOutput и как подключиться? Я копировал и вставлял, редактировал, экспериментировал, но не уверен, что это просто факт, что я не знаю, что openGL достаточно, чтобы подключить нужный материал или?

Любая помощь приветствуется. Я бы не стал спрашивать, потому что здесь так много связанных вопросов, но я использую их и все равно получаю нуль на выходе.

Вот моя текущая попытка:

func willOutputSampleBuffer(sampleBuffer: CMSampleBuffer!) { 
     gpuImageVideoCamera.useNextFrameForImageCapture() 
     //Next line seems like a waste, as this func is called in GPUImageVideoCamera already. 
     gpuImageVideoCamera.processVideoSampleBuffer(sampleBuffer); 
     if let image = gpuImageVideoCamera.imageFromCurrentFramebuffer() 
     { 
      //it's nil 
     } 
} 
+0

Обновление: У меня сейчас это работает, но что-то странно. Если я включу использование transformFilterNextFrameForImageCap, он замедляет работу камеры, окно предварительного просмотра получает около 0,2 кадра в секунду, но оно закрывает изображение в вызове willOutput еще с помощью transformFilter.imageFromCurrentFramebuffer. Использование видеоКамераNext, я не получил работу –

ответ

1

кажется использовать фильтр вместо этого, и useNextFrame должно быть после обработки не идти супер-медленно.

Внутри willOutputSampleBuffer, это он.

if let image = transformFilter.imageFromCurrentFramebuffer() 
    { 
     // image not nil now. 
    } 
    transformFilter.useNextFrameForImageCapture(); //enusre this comes after 

Это дало нам потрясающие скорости, которые избили библиотеку p2p Google. Брэд, спасибо, каждый должен поддержать ваши усилия.