CVOpenGLESTextureCacheCreateTextureFromImage return -6683 (kCVReturnPixelBufferNotOpenGLCompatible)
He extraído los datos Y U V del fotograma de video por separado y los he guardado endata[0],data[1],data[2];
El tamaño del marco es640*480;
Ahora creo elpixelBuffer
como a continuación:
<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>
Pero el error es -6638, la documentación simplemente dice que "el búfer de píxeles no es compatible con OpenGL debido a un tamaño de búfer no compatible, formato de píxel o atributo". Lo que no me ayuda mucho.
¿Cómo puedo arreglarlo?