CVOpenGLESTextureCacheCreateTextureFromImage devolver-6683 (kCVReturnPixelBufferNotOpenGLCompatible)
Eu extraí os dados de Y U V do quadro de vídeo separadamente e os salvei emdata[0],data[1],data[2];
O tamanho do quadro é640*480;
Agora eu criei opixelBuffer
como abaixo:
<code>void *pYUV[3] = {data[0], data[1], data[2]}; size_t planeWidth = {640, 320, 320}; size_t planeHeight = {480, 240, 240}; size_t planeBytesPerRow = {640, 320, 320}; CVReturn renturn = CVPixelBufferCreateWithPlanarBytes(kCFAllocatorDefault, 640, 480, kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, nil, nil, 3, pYUV, planeWidth, planeHeight, planeBytesPerRow, nil, nil, nil, &_pixelBuffer); CVPixelBufferLockBaseAddress(_pixelBuffer, 0); CVPixelBufferRetain(_pixelBuffer); // Periodic texture cache flush every frame CVOpenGLESTextureCacheFlush(_textureCache, 0); // The Buffer cannot be used with OpenGL as either its size, pixelformat or attributes are not supported by OpenGL glActiveTexture(GL_TEXTURE0); CVReturn err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, _textureCache, _pixelBuffer, NULL, GL_TEXTURE_2D, GL_LUMINANCE, im.width, im.height, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0, &_yTexture); if (!_yTexture || err) { NSLog(@"CVOpenGLESTextureCacheCreateTextureFromImage failed (error: %d)", err); return; } glBindTexture(CVOpenGLESTextureGetTarget(_yTexture), CVOpenGLESTextureGetName(_yTexture)); CVPixelBufferUnlockBaseAddress(_pixelBuffer, 0); </code>
Mas o erro é -6638, a documentação simplesmente afirma que "O buffer de pixel não é compatível com o OpenGL devido a um tamanho de buffer, formato de pixel ou atributo não suportado". o que não me ajuda muito.
Como posso consertar isso?