Доступ к множеству кадровых буферов в Qt embedded + directFB? - PullRequest
1 голос
/ 10 ноября 2011

Я занимаюсь разработкой приложения Qt для встроенного устройства linux / MIPS.Пока удалось выполнить мое приложение Qt на устройстве.Теперь мне нужно создать оверлей поверх видео.Аппаратное обеспечение предоставляет четыре окна оверлеев и не поддерживает OpenGL.

До сих пор пробовал:

  1. Пробовал создавать QStackedLayout и QGraphicsView для создания оверлеев поверх видео.Но оверлей выглядит черным, хотя виджеты на оверлее реагируют на щелчки пользователя.
  2. Попытка прямого доступа к нескольким буферам кадров.Я могу получить доступ к / dev / fb0 , но не / dev / fb1 , 2 , 3 .
  3. Попытался создать простое приложение Qt с диалоговым окном и кнопкой на нем.Я попытался выполнить его на встроенном устройстве с помощью этой команды ./<appname> -display directfb:/dev/fb1:2.Но он не открывается / dev / fb1 .

Вопросы:

  • Как использовать окна наложения, предоставляемые контроллером ЖКД?
  • Можно ли использовать плагин directfb, предоставляемый QT, и воспользоваться его поддержкой OpenGL?
  • Нужно ли явно отображать / dev / fb1 в пространстве пользователя, чтобы бытьМожно ли его использовать?

Нужна срочная помощь по этому поводу.

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Наконец-то все заработало.Я мог бы найти интерфейс, с помощью которого я мог бы получить доступ к кадровым буферам.

  • Затем, используя ключ -display, я направил вывод приложения Qt в кадровый буфер, предназначенный для окна наложения.Точная команда была . / App-name -display Linuxfb: / dev / fb2: enable = 1 .
  • Также включен альфа-режим кадрового буфера / dev / fb2, показанный в видео, воспроизводимом ниже.
0 голосов
/ 16 ноября 2011

Мой ответ на самом деле не о qt, а о слое hw.Если ваше оборудование поддерживает оверлеи, это должно означать, что directfb поддерживает несколько аппаратных уровней.Вы пытаетесь использовать fb1, fb2 ... не удается, потому что есть только один драйвер fb, и он используется directfb, и вы должны использовать directfb вместо fb напрямую.Прежде всего, я предлагаю вам проверить, действительно ли hw поддерживает дополнительные слои (поверхности) hw, а не только первичные, для этого вы можете, например, написать простое приложение directfb, которое устанавливает this callback, и после инициализации интерфейса directfbядро будет вызывать ваш обратный вызов для каждого представленного слоя (поверхности) hw с его возможностями в качестве аргумента.В любом случае, я не помню, но думаю, что Qt всегда использует первичную поверхность.

0 голосов
/ 16 ноября 2011

Прежде чем пытаться использовать Qt, вы должны понять, как аппаратные оверлеи поддерживаются ядром Linux, и какой интерфейс пользовательского пространства ядро ​​предоставляет для использования этих оверлеев.В общем случае только один оверлей доступен в виде кадрового буфера, остальные оверлеи для видео доступны как устройства вывода Video4Linux.Но это действительно зависит от того, что это за аппаратное обеспечение и как была реализована поддержка Linux на этом оборудовании.

...