SGX530实现的功能模块标记为深色,具体功能如下:
a. gpuvsink该模块设计为Gstreamer视频显示后端插件,将视频解码器解出的YUV 数据帧,传送给SGX530模块。按照标准的Gstreamer视频显示后端插件设计,可采用标准的显示后端接口编程。对于视频输入的尺寸,要求其宽(width)为4个像素点的倍数。其输出视频帧数据这里可称为Video Plane。
b. linuxfbofs该模块设计为QT架构中的显示后端,将QT的帧数据发送到SGX530模块中处理。linuxfbofs和framebuffer有同样的接口,对于QT应用开发是透明的。其输出界面帧数据为Graphics Plane。
GPU Composition
该模块基于Open GL ES 2.0接口设计,对输入的Video plane和Graphics Plane进行色彩空间转换,图层缩放,OSD叠加等操作,将最终的帧数据推送到Framebuffer中显示。
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.
#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。