Я хочу записывать изображения, созданные с помощью OpenGL, в файл фильма с помощью AVAssetWriter
. Возникает проблема, что единственный способ доступа к пикселям из фреймбуфера OpenGL - это использование glReadPixels, которое поддерживает только формат RGBA-пикселей в iOS. Но AVAssetWriter
не поддерживает этот формат. Здесь я могу использовать ARGB или BGRA. Поскольку альфа-значения могут быть проигнорированы, я пришел к выводу, что самый быстрый способ конвертировать RGBA в ARGB бы дать glReadPixels буфер сдвинут на один байт:Преобразование RGBA в ARGB (glReadPixels -> AVAssetWriter)
UInt8 *buffer = malloc(width*height*4+1);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer+1);
Проблема в том, что в glReadPixels
вызов приводит к аварии EXC_BAD_ACCESS
. Если я не сдвигаю буфер на один байт, он отлично работает (но, очевидно, с неправильными цветами в видео-файле). В чем проблема?
не могли бы вы вместо того, чтобы выделить размер + 4, отправить буфер + 4 в glReadPixels вызов, а затем буфер + 3 к AVAssetWriter? Это позволит выровнять GL-вызов, который может быть требованием для iOS. –