ESM6802双屏显示(LVDS+HDMI)设置

 2017-1-26     作者:廖光泽     [nemail]    
[lablebox]

1、ESM6802显示简介


  ESM6802根据显示接口的不同分为两种版本,一种支持RGB显示接口,主要用于低分辨率显示;另外一种同时支持LVDS和HDMI显示接口,可以单独使用任意接口或者搭建LVDS+HDMI的双屏显示系统。用户购买时可根据自己的需要选择支持RGB的单屏显示型号或者支持LVDS+HDMI的双屏显示型号。


  双屏显示设置包括:

  ● 双屏运行不同的程序(Qt5程序)

  ● 双屏运行相同的程序,程序自身负责同步

  ● 双屏播放不同的视频

  ● 双屏同步播放相同的视频

  ● 一个屏幕运行程序,一个屏幕播放视频

  ● 一个屏幕分块显示多个视频(单屏/双屏通用)


  下面先简单介绍一下显示接口的设置。


  设置显示接口需要设置U-Boot,我们已有默认设置可以满足大部分用户需求,目前我们的出厂设置是将LCD或者LVDS屏幕作为主屏(mxcfb0),HDMI屏幕作为附屏(mxcfb1),且HDMI屏幕设置为1920x1080M@60,if=RGB24,由于HDMI屏幕显示协议中有一个协商的部分,HDMI显示输出会根据我们的设备以及显示屏幕支持的分辨率进行选择,使用双方都支持的最大分辨率,所以用户一般不需要修改此配置。而修改LCD或者LVDS的配置可以用过我们提供的修改开机画面的命令flash_opt烧写正确分辨率的bmp图片,我们的系统就会在下一次开机自动修改LCD/LVDS屏幕的分辨率设置了。如此设置可以方便用户进行快速修改屏幕设置。


  对于需要自行修改设置的用户,下面对设置方法进行简单介绍。开机调试串口显示Hit any key to stop autoboot时按下任意键进入U-Boot环境,输入命令 printenv video 查看默认设置:

  => printenv video

  video=video=mxcfb0:dev=ldb,800x600M@60,if=RGB666 video=mxcfb1:dev=hdmi,1920x1080M@60,if=RGB24


  输入命令setenv video video=设置 来设置显示输出,如:

  => setenv video video=mxcfb0:dev=ldb,800x600M@60,if=RGB666 video=mxcfb1:dev=hdmi,800x600M@60,if=RGB24


  设置的格式为($数字表示变量,需要根据实际情况配置):

  video=mxcfb$1:dev=$2,$3x$4M@$5,if=RGB$6

  ● $1可以取值0或1,单屏显示只需要设置为0, 双屏显示时0为主屏,会输出开机画面,1屏默认开机没有开启,输出显示时会自动打开。

  ● $2表示输出设备,可选值为lcd—RGB屏,ldb--LVDS屏,hdmi--HDMI屏。

  ● $3和$4表示屏幕分辨率。

  ● $5为屏幕刷新频率。

  ● $6为屏幕输出接口,常用接口为RGB565、RGB666、RGB24。


  用户根据自己的实际情况设置此参数后,运行命令saveenv保存,然后运行命令boot开机。开机之后可以运行命令ls /dev/fb* 查看设置是否成功,其中fb0、fb2表示屏幕,fb1是fb0代表屏幕的左上部分。默认fb2没有开启,可以输入下面命令打开:

  echo 0 > /sys/class/graphics/fb2/blank


  用户在使用中可以让双屏显示不同应用程序或者一个屏幕运行图形界面程序,另外一个屏幕进行视频播放等,具体设置方法将在下面两章节(QT 5支持 和 多媒体音视频 )中分别进行介绍。用户阅读完下面的内容之后可以进行随意组合使用双屏显示不同或相同内容。


2、Qt5支持


  ESM6802 文件系统已经移植好了Qt 5.5.1 版本,支持qml等Qt5新特性,并且已经移植好了tslib库来支持工业上比较常见的电阻触摸屏,用户可以方便的使用Qt 5来开发图形界面应用程序。ESM6802 文件系统中的Qt 5 使用 eglfs 平台,我们默认已经设置了环境变量 QT_QPA_PLATFORM=eglfs, 如果用户发现Qt 5 程序无法运行,请首先检查此环境变量是否被改变。ESM6802文件系统里面也提供了qmlscene程序用于运行qml文件,qmlscene程序在/usr/bin/qt5/文件夹下面。关于eglfs 以及更多Qt 5程序开发的相关知识请参考Qt 官网或其他资料,关于Qt 5开发环境的搭建请参考《ESM6802开发工具安装》文档,我们在此只简单展示qml运行效果。示例用的qml文件可以从光盘中获取,运行命令:

  /usr/bin/qt5/qmlscene  example_billborad.qml


  运行效果如下图:


