2010-06-18 210 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,使代碼的可讀性很強。

祝你好運!