我如何获得CVOpenGLTextureRef对象的宽度?

时间:2013-12-09 22:42:14

标签: ios image-processing opengl-es-2.0 core-video

我是核心视频新手,想了解CVOpenGLTextureRef对象的像素宽度。我有办法吗?

2 个答案:

答案 0 :(得分:0)

当您正在处理CVOpenGLESTextureRef时,您仍然坚定地处于OpenGL领域 - 您可以从中获得的唯一坐标信息是纹理坐标(从0.0到0.0)两轴都是1.0。)

如果您需要有关视频尺寸的信息进入纹理,请返回CoreVideo管道。你正在使用的CVOpenGLESTextureRef大概是从一个样本缓冲区(对于你可以期待成为图像缓冲区的视频)创建的,因此你可以使用CVImageBuffer函数来获得它的大小视频像素。

答案 1 :(得分:0)

非常感谢你的帮助! 以下是我用来获取CVImageBuffer的大小和干净矩形的代码,以及基于CVImageBuffer的CVOpenGLESTexture的干净纹理坐标。从IOS7上运行的iPhone5相机中抓取了CVImageBuffer。

`CVImageBufferRef cameraFrame = CMSampleBufferGetImageBuffer(sampleBuffer); 
err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,    coreVideoTextureCache, cameraFrame, NULL, GL_TEXTURE_2D, GL_LUMINANCE, bufferWidth, bufferHeight, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0, &luminanceTextureRef);
NSLog(@"Clean Rect: %@", NSStringFromCGRect(cleanRect));
NSLog(@"Nominal Output Display Size: %@", NSStringFromCGSize(nominalOutputDisplaySize));
NSLog(@"Encoded full Size: %@", NSStringFromCGSize(encodedSize));
NSLog(@"Lower left coordinate: %f, %f", lowerLeft[0], lowerLeft[1]);
NSLog(@"Lower right coordinate: %f, %f", lowerRight[0], lowerRight[1]);
NSLog(@"Upper right coordinate: %f, %f", upperRight[0], upperRight[1]);
NSLog(@"Upper left coordinate: %f, %f", upperLeft[0], upperLeft[1]);`

`The out put is as following:
Clean Rect: {{0, 0}, {640, 480}}
Nominal Output Display Size: {640, 480}
Encoded full Size: {640, 480}
Lower left coordinate: 0.000000, 1.000000
Lower right coordinate: 1.000000, 1.000000
Upper right coordinate: 1.000000, 0.000000
Upper left coordinate: 0.000000, 0.000000`

此处的输出不太清楚,编码的全尺寸与标称输出显示尺寸相同。我觉得干净的纹理坐标可能用于从完整编码的图像缓冲区中裁剪像素。