2012-04-16 1 views
0

я получаю YUV кадры (kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange) и при создании CIImage из CVPixelBufferRef я получаю:initWithCVPixelBuffer не удался, поскольку CVPixelBufferRef не без IOSurface поддержки

initWithCVPixelBuffer не удался, потому что CVPixelBufferRef не без IOSurface поддержки.

CVPixelBufferRef pixelBuffer; 

size_t planeWidth[] = { width, width/2 }; 
size_t planeHeight[] = { height, height/2}; 
size_t planeBytesPerRow[] = { width, width/2 }; 

CVReturn ret = CVPixelBufferCreateWithBytes(
kCFAllocatorDefault, width, height, kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, 
data, bytesPerRow, 0, 0, 0, &pixelBuffer 
); 

if (ret != kCVReturnSuccess) 
{ 
    NSLog(@"FAILED"); 

    CVPixelBufferRelease(pixelBuffer); 

    return; 
} 

CVPixelBufferLockBaseAddress(pixelBuffer, 0); 

// fails 
CIImage * image = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer]; 

CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); 

CVPixelBufferRelease(pixelBuffer); 

[image release]; 
+0

Вы могли понять это? – cvu

ответ

6

я буду считать этот вопрос звучит так: «Почему я получаю эту ошибку?»

Чтобы создать резервную копию CVPixelBuffer, вам необходимо установить свойства в CVPixelBuffer при его создании. Прямо сейчас вы передаете «0» в качестве второго для последнего параметра в CVPixelBufferCreateWithBytes.

Pass словаря с ключом для kCVPixelBufferIOSurfacePropertiesKey и значения, которое является пустым словарем (использовать по умолчанию параметров IOSurface, другие не задокументированные) в CVPixelBufferCreate (так как вы не можете использовать kCVPixelBufferIOSurfacePropertiesKey с CVPixelBufferCreateWithBytes), скопировать правильные байты созданы CVPixelBuffer (не забывайте выравнивать байты). Вот как вы делаете это с поддержкой IOS.

Хотя я не уверен, что он удалит все ошибки для вас из-за формата пикселей. Я понимаю, что графический процессор должен иметь возможность удерживать текстуры в этом формате пикселей для использования в качестве IOSurfaces, хотя я не уверен на 100%.

Примечание: правильные копии пиксельных байтов для kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange можно найти в this SO answer.

Смежные вопросы