Создание IOSurface-поддержанного CVPixelBuffers для доступа к видеоданным в OpenGL ES
Q: Почему CVOpenGLESTextureCacheCreateTextureFromImage() возврат ошибки-6683?
A: Причина CVOpenGLESTextureCacheCreateTextureFromImage() возвращается kCVReturnPixelBufferNotOpenGLCompatible (-6683) ошибка состоит в том, что не IOSurface-поддерживается буфер исходного пикселя.
Создать a CVOpenGLESTexture возразите успешно, пиксельный буфер передал CVOpenGLESTextureCacheCreateTextureFromImage() должен быть поддержан IOSurface. Чтобы сделать это, необходимо указать kCVPixelBufferIOSurfacePropertiesKey в pixelBufferAttributes словарь при создании пиксельного буферного использования CVPixelBufferCreate(). См. Перечисление 1 для примера:
Перечисление 1 , создающее IOSurface-поддержанный CVPixelBuffer с CVPixelBufferCreate()
NSDictionary *pixelBufferAttributes = [NSDictionary dictionaryWithObjectsAndKeys: |
[NSDictionary dictionary], (id)kCVPixelBufferIOSurfacePropertiesKey, |
nil]; |
// you may add other keys as appropriate, e.g. kCVPixelBufferPixelFormatTypeKey, kCVPixelBufferWidthKey, kCVPixelBufferHeightKey, etc. |
CVPixelBufferRef pixelBuffer; |
CVPixelBufferCreate(... (CFDictionaryRef)pixelBufferAttributes, &pixelBuffer); |
Также можно сделать IOSurface-поддержанное использование CVPixelBuffers CVPixelBufferPoolCreatePixelBuffer() от существующего пиксельного пула буферов, если pixelBufferAttributes словарь обеспечил для CVPixelBufferPoolCreate() включает kCVPixelBufferIOSurfacePropertiesKey.
История версии документа
| Дата | Примечания |
|---|---|
| 17.03.2014 | Новый документ, описывающий, как создать IOSurface-поддержанный CVPixelBuffer для создания CVOpenGLESTexture из него. |