【问题标题】:How I can get the width of an CVOpenGLTextureRef object?如何获得 CVOpenGLTextureRef 对象的宽度?
【发布时间】:2013-12-27 06:09:52
【问题描述】:

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

【问题讨论】:

  • 我确实找到了一个函数 CVOpenGLESTextureGetCleanTexCoords。但我很困惑。据我了解,纹理是存储像素数据(RGBA 等)的数据段。它可以有基地址、宽度、高度、大小。但我不确定干净的纹理坐标对纹理意味着什么。并且返回值是 GLfloat 对,而不是我预期的 size_t 。我是核心视频的新手。我想我一定是在某个地方搞砸了这个概念,需要帮助!

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


【解决方案1】:

非常感谢您的帮助! 以下是我用来获取 CVImageBuffer 的大小和干净矩形以及基于 CVImageBuffer 的 CVOpenGLESTexture 的干净纹理坐标的代码。 CVImageBuffer 是从在 IOS7 上运行的 iPhone5 摄像头抓取的。

`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`

这里的输出不是很清楚,因为编码的完整尺寸与标称输出显示尺寸相同。我觉得干净的纹理坐标可以用来从完整的编码图像缓冲区中裁剪像素。

【讨论】:

    【解决方案2】:

    当您处理CVOpenGLESTextureRef 时,您已经牢牢地处于 OpenGL 领域——您可以从那里获得的唯一坐标信息是纹理坐标(在两个轴上从 0.0 到 1.0)。

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

    【讨论】:

    • 非常感谢您的帮助!
    猜你喜欢
    • 2011-11-06
    • 2012-10-10
    • 2011-07-29
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多