OpenGL ES: сохранение серии текстур в виде файла фильма - PullRequest
2 голосов
/ 03 февраля 2011

Я взял живые видеокадры с камеры iPhone и применил их в качестве текстуры к плоской геометрии OpenGL, чтобы использовать шейдеры для обработки ввода с камеры.Кто-нибудь знает, возможно ли затем захватить обработанные текстуры и сохранить их в файле фильма?

Кажется, что это займет много вычислительной мощности, и я не уверен, что лучший способ продолжитьэто - или если это вообще возможно.Мотивация заключается в том, чтобы иметь возможность создавать интересные шейдерные эффекты для видео, снятого с камеры, а затем сохранять результаты, чтобы делиться ими с другими.

Заранее спасибо за ваши мысли.

1 Ответ

5 голосов
/ 03 февраля 2011

Я не могу комментировать производительность, но вы хотите:

  • создать AVAssetWriter (который может принимать входящие сэмплы и записывать их в H.264; нетдругие форматы файлов, похоже, поддерживаются в текущем выпуске iOS)
  • присоединяет AVAssetWriterInput к устройству записи ресурса для предоставления видеокадров (поскольку средство записи ресурса принимает один или несколько входных данных, каждый для обеспечения различных аспектовasset);
  • присоедините AVAssetWriterInputPixelBufferAdaptor ко входу модуля записи ресурсов, чтобы можно было выдвигать пиксельные буферы на входе.Вы захотите сообщить входным данным средства записи ресурсов, что они ожидают мультимедийные данные в режиме реального времени.Это говорит о том, что вы всегда должны быть готовы к вводу.Вы можете указать синхронизацию фреймов, как и когда вы предоставляете фреймы, так что это не накладывает требования к производительности на остальную часть вашего кода.

Оттуда, вам просто нужно вставить CVImageBuffers в ваш пиксельбуферный адаптер.В OS X есть удобный тип буфера Core Video OpenGL, но в iOS он отсутствует.Вместо этого вам нужно glReadPixels рядом с CVPixelBufferCreate и т. Д., Заблокировав пиксельный буфер и записав его непосредственно по его базовому адресу.Надеемся, что вы получите что-то, что вы можете передать непосредственно в OpenGL, без необходимости перетасовывать байты между ними.

Предположим, что у iPhone есть специальный кодер H.264, основным узким местом производительности, вероятно, будут glReadPixels, из-за чеговсе, что находится в буфере кадров, должно быть передано и переформатировано для ЦП.Если вы все настроите, а результаты покажутся медленными, я бы сначала изучил их.

...