1

我正在为嵌入式 linux/MIPS 设备开发 Qt 应用程序。到目前为止,我设法在设备上执行了我的 Qt 应用程序。现在我需要在视频之上创建叠加层。硬件提供四个叠加窗口,不支持 OpenGL。

到目前为止尝试过:

  1. 尝试在视频之上创建QStackedLayout和创建叠加层。QGraphicsView但是覆盖显示为黑色,尽管覆盖上的小部件会响应用户点击。
  2. 试图直接访问多个帧缓冲区。我可以访问/dev/fb0但不能访问 / dev/fb1 , 2 , 3
  3. 尝试创建一个简单的 Qt 应用程序,上面有一个对话框和一个按钮。我尝试使用此命令在嵌入式设备上执行它./<appname> -display directfb:/dev/fb1:2。但它无法打开/dev/fb1

问题:

  • 如何使用 LCD 控制器提供的覆盖窗口?
  • 是否可以使用 QT 提供的 directfb 插件并利用其对 OpenGL 的支持?
  • 我是否必须将/dev/fb1显式映射到用户空间才能使用它?

在这方面需要紧急帮助。

4

3 回答 3

2

终于得到了这个工作。我可以找到可以访问帧缓冲区的接口。

  • 然后使用 -display 开关,我将 Qt 应用程序的输出定向到用于覆盖窗口的帧缓冲区。使用的确切命令是./app-name -display Linuxfb:/dev/fb2:enable=1
  • 还启用了帧缓冲区 /dev/fb2 的 alpha 模式,这通过下面播放的视频显示。
于 2011-12-12T09:55:25.167 回答
0

在尝试使用 Qt 之前,您必须了解 Linux 内核如何支持硬件覆盖,以及内核为使用这些覆盖提供了哪些用户空间接口。通常,只有一个覆盖可作为帧缓冲区访问,其他视频覆盖可作为 Video4Linux 输出设备访问。但这实际上取决于硬件是什么以及如何在该硬件上完成 Linux 支持。

于 2011-11-15T20:47:21.480 回答
0

我的回答实际上不是关于 qt 而是关于 hw 层。如果您的硬件支持覆盖,那么这应该意味着 directfb 支持多个硬件层。您尝试使用 fb1,fb2... 失败,因为只有一个 fb 驱动程序并且它由 directfb 使用,您应该直接使用 directfb 而不是 fb。首先我建议你检查硬件是否真的支持额外的硬件层(表面)而不仅仅是主要的,因为你可以例如编写简单的directfb应用程序来设置这个回调,并且在directfb接口初始化之后核心会调用你的回调对于每个呈现的硬件层(表面),它的功能作为参数。无论如何我不记得了,但我猜 Qt 总是使用主表面。

于 2011-11-16T08:59:32.980 回答