在Qt embedded + directFB中访问多个帧缓冲区?

时间:2011-11-10 06:00:15

标签: qt4 overlay embedded-linux directfb

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

到目前为止尝试过:

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

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

    需要紧急帮助。

3 个答案:

答案 0 :(得分:1)

终于搞定了。我可以找到用于访问framebuffers的接口。

  • 然后使用-display开关我将Qt app的输出定向到framebuffer 用于叠加窗口。使用的确切命令是 ./ app-name -display Linuxfb:/ dev / fb2:enable = 1
  • 同时启用了framebuffer / dev / fb2的alpha模式 通过下面的视频播放。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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