Технические вопросы и ответы QA1781

Создание 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 из него.