2011-11-10 1 views
1

임베디드 리눅스/MIPS 디바이스 용 Qt 애플리케이션을 개발 중입니다. 지금까지 장치에서 Qt 응용 프로그램을 실행할 수있었습니다. 이제 비디오 상단에 오버레이를 만들어야합니다. 하드웨어는 4 개의 오버레이 창을 제공하며 OpenGL을 지원하지 않습니다.Qt embedded + directFB에서 다중 프레임 버퍼에 액세스 하시겠습니까?

지금까지 시도 :

  1. 비디오의 상단에 오버레이를 만드는 QStackedLayoutQGraphicsView를 작성했습니다. 하지만 오버레이 위젯은 사용자 클릭에 응답하지만 오버레이는 검은 색으로 보입니다.
  2. 여러 프레임 버퍼에 직접 액세스하려고했습니다. 나는 는/dev/FB0에 액세스 할 수 있어요하지만 // FB1, , DEV.
  3. 대화 상자와 푸시 버튼이있는 간단한 Qt 애플리케이션을 만들려고 시도했습니다. 이 명령어를 사용하여 임베디드 장치에서 실행 해 보았습니다 ./<appname> -display directfb:/dev/fb1:2. 그러나 /dev/fb1을 열 수 없습니다.

질문 :

  • 가 어떻게이 LCD 컨트롤러가 제공하는 오버레이 창을 사용할 수 있습니까?
  • QT에서 제공하는 directfb 플러그인을 사용하고 OpenGL 지원을 이용할 수 있습니까?
  • /dev/fb1을 사용자 공간에 명시 적으로 매핑해야합니까?

긴급한 도움이 필요합니다.

답변

1

마지막으로이 기능이 작동합니다. 프레임 버퍼에 액세스 할 수있는 인터페이스를 찾을 수있었습니다.

  • 는 그럼 난 오버레이 창에 대한 의미 프레임 버퍼 Qt는 응용 프로그램의 출력을 지시 -display 스위치를 사용하여. 사용 된 정확한 명령은 입니다. /app-name -display Linuxfb :/dev/fb2 : enable = 1.
  • 아래 재생중인 비디오를 통해 을 나타내는 프레임 버퍼/dev/fb2의 알파 모드도 활성화되었습니다.
+0

어떻게 프레임 버퍼'/ dev/fb2'의 알파 모드를 활성화 했습니까? – plesiv

0

Qt를 사용하기 전에 Linux 커널이 하드웨어 오버레이를 지원하는 방법과 커널이 해당 오버레이를 사용하기 위해 제공하는 사용자 인터페이스를 이해해야합니다. 일반적으로 하나의 오버레이 만 프레임 버퍼로 액세스 할 수 있으며 비디오의 다른 오버레이는 Video4Linux 출력 장치로 액세스 할 수 있습니다. 그러나 실제로 하드웨어가 무엇이며이 하드웨어에서 Linux 지원이 어떻게 이루어 졌는지에 달려 있습니다.

+0

나는 Au1250 프로세서가있는 Alchemy HMP 장치를 사용하고 있습니다. LCD 컨트롤러가 지원하는 4 개의 오버레이 창에 액세스하는 방법을 파악할 수 없습니다. 나는 이것이 /dev/fb1,2,3을 통해 있어야한다고 생각하지만 그렇게 할 수는 없다. –

+0

토마스에게 제안에 감사드립니다. –

0

내 대답은 실제로 qt에 관한 것이 아니라 hw 레이어에 관한 것입니다. 하드웨어가 오버레이를 지원하는 경우 directfb가 여러 하드웨어 계층을 지원해야합니다. fb1, fb2 ...를 사용하려는 시도는 하나의 fb 드라이버가 있기 때문에 실패하고 directfb에 의해 사용되며 fb 대신 directfb를 직접 사용해야합니다. 우선, hw가 실제로 추가 hw 레이어 (서페이스)를 지원하는지 여부를 확인하는 것이 좋습니다. 예를 들어 this 콜백을 설정하는 간단한 directfb 앱을 작성하고 directfb 인터페이스를 초기화 한 후 코어에서 제시된 모든 hw 레이어 (표면)에 대한 콜백을 인수로 사용합니다. 어쨌든 기억이 나지 않지만 Qt는 항상 주 표면을 사용합니다.

+0

제안 해 주셔서 감사합니다. 필자는 Alchemy HMP 장치에 특성이있는 LCD 컨트롤러가있는 Au1250 프로세서를 사용하고 있습니다. "LCD 컨트롤러는 재배치 할 프레임 버퍼 수정이 필요없는 4 개의 우선 순위 오버레이 윈도우 각각에서 전체 32 비트 RGB/알파 기능을 개발자에게 제공합니다. 비디오 디스플레이 "그래픽이 오버레이 창은 각각 /dev/fb1,2,3을 통해 액세스 할 수 있음을 알고 있습니다.이 오버레이 창에 내 앱 출력을 보내면됩니다. 나는 정확하다고 생각한다. 그리고 예, QT는 1 차 표면 즉/dev/fb0을 사용합니다. –

+0

저는 하나의/dev/fb0 장치 노드 만 있고 hw 레이어 (오버레이)에 액세스하는 것은 DirectFB를 통해 가능하다고 생각합니다. 하지만 단지/dev/fb1,2,3 .../dev/fb1,2,3 ... 디바이스 노드를/dev/fb0 노드와 같은 주요 id와 1,2,3 등의 마이너 ID와 함께 mknod 명령을 사용하여 작성하십시오. 프레임 버퍼 장치 드라이버 소스가 있습니까? – Ilay

+0

"cat proc/fb"는 다음과 같이 표시됩니다. 0 AU1200 1 AU1200 2 AU1200 3 AU1200 "ls -l/dev/fb *"출력 결과 : crw-rw ---- 1 0 0 29, 0 Jan 1 00:00/dev/fb0 crw-rw ---- 1 0 0 29, 1 Jan 1 00:00/dev/fb1 crw-rw ---- 1 0 0 29, 2 Jan 1 00:00/dev/fb2 crw-rw ---- 1 0 0 29, 3 Jan 1 00:00/dev/fb3. 나는 이것이 장치가 다중 프레임 버퍼를 가지고 있다는 것을 분명히 암시한다고 생각한다. 내 QT 응용 프로그램 중 하나는 default.com에서/dev/fb0을 사용하여 실행합니다. ./ -qws --dfb : mode = 800 * 480 --dfb : no-cursor.when는/dev/fb1 { 2} fbdev :/dev/fb1 스위치를 사용하면 실행되지만 아무 것도 볼 수 없습니다. 다른 레이어를 어떻게 보이게 만드는지. –

관련 문제