在最初开机的时候,fb1并不是fb0的overlay此时对fb1的操作不会有显示
使用overlay可以通过如下两个示例打开,关闭overlay还找到方法,目前的做法是直接设置为透明或者直接应用到别的场景,比如将fb1的内容通过HDMI输出
可到freescale community找如下俩个代码例子,开启alpha和colorkey之旅
用例
colorkey on: ./alpha_test colorkey_on <colorkey value> //colorkey value, such as 0xFF0000 for red
colorkey off: ./alpha_test colorkey_off
global alpha: ./alpha_test alpha_global <alpha value> //alpha value, such as 0x80
local alpha: ./alpha_test alpha_local //alpha effect is accordant with alpha buffer set in step 2
alpha in pixel: ./alpha_test alpha_pixel //alpha effect is accordant with alpha value in pixel set in step 2
alpha off: ./alpha_test alpha_off
当执行fb_setup的时候就打开了overlay
主要操作是
struct mxcfb_gbl_alpha gbl_alpha;
struct mxcfb_loc_alpha loc_alpha;
gbl_alpha.enable = 1;
loc_alpha.enable = 1;
但将enable置为0,overlay会响应,但关闭似乎不完全
对fb1作半透明的设置,主要是通过local_alpha的phy_addr0,phy_addr1进行设置
如需做不规则的半透设置,算法比较困难时,可以用PS画出不规则的半透图,格式保存为8位灰度图,如下格式,保存为bmp格式
因为local_alpha的phy_addr0,phy_addr1物理地址一个像素的透明设置为8位
所以将8位灰度图每一位应用到物理地址上(要求8位灰度图分辨率和屏幕分辨率相同,如特殊需要也可以应用到局部并使用算法配合)
cat /unit_tests/wall-1024x768-565.rgb > /dev/fb0(imx6-sabresd开发板的自带测试程序)
./hint360_test(一个写到fb1的的应用,如图中为色条)
./alpha_test alpha_local
得到如下效果
对Qt环境变量的设置可以参考Qt官方文档
http://doc.qt.io/qt-5/embedded-linux.html
实现两个Qt app在不同的fb显示,需要如下操作
1、设置Qt环境变量使Qt在fb0运行
export QT_QPA_EGLFS_FB=linuxfb:fb=/dev/fb0
./myTest -platform eglfs &
2、设置Qt环境变量使Qt在fb1运行
export QT_QPA_EGLFS_FB=linuxfb:fb=/dev/fb1
3、还要关闭垂直同步,否则会有闪烁,原因不明,看实际情况而定
export QT_QPA_EGLFS_SWAPINTERVAL=0
4、打开overlay;对于当前程序,接下来三个步骤要按顺序执行
./hint360_test
5、在fb1上运行Qt程序
./haxc -platform eglfs &
6、使能local_alpha,开启半透效果
./alpha_test alpha_local
得到如下效果
////////////////////////////////////////////
第二篇 overlay与video融合
////////////////////////////////////////////
按照以上的方法与video融合会出现视频闪烁现象
原因是以上程序只用了alpha_local_phy_addr0
alpha_local_phy_addr0和alpha_local_phy_addr1都做相同的设置可以解决这个问题
如下video代码会对分辨路宽和高做4和8求余数
融合时需要设置分辨率宽高为8的倍数,否则图像overlay会变形(和开机动画不能有奇数分辨率类似,看起来像照片的摩尔纹)
其中遇到的问题是设置overlay不能放在video代码中,否则会遇到概率性打开失败或打开成功
对于imx6平台,在fsl-L3.14.28_1.0.0-bsp和fsl-4.1.15_2.0.0-bsp之间,显示是不一样的位深不同
在使用时注意fb格式的区别
vinfo.bits_per_pixel = 32;vinfo.activate |= FB_ACTIVATE_FORCE;
vinfo.nonstd = v4l2_fourcc('A', 'B', 'G', 'R');
vinfo.red.offset = 24;
vinfo.red.length = 8;
vinfo.green.offset = 16;
vinfo.green.length = 8;
vinfo.blue.offset = 8;
vinfo.blue.length = 8;
vinfo.transp.offset = 0;
vinfo.transp.length = 8;
------------------------------------------------------------------------------
vinfo.bits_per_pixel = 16;vinfo.activate |= FB_ACTIVATE_FORCE;
vinfo.nonstd = V4L2_PIX_FMT_RGB565;
vinfo.red.offset = 11;
vinfo.red.length = 5;
vinfo.green.offset = 5;
vinfo.green.length = 6;
vinfo.blue.offset = 0;
vinfo.blue.length = 5;
vinfo.transp.offset = 0;
vinfo.transp.length = 8;