iMX6 夜视、导航花屏总结

基于iMX6 Linux系统的设备加入如下功能

1. 开机动画(基于cpu自带的VPU)

2. 夜视功能(基于adv7180/7182)

3. 手机导航推送功能(手机地图资源通过wifi透传给设备应用)


第一个基于官方用例mxc_vpu_test,第二个基于官方用例mxc_v4l2_tvin

这三个功能都是将图像绘制到fb1中,即imx6的Overlay叠加层(fb1为前景,fb0为背景)

ioctl(fd, FBIOBLANK, FB_BLANK_NORMAL);

ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK);

ioctl(fd, MXCFB_SET_LOC_ALPHA, &loc_alpha);

ioctl(fd, MXCFB_SET_OVERLAY_POS, &pos);

ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo);


这个三个功能不同地方如下

第一个使用官方的解码器播放视频,会直接打开fb1并覆盖在fb0上播放

第二个会设置cvbs输入的格式为uyuv并打开fb1显示

第三个为基于Qt的本地应用,显示的图像为地图数据,按照rgba的格式来显示


这个三个工能合并起来使用的时候会带来各方面的花屏问题

1. 夜视个导航功能互切的时候会花屏,改善方法:在使用前将yuv和rgb格式设置对了再打开FB_BLANK_UNBLANK,同时确保bpp是匹配的,否则会引起色偏

    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;

-----------------------------------------------------------------------------------------

    fmt.type                = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_UYVY;
    fmt.fmt.pix.field       = V4L2_FIELD_INTERLACED;


2. 在改变导航功能的显示区域的时候会出现花屏

原因为当前使用的显示方式为framebuffer,不带窗口系统,所以Qt程序会根据现有的窗口大小创建Qt的窗口(export QT_QPA_EGLFS_FB=/dev/fb1使Qt运行于fb1),Qt窗口大小是根据fb1的区域创建的(MXCFB_SET_OVERLAY_POS/FBIOPUT_VSCREENINFO等),在Qt窗口已经绘制成功后,若修改fb1区域的大小会引起花屏,大概是Qt窗口不会随着fb区域变更导致的


3. 在使用local_alpha和夜视(mxc_v4l2_tvin)结合的时候,硬件上有个16位对齐,所以分辨率宜设置为16的倍数,否则容易出现花屏,在mxc_v4l2_tvin代码中有8像素对齐的代码


4. 在夜视窗口的分辨率过大时会引起屏幕闪屏,目前原因未知,但概率似乎和cpu/gpu负载有正相关






猜你喜欢

转载自blog.csdn.net/bgk112358/article/details/79761436