Итак, я получаю сырые данные YUV в 3 отдельных массивах из сетевого обратного вызова (приложение voip). Из того, что я понимаю, что вы не можете создать IOSurface поддержанные пиксельных буферов с CVPixelBufferCreateWithPlanarBytes
согласно hereСоздайте CVPixelBuffer из YUV с поддержкой IOSurface
Важно: Вы не можете использовать CVPixelBufferCreateWithBytes() или CVPixelBufferCreateWithPlanarBytes() с kCVPixelBufferIOSurfacePropertiesKey. Вызов CVPixelBufferCreateWithBytes() или CVPixelBufferCreateWithPlanarBytes() приведет к CVPixelBuffers, не IOSurface поддерживаемыми
Итак, таким образом, вы должны создать его с CVPixelBufferCreate
, но как передать данные от обратного вызова к CVPixelBufferRef
что вы создаете?
- (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);
Я не уверен, что делать после этого здесь? В конце концов я хочу превратить это в CIImage, который затем я могу использовать свой GLKView для рендеринга видео. Как люди «помещают» данные в буферы, когда вы его создаете?
Пожалуйста, укажите код для самолетов U и V и numberOfElementsForChroma – JULIIncognito
@JULIIncognito uvPlane является просто я думаю, массив uint_8. Это так давно жаль. numberOfElementsForChroma будет только тем фиксированным размером, который вам нужен. – cvu
@JULIIncognito IsOneElementsForChroma такой же ширины * высота? Потому что он не работает. – lilouch