通过HDMI保持视频的Alpha透明度

时间:2013-04-22 10:12:12

标签: opengl gpu video-processing alpha-transparency hdmi

我正在处理的场景实际上如下:我需要获取OpenGL生成的屏幕,并通过HDMI将其发送到FPGA组件,同时保持alpha通道。但是现在通过HDMI发送的数据只是RGB(没有alpha通道的24位)所以我需要一种强制通过这个端口发送Alpha位的方法。

见图片:http://i.imgur.com/hhlcbb9.jpg

我能想到的一个解决方案是将屏幕缓冲区从RGBA模式转换为RGB,同时混合RGB缓冲区内的Alpha通道。

例如:

The original buffer: [R G B A][R G B A][R G B A]
The output i want: [R G B][A R G][B A R][G B A] 

重点不在于每一个像素。 但我不确定是否可以使用OpenGL或任何技术(VideoCore内核?)

2 个答案:

答案 0 :(得分:1)

  

opengl帧缓冲区

你真的是指 framebuffer ,还是某种纹理?因为无法调整帧缓冲区的大小,并且此结果图像的大小将更大,像素数减少25%。你实际上不能这样做。

你可以用纹理来做,但只能通过调整大小来实现。您必须将glGetTexImage的texel数据放入某个缓冲区,然后将纹素数据上传到另一个glTexImage2D的纹理。您只需适当更改pixel transfer format和纹理宽度即可。阅读将使用GL_RGBA,写入将使用GL_RGB,内部格式为GL_RGB8

性能几乎肯定不会很好。但它应该工作

但不,没有简单的电话可以让你发生这种情况。

答案 1 :(得分:1)

您可以通过视频卡上不同的rgb或hdmi视频输出在opengl中单独发送Alpha通道。 所以你的电脑现在输出RGB一根电缆,然后Alpha输出另一根电缆。你的alpha可能需要转换为灰度,这样它仍然是24位。 然后选择哪个信号是fpga中的键。 我假设你的fpga支持色度键。

之前我做过类似的事情但是使用了一个名为Brainstorm的程序,该程序使用支持SDI的特定视频卡,它将RGB和Alpha分成单独的视频通道(电缆),然后视觉混合器进行键控

然而,今天,我创建了一个新的解决方案,首先在PC上混合多个视频通道,然后将最终的混合视频直接输出到RTMP流媒体服务器或DVI到SDI扫描转换器。