ESM6802双屏显示LVDS+HDMI.gif


  双屏设置:

  Qt5运行于eglfs平台,与屏幕设置有关的环境变量为QT_QPA_EGLFS_FB,用户在运行Qt程序之前设置此环境变量就可以实现控制Qt程序在哪个屏幕上进行显示了,如下例在LVDS和HDMI屏幕上运行两个不同的Qt程序:

  export QT_QPA_EGLFS_FB=/dev/fb0//第一个程序显示在fb0(LVDS)上

  /usr/bin/qt5/qmlscene example_billborad.qml  &

  export QT_QPA_EGLFS_FB=/dev/fb2 //第二个程序显示在fb2(HDMI)上

  ./smarthome


  运行效果如下图:


ESM6802双屏显示LVDS+HDMI.gif


  目前无法支持将一个应用程序的界面同时显示在两个屏幕上,如果用户需要实现此功能,需要在两个屏幕上同时运行相同的程序(以不同的QT_QPA_EGLFS_FB设置运行两次程序),然后在程序中使用Linux提供的进程同步机制来控制两个程序,从而达到两个屏幕同步显示相同内容。


3、多媒体音视频


  ESM6802支持多种格式的音视频多媒体文件的播放,提供的函数接口是基于gstreamer的,运行命令gst-inspect-1.0 就可以查看系统支持的所有gstreamer plugins。


  关于gstreamer 编程请参考官网文档及其他相关资料:

  https://gstreamer.freedesktop.org/documentation/


  ESM6802文件系统中的gst-launch-1.0 可以进行简单的播放展示,如果用户不需要对音视频播放进行暂停快进等特殊操作,也可以在应用程序中调用gst-launch-1.0进行简单的多媒体播放。ESM6802支持AVI、MP4、FLV、MPG2、MKV、RMVB常见视频格式最大分辨率1920x1080(1080p)的播放,以及常见音频格式如MP3、WMA和图片格式JPEG、PNG、GIF、BMP。


  简单的视频播放可以使用如下命令:

  gst-launch-1.0 playbin uri=file:///mnt/cloudy720p.mkv


  播放效果如下图:


ESM6802双屏显示LVDS+HDMI.gif


  控制视频在不同屏幕上播放或这同时在两个屏幕上播放需要用到overlaysink插件(系统已经安装),配置overlaysink的文件为/usr/share/imx_6q_display_config , 配置格式如下:

  [Display NAME]

  必须配置,指明显示名称

  device=

  必须配置,指明设备文件,如/dev/video17(默认为LVDS/RGB)或/dev/video18(默认为HDMI)

  fmt=

  可选配置,设置显示格式,如RGBP、RGB565等,默认为RGBP

  width=

  height=

  可选配置,设置显示分辨率

  alpha=

  可选配置,设置alpha(透明)值,默认0

  color_key=

  可选配置,颜色配置,默认关闭


  具体配置示例如下:

  # LVDS display

  [master]

  device = /dev/video17

  fmt = RGBP

  width = 1024

  height = 768

  alpha = 0


  # HDMI display

  [slave]

  device = /dev/video18

  fmt = RGBP

  width = 1920

  height = 1080


  根据以上配置在不同屏幕(LVDS+HDMI)上同时播放不同视频的可用命令:

  gst-launch-1.0 playbin uri=file:///mnt/cloudy720p.mkv playbin uri=file:///mnt/xpg.mp4 video-sink=”overlaysink display-master=false display-slave=true”


  播放效果如下图所示:


ESM6802双屏显示LVDS+HDMI.gif


  如需在不同屏幕上播放相同视频可以运行如下命令:

  gst-launch-1.0 playbin uri=file:///mnt/cloudy720p.mkv video-sink=”overlaysink display-master=true display-slave=true”


  结合上一章Qt的介绍,可以在一个屏幕上运行程序,在另外一个屏幕上播放视频:

  ./smarthome &

  gst-launch-1.0 playbin uri=file:///mnt/cloudy720p.mkv video-sink=”overlaysink display-master=false display-slave=true”


  运行效果如下图:


ESM6802双屏显示LVDS+HDMI.gif


  视频播放还支持一个屏幕播放多个视频,可以使用如下命令:

  gst-launch-1.0 playbin uri=file://$FILE1 video-sink=”overlaysink overlay-width=960 overlay-height=540”  playbin uri=file://$FILE2 flags=0x41 video-sink=”overlaysink overlay-left=960 overlay-width=960 overlay-height=540” playbin uri=file://$FILE3 flags=0x41 video-sink=”overlaysink overlay-top=540 overlay-width=960 overlay-height=540” playbin uri=file://$FILE4 flags=0x41 video-sink=”overlaysink overlay-left=960 overlay-top=540 overlay-width=960 overlay-height=540”


  运行效果如下图:


ESM6802双屏显示LVDS+HDMI.gif

[lablebox]