2010-06-18 130 views
11

我想用OpenGL直接显示非常高分辨率的视频。openGL视频显示

图像数据将在GPU上进行处理,我希望避免返回PC以在标准位图窗口中显示视频。
跨平台很不错,只有Windows才行(只有nvidia才可以)

任何人有任何链接到这样做的方式?

有一个糟糕的NeHe教程和Qt中的嵌入式OpenGL小部件的一些例子,但我需要更好的性能和更大的图像。

回答

10

假设OpenGL 2.1使用GL_PIXEL_UNPACK_BUFFER类型的缓冲区对象将像素数据流式传输到纹理。它比每帧上传数据都快,因为当您使用glMapBuffer,glMapBufferRange(OpenGL 3.2)或直接调用glBufferData时,实现可能使用DMA进行复制。您也可以在每批中复制多个帧,以便在复制开销和映射开销之间进行权衡。最后,创建着色器将YUV或YCbCr转换为RGB,并用三角形条显示纹理。

+0

全屏四边形上的三角形的任何原因? – 2010-06-20 03:46:52

+3

是的,四边形在每个方面都吸引人,不应该使用,只要忘记他们曾经存在过。 – 2010-06-20 04:37:53

2

OpenGL的显而易见的事情是将位图显示为纹理。

+0

是的 - 我只是想知道是否有一些视频特定的性能技巧,而不是仅仅将每一帧复制到全屏四区域 – 2010-06-18 15:08:33

+0

@Martin:通常不会 - 只要你保持所有内存在卡上洗牌本身,几乎任何合理的视频卡都可以很容易地提供带宽,以最大刷新率重写屏幕上的每一位(特别是现在,因为LCD几乎不会刷新超过60赫兹 - 对于高端CRT而言, + Hz刷新)。 – 2010-06-18 15:17:25

+0

多数民众赞成在这个问题 - 我需要在120Hz做1080p(理想情况下,他们两个!) – 2010-06-18 20:21:27

1

所以你想发送你的视频纹理和处理它与片段着色器? Here's一个简短的教程如何做类似的事情。这只是一个简单的OpenGL 2.0示例,它创建2个窗口大小的纹理,并将它们混合到片段着色器中。没有涉及的视频,但如果您已经有解码方法,则不应该难以修改。

0

如果你愿意,我已经创建了一个非常简单的API,在许多事情中,它们也可以将视频显示为一个opengl纹理。您还可以使用实时视频供稿创建动态高度地图。

您可以在http://www.barbato.us/category/programming-labs/

使用非常简单检查API,使代码的可读性很强。

祝你好运!