基于i.MX6Q的嵌入式显示系统设计与实现

2020-06-10 07:40陈腾
电子技术与软件工程 2020年4期
关键词:畸变线程绘制

陈腾

(中航航空电子有限公司 北京市 100098)

1 引言

人们认知和感知外部世界的主要途径是视觉。大量实验心理学实验验证了人类约83%的信息获取来自视觉。信息时代引发了“信息爆炸”,与视觉相关的应用更是受到用户追捧。显示技术在军事、信息科技、娱乐等诸多应用领域中起到了关键性的作用。

机载、车载、舰载及智能眼镜等显示系统现已广泛的应用在各种飞机、车辆、舰船、单兵或个人,通过像源产生的操纵指引和显示信息与外部自然场景实时图像相互叠加投射到组合光学镜片上,使得驾驶员或者操作者在观察真实外视景的同时,能够了解飞机、车辆、舰船、个体等的可视化状态信息,甚至不利气象条件下或环境限制情况下的增强显示信息。

传统的嵌入式显示系统一般采用OpenGL或者其他图形API进行矢量图形的绘制,借助GPU加速实时渲染实现外视频格式转换、缩放及叠加,基于并行结构的FPGA对图像进行畸变校正处理,将显示信息经过光学系统投射到显示像源上进行显示,因此传统显示设备需要GPU图像处理板和FPGA处理板等多块板卡,设备的成本高、体积和功耗大、可扩展性差。此外,由于采用Verilog等硬件描述语言进行开发,开发复杂度较高维护难且迭代周期较长。

近年来无论是军用电子设备、民用电子设备,还是消费类可穿戴电子产品,小型化和低功耗成为主流发展趋势。ARM架构SOC在性能和功耗上十分切合小型化嵌入式系统需求。借助多核处理器或者DSP、GPU等辅助硬件资源实现高复杂度编码,借助通用平台及操作系统,通过软件实现系统控制、任务调度和显示绘制等功能,从而有效降低开发难度,大幅削减成本,提高系统的可维护性及扩展性。

本文采用Freescale ARM Cortex-A9架构的i.MX6Q SOC,借助Linux操作系统和内嵌图像处理单元GPU设计了一套实时字符及视频显示系统。

2 系统整体设计

如图1所示,基于i.MX6Q的显示系统由视频采集模块、视频存储模块、视频转换模块、图形绘制模块、畸变校正模块以及显示控制软件共同组成。显示系统通过视频采集模块实时采集的PAL格式的模拟输入视频数据和DVI-D格式的数字输入视频数据,并转换成YUV4:2:2格式的2路并行信号,存入视频存储模块中。视频转换模块读取视频存储模块中采集到的输入视频,并进行图像缩放和RGB5:6:5格式转换。图形绘制模块用于2D图形、字符及显示效果的绘制,并将绘制效果与视频转换模块输出的视频进行叠加。叠加结果一路通过i.MX6Q集成的HDMI接口直接输出为DVI-D格式的数字视频,用于电子仪表显示给驾驶员或者操作人员;另一路送畸变校正模块,通过GPU纹理贴图的方式将叠加的整幅图像进行畸变校正操作,再将校正后的整幅图像经过光学系统投射到显示像源上进行显示。

3 硬件设计

显示系统硬件平台主要由i.MX6Q核心处理器、存储单元、调试接口、电源模块、视频采集芯片、信号转换芯片、时钟等部分构成。图2为基于i.MX6Q平台的显示系统硬件部分组成示意图。

作为显示系统的硬件核心处理单元,i.MX6Q主要基于ARM Cortex-A9架构的高扩展性1.2GHz高速四核应用处理器,其硬件架构如图2所示。该芯片集成了2D和3D图形处理器,具备1080p视频处理能力,能够支持64-bit DDR3/DDR3L/LPDDR2内存接口,并且具有丰富的集成IO接口链接多种类型外设,具有较高的SOC集成度,大幅降低了设计复杂度。

i.MX6Q处理器内嵌了VIVANTE 3个相互独立且高度集成的图形处理单元(GPU,graphics processing units)。其中,GPU3Dv4(GC2000)负责3D图形加速,支持显示高达1080p的显示分辨率,能够支持OpenGL ES 2.0及其扩展, OpenGL ES 1.1和OpenVG 1.1。GPU2Dv2(GC320)负责2D图形加速,支持多种2D图形算法。GPUVGv2(GC355)负责矢量图形加速。为了实现系统的高性能、低功耗,GPU对片上硬件资源进行了充分利用和优化设计。

