OpenGL 视频渲染

发布于 2020-11-08  300 次阅读


综述

详细内容

软件比对

软件显示大小分辨率帧率windowed框架gpu使用率
vlc720x4801920x108025D3D4
-1920x10801920x108025D3D8
-1920x10801920x108025全屏D3D14
ffplay720x4801920x108025OpenGL14
-1920x10801920x108025OpenGL18

格式

索引格式
1grey
2y800
3y8
4y16
5rgb15
6rgb16
7rgb24
8rgba
9argb
10bgr15
11bgr16
12bgr24
13bgra
14abgr
15nv16
16nv61
17i422
18yv16
19yuy2
20yuyv
21uyvy
22yvyu
23vyuy
24i420
25iyuv
26nv12
27yv12
28nv21
29p010
30p210
31iyu2
32v308
33ayuv
34uyva
35v408
36vyua
37v210
38y410
39v410
40rgb10
41bgr10

LOD

从 opengl 3.0 开始,提供了 glGenerateMip 函数用于生成 LOD

glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

yuv -> rgb

r = 1.1643*(y-0.0625) + 1.5958*(v-0.5)
= 1.1643y + 0u + 1.15958v + (-0.87066875)
g = 1.1643
(y-0.0625) - 0.39173*(u-0.5) - 0.81290*(v-0.5)
= 1.1643y + (-0.39173)u + (-0.81290)v + (0.52954625)
b = 1.1643(y-0.0625) + 2.017(u-0.5)
= 1.1643
y + 2.017u + 0v + (-1.08126875)

[r,g,b]=[yuv]MT+MB
MT = {[1.1643,1.1643,1.1643],
[0,-0.39173,2.017],
[1.15958,-0.81290,0]
}
MB = [-0.87066875,0.52954625,-1.08126875]


朝闻道,夕死可矣