Cree CVPixelBuffer desde YUV con IOSurface respaldado
Por lo tanto, obtengo datos YUV sin procesar en 3 matrices separadas de una devolución de llamada de red (aplicación voip). Por lo que entiendo, no puede crear búferes de píxeles respaldados por IOSurface conCVPixelBufferCreateWithPlanarBytes
de acuerdo aaquí
Importante: No puede usar CVPixelBufferCreateWithBytes () o CVPixelBufferCreateWithPlanarBytes () con kCVPixelBufferIOSurfacePropertiesKey. Llamar a CVPixelBufferCreateWithBytes () o CVPixelBufferCreateWithPlanarBytes () dará como resultado CVPixelBuffers que no están respaldados por IOSurface
Así que tienes que crearlo conCVPixelBufferCreate
, pero ¿cómo transfiere los datos de la llamada aCVPixelBufferRef
que creas?
- (void)videoCallBack(uint8_t *yPlane, uint8_t *uPlane, uint8_t *vPlane, size_t width, size_t height, size_t stride yStride,
size_t uStride, size_t vStride)
NSDictionary *pixelAttributes = @{(id)kCVPixelBufferIOSurfacePropertiesKey : @{}};
CVPixelBufferRef pixelBuffer = NULL;
CVReturn result = CVPixelBufferCreate(kCFAllocatorDefault,
width,
height,
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
(__bridge CFDictionaryRef)(pixelAttributes),
&pixelBuffer);
No estoy seguro de qué hacer después aquí. Eventualmente quiero convertir esto en un CIImage que luego puedo usar mi GLKView para renderizar el video. ¿Cómo la gente "pone" los datos en los buffers desde que los crea?