微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于linux的全彩LED显示屏脱机控制系统设计

基于linux的全彩LED显示屏脱机控制系统设计

时间:08-24 来源:论文网 点击:

为底层显示接口。因此本文按照通用的2D显示接口,独立实现了一套基于屏幕坐标的通用底层2D显示接口。

  在实现上通过mmap把SM501的控制寄存器和独立显存全部从内核空间映射到用户空间,这样在程序中可以直接访问SM501的寄存器和管理本地显存,避免了在显示时应用程序与内核之间的数据交换,显示加速作用得以充分发挥。基于对SM501的直接访问,底层显示层实现了一套基本接口,包括显存分配与释放和基本2D加速操作如画线(line)、矩形填充(fill_rect),位图复制(bitblt)、缩放(bitblt_stretch)、色空间转换(CSC)等。其中对视频播放性能影响最大的是缩放和色空间转换。

  SM501的绘图引擎(Draw Engine)包括两个部分,2D绘图引擎和CSC颜色空间转换模块。2D绘图引擎主要用来绘制直线(基于Bresenham算法),矩形填充,复制(Bitblt),旋转复制(Rotation bitblt)。缩放与颜色空间转换功能都是通过CSC模块来实现。CSC模块可以实现YUV422,YUV420,RGB565,RGB888几种色彩空间及格式转换到RGB565和RGB888,色空间转换隐含了缩放功能。

  显存分配与释放管理是对映射到用户空间的Frame buffer进行的。实现上使用空闲链表的方法,并且采用最先适应的原则。最先适应分配算法有利于保留更大的连续内存块给那些一次性内存需求量大的分配请求。由于视频解码后色空间转换和缩放必须使用硬件加速来实现,因此总是预留1M的显存空间给视频显示使用。在显存不足的情况下,通过malloc分配系统内存。相应的所有显示层接口的地址参数均被设计成为自动识别地址属于系统内存还是独立显存,如果地址属于系统内存,则表明当前显存不足,于是使用软件的方法实现绘图操作。在释放显存时,程序若识别参数地址为系统内存,将调用free去完成释放。

  在多个显示区域同时显示的情况下,显存的分配与释放管理以及所有的基于硬件加速的2D操作均被互斥地调用,以避免多线程同时对SM501资源进行争用带来的与时间相关的执行错误。

  由于SM501加速操作只能使用本地帧存的物理地址,而通过mmap映射得到的是进程空间的虚拟地址,显存分配得到的地址也是基于映射后的地址,因此写入SM501寄存器中作为地址的操作数必须将进程空间地址转化为实现的帧存物理地址。转化方法就是用显示分配函数得到的地址减去mmap得到的首地址。

  建立在底层显示层之上,软件实现了与屏幕绝对坐标无关的基于区域内部坐标的2D加速显示接口。区域内部坐标与区域本身在屏幕上的绝对坐标相加即可得出要显示的绝对坐标。另外每个显示区域都有对齐、缩放方式的选项。缩放方式可以有不缩放,线性缩放,非线性缩放三种,对齐在X,Y方向上分别有三种对齐方式。因为实际显示的内容大小与显示区域大小往往不是相同的,因此这两种选项对实际显示效果影响极大。如区域宽高比与显示内容宽高比相差较大时,非线性缩放将导致显示内容严重畸变,而线性缩放将显示内容保持为原来的宽高比。显示层次如图4.

  图3 显示层次

  4.2.3脱机系统的视频播放器设计

  这部分主要介绍针对SM501显卡的解码过程优化设计,并给出优化后的性能测试数据。LED脱机播放系统目前支持MPEG-4视频格式的AVI文件播放。

  MPEG-4是MPEG(运动图像专家组)制定的视频压缩标准,是目前用得最广泛的一种视频编码标准。MPEG组织于1999年1月正式公布了MPEG-4 V1.0版本。MPEG-4除采用第一代视频编码(MPEG-1,MPEG-2,H.263等)的核心技术,如变换编码、运动估计与运动补偿、量化、熵编码外,还提出了一些新的有创见性的关键技术,包括视频对象提取技术、VOP视频编码技术、视频编码可分级性技术、运动估计与运动补偿技术等。

  Xvid是开源的MEPG-4码器,遵守GPL通用公共许可证,也是目前国际上公认的性能最佳的 MPEG-4编解器之一,支持MPEG-4 SP框架。本文移植了Xvidcore-1.1.3到arm-Linux环境,并且基于Xvid设计了自己的LED脱机系统视频播放器。

AVI文件格式是Windows系统下最常用的一种视频文件格式。AVI文件并不局限任何视频编码格式。AVI文件格式是基于RIFF(Resource Interchange File Format)文件格式的。RIFF基于"块"为信息单位,每个块由一个4字符组成的FOURCC字标识。整个文件由一个RIFF块构成,RIFF块和 LIST(列表)块可以包含子块。包含子块的块结构为:FOURCC+块长度+块类型+块数据。不包含子块的块结构为:FOURCC+块长度+数据。 AVI文件在RIFF的基础上定义了自己的块类型和数据。一个AVI RIFF文件由3大部分组成:RIFF文件头,hdrl列表,movi列

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top