Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于OpenGL/CL的数据处理与视频生成_Opengl_Opencl_Gpu - Fatal编程技术网

基于OpenGL/CL的数据处理与视频生成

基于OpenGL/CL的数据处理与视频生成,opengl,opencl,gpu,Opengl,Opencl,Gpu,目标:补偿和可视化14位数据流(2D视频) 现有解决方案:每个样本需要补偿增益和偏移,因此需要一次乘法和一次加法。然后,我通过查找表为样本分配颜色,并将“颜色”流直接输出到显示器。一切都是在CPU上完成的 要求:我需要能够动态设置查找表(调色板) 使用GPU进行这样的操作似乎很明显,但我找不到任何关于如何使用OpenGL从数据域移动到图片域的信息。我考虑过使用OpenCL进行数据补偿和图像生成,然后移动到OpenGL进行显示(或者一般来说:用于操作图片) 你能给我推荐一个好的方法吗?仅仅使用Op

目标:补偿和可视化14位数据流(2D视频)

现有解决方案:每个样本需要补偿增益和偏移,因此需要一次乘法和一次加法。然后,我通过查找表为样本分配颜色,并将“颜色”流直接输出到显示器。一切都是在CPU上完成的

要求:我需要能够动态设置查找表(调色板)

使用GPU进行这样的操作似乎很明显,但我找不到任何关于如何使用OpenGL从数据域移动到图片域的信息。我考虑过使用OpenCL进行数据补偿和图像生成,然后移动到OpenGL进行显示(或者一般来说:用于操作图片)


你能给我推荐一个好的方法吗?仅仅使用OpenGL就可以有效地实现这一切吗?如何操作?

是的,仅使用OpenGL即可完成

我建议采用如下工作流程:

对于每个帧:

  • 将帧从流上载到纹理内存
  • 绘制一个全屏四边形,纹理坐标从0,0到1,1
  • 在片段着色器中,为每个像素应用适当的变换。查找表也可以存储在纹理中,因此您只需在适当的位置执行查找

  • 总的来说:这个问题目前有点过于宽泛,无法得到更详细的回答。例如,14位数据流可能是很多东西。对于这个答案,我假设您指的是(2D)视频流。

    是的,我指的是2D视频流。我想强调的是,输入不是一个纯粹的视频,而是不能直接视为“颜色兼容”的东西。纹理是否可以被视为一张短裤表,在那里我可以一个元素一个元素地修改,就像在C编程中一样?在数据级别,我希望避免颜色表示(14或16位采样,而不是888 RGB)。我可以将补偿表(每个像素的增益和偏移)和调色板表示为纹理吗?如何将数据转换为颜色?如果我将查找表实现为纹理,我是否可以快速更新它,例如50 fps?您可以将数据存储在16位短纹理中。如果增益和偏移是按像素定义的,我也会将它们存储在表中,如果这是全局值,那么应该将它们作为一致性传递给着色器。从数据到颜色的转换可以通过首先从datatexture读取数据值来完成,然后执行增益和偏移校正,并将结果用作palett纹理的纹理地址(您可能希望将此纹理保持1D,然后寻址更容易)。增益可能以某种方式保持不变,偏移必须在运行时刷新。我是否将它们存储为两个纹理,一个用于增益,另一个用于偏移?如何在纹理域中进行乘法和加法?你能给我提供一个我应该了解的关键字列表(对象类型、函数等)吗?我是一个完全的图形新手。常数是指一帧的常数。您必须阅读有关纹理和着色器的一般内容。您的工作流程将以某种方式类似于每个像素定义的一般增益和偏移量,并且它们必须不时更新。谢谢你的回答!我需要使用OpenGL ES 2.0,它似乎不支持“正常”无符号短代码,只支持GL_无符号短代码_5_6_5,GL_无符号短代码_4_4_4_4。我认为任何乘法都会单独处理RGB通道,这会扭曲我的数据。你有解决办法吗?