作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从视频帧中分别提取了Y U V数据并将它们保存在data[0],data[1],data[2];
帧大小为640*480;
现在我创建 pixelBuffer
如下:
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);
但错误是 -6638,文档只是指出“由于不支持的缓冲区大小、像素格式或属性,像素缓冲区与 OpenGL 不兼容。”这对我没有多大帮助。
如何修复它?
最佳答案
您的源图像/视频帧的分辨率是否为 2 的幂?如果没有,您必须在创建纹理之前调整其大小。
关于iphone - CVOpenGLESTextureCacheCreateTextureFromImage 返回 -6683(kCVReturnPixelBufferNotOpenGLCompatible),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10047159/
我正在获取视频帧并使用函数 CVPixelBufferCreateWithPlanarBytes() 从视频帧中提取的两个平面阵列创建 PixelBuffer 并且我检查了从 CVPixelBuffe
我从视频帧中分别提取了Y U V数据并将它们保存在data[0],data[1],data[2];帧大小为640*480;现在我创建 pixelBuffer 如下: void *pYUV[3] =
我是一名优秀的程序员,十分优秀!