gpt4 book ai didi

opengl - 可移植 YUV 绘图上下文

转载 作者:行者123 更新时间:2023-12-04 22:49:26 29 4
gpt4 key购买 nike

我有一个要实时流式传输到屏幕的 YUV 数据流(来自视频文件)。 (基本上,我想写一个实时播放视频的程序。)

因此,我正在寻找一种将 YUV 数据发送到屏幕的便携方式。理想情况下,我希望使用可移植的东西,这样我就不必为每个主要平台重新实现它。

我找到了一些选择,但它们似乎都存在重大问题。他们是:

  • 直接使用 OpenGL,将 YUV 数据转换为 RGB。 (并在整个屏幕技巧中使用单个四边形。)

  • 这显然行不通,因为在 CPU 上将 RGB 转换为 YUV 对于实时显示图像来说太慢了。
  • 使用 OpenGL,但使用着色器将 YUV 流转换为 RGB。

  • 这个选项好一点。 Although the problem here is that (afaict), this will involve making two streams and splicing them together. It might work, but may have issues with larger resolutions.
  • 而是使用 SDL,它可以选择直接创建 YUV 上下文。

  • 问题是我已经在我的程序的其他方面(例如播放控件)使用跨平台小部件库。据我所知,SDL 仅在其 ( possibly borderless) 窗口中打开。理想情况下,我希望我的控件和绘图上下文位于同一个窗口中。我可以用 opengl 做,但不能用 SDL。
  • 使用 SDL,并使用 Qt 之类的东西作为屏幕小部件,使用消息传递协议(protocol)在两个库之间进行通信。 Have the (borderless) SDL window constantly move itself on top of the opengl window.

  • 虽然这种方法很聪明,但两个窗口似乎很容易脱离接收器,从而使用户体验欠佳。
  • 忘记一个跨平台库,只考虑操作系统,如果存在的话,使用硬件加速。

  • 这是一个很好的解决方案,尽管它不是跨平台的。

    因此,有没有什么好方法可以将 YUV 数据绘制到理想的屏幕上:

    1. Portable (at least to the major platforms).
    2. Fast enough to be real time.
    3. Allows other widgets in the same window.

    最佳答案

    使用选项 2。在着色器中进行 YUV 到 RGB 的转换没有问题。没有其他“可移植”方法可以做到这一点。

    像这样想:无论您的视频“有多大或多小”,片段着色器(完成转换的地方)将在显示的那一刻按像素执行,因此您可以全屏显示小视频或大视频一,计算(对于着色器)是相同的,因为它们显示相同数量的像素。

    在正常情况下,任何显卡都可以毫无问题地运行这种着色器。

    关于opengl - 可移植 YUV 绘图上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44291939/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com