有没有办法显示相机流并在其上绘制一些东西(在Linux中)?

时间:2015-03-11 05:46:20

标签: linux opengl-es arm gstreamer

我正在使用freescale gpu sdk,用于绘图的Open GLES API和用于ARM体系结构的相机流的Gstreamer API。在我的情况下可以单独进行,但我想知道有没有办法显示相机流并在其上绘制一些东西?

先谢谢。

3 个答案:

答案 0 :(得分:1)

一些飞思卡尔的处理器(如imx6)有多个帧缓冲覆盖(/ dev / fb0,/ dev / fb1,/ dev / fb2,...)。 然后,您可以在fb1上流式传输相机内容,并在fb0上绘制,例如。 知道默认情况下没有激活所有这些frambuffer。

答案 1 :(得分:0)

事实上,我并不真正了解X11的行为。这就是为什么我建议您禁用X11并通过OpenGL DRI(直接渲染基础设施)驱动程序和DRM(直接渲染管理器)在两个帧缓冲区之一上使用openGL进行直接渲染,然后在另一个fb上流式传输相机。 (可能是我错了,如果是这样的话,我希望别人会纠正我)

This is a french documentation on how DRM and DRI works.

我过去已经遇到过这个问题。 我不得不用GStreamer播放视频并用pango绘制文本。我做的第一件事是生成一个最小的图像(当然启用GStreamer)但没有任何X11库。对我来说(可能在你的模块上有所不同),GStreamer默认使用/ dev / fb1节点,然后我使用/ dev / fb0进行pango渲染。

经过多次测试后,很容易做到这一点。所以我也建议你做测试,尝试不同的方式,不同的方式,我希望它能按你的意愿工作。

答案 2 :(得分:0)

这取决于您的具体根文件系统,但如果您使用的是使用Freescale Yocto为i.MX6生成的系统,则默认配置位于/ usr / share / vssconfig

在该文件中,您可以指定gstreamer使用的帧缓冲区。默认情况下,/ dev / fb0是BACKGROUND帧缓冲区,而/ dev / fb1是FOREGROUND帧缓冲区。

你可以使用gstreamer绘制/ dev / fb0,同时使用cairo绘制/ dev / fb1(mmap / dev / fb1和cairo_image_surface_create_for_data),使用ioctls()覆盖/dev/fb1上的transperency等级。