视频的GPU内存分配

时间:2011-02-09 17:50:42

标签: opengl directx cuda gpu

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

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

现在我甚至不确定使用gpu视频实际上会帮助我

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

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

如果合成功能太占用CPU,那么您可以考虑编写GPU程序来加速执行此任务。但首先你应该确定应用程序瓶颈的确切位置。你可以暂时剥离你的应用程序让它解码帧并在屏幕上显示它们(不要执行合成功能),只是为了看它是怎么回事。如果它很慢,那么解码过程可能会使用太多的CPU / RAM资源(可能是你身边的错误?)。

我曾经将 FFMPEG和SDL 用于类似的项目,我对结果非常满意。 This tutorial显示使用这两个库执行基本视频播放器。基本上,它会打开一个视频文件,对帧进行解码并将它们渲染到曲面上进行显示。

答案 3 :(得分:1)

仅间接通过图形框架。 您可以使用几乎每台计算机都支持的OpenGL。

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

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