全彩LED 显示墙异步控制卡以成本低,集中管理等特点,逐渐成为全彩LED 显示墙控制卡的主流。AM335x 具有丰富的硬件外设,基于 Linux 的软件方案,包含GPU Composition模块能提供完整的多图层叠加缩放等功能,十分适合全彩 LED 显示墙的异步控制卡应用。本文将从硬件和软件两个方面介绍基于AM335x 提供的相应解决方案。
a. Plane格式
Video Plane 可支持YUV422,NV12,I420 和 YUV420 格式帧数据。
Graphics Plane 可支持RGB565,RGB888 和ARGB8888 帧数据。
GPU Composition 接收这些格式的帧数据,并将其转换为RGB 格式,进行图层缩放,OSD 叠加等操作。
b. Plane 的内存分配
SGX530 输入内存(Buffer),只支持物理地址连续的Buffer。因此,在gpuvsink和linuxfbofs中,使用cmem(具体可查阅参考文档[9])据此要求分配内存Pool 来存储帧数据,需在Linux 启动时通过命令行参数”mem=”配置预留给Kernel 的内存,而剩下的内存即是给cmem所准备,用于分配物理连续的内存。
其大小的计算公式如下:
Pool size for Graphics Plane = width * height * Bytes Per Pixel
Pool size for Video Plane = video frame width * height * 2 (Bytes Per Pixel) * 8 (buffers)
对于一个Video Plane 可能需要多个Buffer,其具体个数定义在
gpu-compositing/gpuvsink/src/gst_render_bridge.h
#define PROP_DEF_QUEUE_SIZE 8
c. Pool传递
Graphics Plane 和Video Plane 以指针的形式将Pool 传递给GPU Composition。
C. 模块间的控制流
a. 配置信息数据结构
对于Graphics Plane,通过命名管道“"/opt/gpu-compositing/named_pipes/video_cfg_and_data_plane_X"”其配置信息在下面数据结构中
b. 命名管道( named pipe)配置信息
上述配置信息,通过存放于文件系统中的命名管道,传递到GPU Composition 模块。
对于linuxfbofs,命名管道文件为/opt/gpu-compositing/named_pipes/gfx_cfg_plane_X。
对于gpuvsink,命名管道文件为/opt/gpu-compositing/named_pipes/video_cfg_and_data_plane_X