【问题标题】:GPU memory allocation for video视频的 GPU 内存分配
【发布时间】:2011-06-24 07:52:32
【问题描述】:

是否可以在没有 cuda 的情况下在 GPU 上分配一些内存?

我正在添加更多细节... 我需要从 VLC 解码视频帧并在视频上有一些合成功能;我这样做是使用新的 SDL 渲染功能。 一切正常,直到我必须将解码的数据发送到 sdl 纹理......这部分代码由标准 malloc 处理,这对于视频操作来说很慢。

现在我什至不确定使用 gpu 视频是否真的对我有帮助

【问题讨论】:

  • 这改变了一切。

标签: opengl directx cuda gpu


【解决方案1】:

让我们明确一点:您是否正在尝试完成实时视频处理?由于您的最新更新大大改变了问题,我正在添加另一个答案。

您遇到的“缓慢”可能是由多种原因造成的。为了获得“实时”效果(在感知意义上),您必须能够处理帧并在 33 毫秒内显示它(对于 30 fps 视频来说,大约是)。这意味着您必须对帧进行解码,在其上运行合成函数(如您调用的那样),并在此时间范围内将其显示在屏幕上。

如果合成功能过于占用 CPU,那么您可能会考虑编写 GPU 程序来加速此任务。但是第一件事你应该确定你的应用程序的瓶颈在哪里。您可以暂时剥离您的应用程序,让它解码帧并将它们显示在屏幕上(不要执行合成功能),看看它是如何进行的。如果它很慢,那么解码过程可能使用了过多的 CPU/RAM 资源(可能是您的错误?)。

我曾经在一个类似的项目中使用过 FFMPEG 和 SDL,我对结果非常满意。 This tutorial 展示了使用这两个库做一个基本的视频播放器。基本上,它打开一个视频文件,解码帧并将它们呈现在表面上以供显示。

【讨论】:

    【解决方案2】:

    您可以通过Direct3D 11 Compute ShadersOpenCL 执行此操作。这些在精神上与 CUDA 相似。

    【讨论】:

      【解决方案3】:

      是的,是的。您可以通过 OpenGL 纹理在 GPU 中分配内存。

      【讨论】:

        【解决方案4】:

        只能间接通过图形框架。 您可以使用几乎所有计算机都支持的 OpenGL。

        您可以使用顶点缓冲区来存储数据。顶点缓冲区通常用于存储渲染点,但您可以轻松地使用它来存储任何类型的数组。与纹理不同,它们的容量仅受可用图形内存量的限制。

        http://www.songho.ca/opengl/gl_vbo.html 有一个很好的教程,关于如何读取和写入数据到顶点缓冲区,你可以忽略关于绘制顶点缓冲区的所有内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-13
          • 2012-07-03
          • 2019-03-05
          • 1970-01-01
          • 2011-07-12
          • 1970-01-01
          • 2021-11-01
          • 1970-01-01
          相关资源
          最近更新 更多