Opengl 便携式YUV绘图环境
我有一个YUV数据流(来自视频文件),我想实时流到屏幕上。(基本上,我想编写一个实时播放视频的程序。) 因此,我正在寻找一种将YUV数据发送到屏幕的便携式方法。理想情况下,我希望使用便携设备,这样我就不必为每个主要平台重新实现它 我找到了一些选择,但它们似乎都有重大问题。它们是:Opengl 便携式YUV绘图环境,opengl,graphics,ffmpeg,sdl,sdl-2,Opengl,Graphics,Ffmpeg,Sdl,Sdl 2,我有一个YUV数据流(来自视频文件),我想实时流到屏幕上。(基本上,我想编写一个实时播放视频的程序。) 因此,我正在寻找一种将YUV数据发送到屏幕的便携式方法。理想情况下,我希望使用便携设备,这样我就不必为每个主要平台重新实现它 我找到了一些选择,但它们似乎都有重大问题。它们是: 直接使用OpenGL,将YUV数据转换为RGB。(并在整个屏幕上使用单个四元组。) 这显然行不通,因为在CPU上将RGB转换为YUV对于实时显示图像来说太慢了 使用OpenGL,但使用着色器将YUV流转换为RGB 这个
这显然行不通,因为在CPU上将RGB转换为YUV对于实时显示图像来说太慢了
使用2号选项。在着色器中执行YUV到RGB的转换没有问题。没有其他的“便携”方法可以做到这一点 这样想:无论您的视频“有多大或多小”,片段着色器(进行转换的地方)都将在显示时按像素执行,因此您可以全屏显示小视频或大视频,计算(对于着色器)是相同的,因为它们显示的像素数相同
在正常情况下,任何视频卡都可以毫无问题地运行这种着色器。使用#2:使用1或3(取决于YUV数据的平面度)纹理&在渲染纹理四元体时,在片段着色器中执行YUV->RGB转换。SDL_渲染器可以做到这一点。另外,re:CPU侧颜色转换:,请参阅.Facepalm中的用法,谢谢。尤其是@genpfault,我现在感觉有点傻,因为我已经在应用程序中使用ffmpeg了……”“在CPU上将RGB转换为YUV太慢了”:你怎么知道?