显示系统采用非易失性FLASH芯片存储操作系统和文件系统,每次上电时从该芯片中读取系统并加载应用程序。另有64bit带宽、1333MHz速率的2GByte DDR3高速数据存储芯片,对内存进行扩展及存储业务数据。

系统设计了以太网口、USB接口、RS232串口等调试接口,用于Linux环境下,内核和文件系统的加载,显示控制软件和驱动的开发及调试,数据传输、信息输出显示等功能。

4 软件设计

考虑到显示系统的实时性,将Linux操作系统移植到i.MX6Q芯片上,在显示控制软件内核中编写了视频采集驱动模块、FLASH驱动、DDR驱动等代码,将外设抽象成文件系统下的“/dev/image*”设备,达到底层硬件驱动和上层应用软件分离的目的,有利于提供系统的可扩展性,便于软件开发。

图1:显示系统整体框图

为了满足字符及视频显示的高实时性,显示系统充分借助i.MX6Q的4个内核,采用多线程软件设计组织整个数据流水线,提高应用的整体帧率。应用程序可分为7个线程,分别为:主线程、视频采集线程、视频缩放线程、视频显示线程、畸变校正线程、SGL指令接收线程、数据接收线程。其中主线程为父线程,其它线程都由主线程创建,作为主线程的子线程。除了数据接收线程外,其余线程为同步线程,由主线程控制同步时序。通过信号量来实现多线程的同步,并将任务负载均衡的分布在4个CPU核中。显示控制软件架构及时序如图3所示。

显示控制软件主要线程模块设计方法实现如下:

视频采集模块video_capture,操作通过V4L2视频采集框架调用函数实现,不需要关心底层采集芯片ADV7180和ADV7611具体实现。显控软件对V4L2编程接口做了进一步封装以适应显示系统调用需要。

视频缩放模块video_scaler,通过VIVANTE提供的GAL接口,调用FilterBlit功能,完成外视频缩放操作变换,及YUV422格式向RGB565格式转换。

视频显示模块video_display,预先提取并存储字体文件的参数并上传到硬件中,再直接绘制硬件中缓存的数据。OpenGL的Truetype字体纹理生成依赖开源的SKIA程序加载Truetype字体,将SKIA画布(SkCanvas)均匀分割成16x8个网格,通过调用measureText()函数提前解析出文本的宽度数值,将所有文本逐个绘制到每个网格中并存储每个文本的位置坐标信息,最终由SkCanvas控制图像的输出。如需绘制带黑边的字符、反走样、旋转、开窗、闭塞等特殊图形时,只需要使用工具生成特殊图形的图像及其参数,在绘制的时候切换到相应图形的纹理来进行渲染即可。这种绘制需要生成特定字号的纹理画布以获得较好的显示效果。

畸变校正模块distortion_correction模块,通过畸变字典存储畸变后图像的每个像素坐标与畸变前原图像坐标的对应关系。OpenGL在绘制时采用TrangleStrip的方式,通过8x8网格将上传到GPU中的图像划分为多个四边形小窗,计算每个8x8网格四个顶点的像素值,网格中间的像素值则根据四个顶点像素值自动插值生成。绘制时指定畸变图像四个顶点的位置、原图像四个顶点对应的像素值,用三角形覆盖整个畸变图像,逐个绘制完三角形即实现了整幅畸变图像的渲染。

5 结束语

本文基于Cortex-A9架构的i.MX6Q SOC,借助Linux操作系统和内嵌图像处理单元GPU设计了一套实时字符及视频显示系统。该嵌入式系统的硬件部分以高性能i.MX6Q芯片为核心,进行了相关硬件电路的设计。显示控制软件基于 Linux操作系统,采用V4L2视频采集框架实现两路实时视频采集功能,采用开源SKIA绘制2D图形及字符,使用GPU GC320进行视频转换、2D图像的旋转、缩放、平移等操作,通过OpenGL以贴图的方式实现畸变校正功能,最终得到两路视频输出。设计结果表明,该系统实时显示性能较高,在工程实践中尤其是小型化、低功耗的应用需求中具有很好的应用价值。

图2:显示系统硬件示意图

图3:显示控制软件架构及时序图

猜你喜欢
畸变线程绘制
Art on coffee cups
放学后
在Lightroom中校正镜头与透视畸变
浅谈linux多线程协作
在转变中绘制新蓝图
辐射诱导染色体畸变的快速FISH方法的建立
《癌变·畸变·突变》2014年第26卷索引
《癌变·畸变·突变》第六届编委会第2次会议纪要
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究