1、UI开发基本认知概念
1.1、基本概念
以瑞芯微 RK3566 硬件 Linux 环境为例:
css
┌──────────┐
│ VPU │ ← 视频"解"
└────┬─────┘
│ 原始帧(YUV/RGB)
┌────▼─────┐
│ RGA │ ← 图像"搬 / 变"
└────┬─────┘
│ 处理后帧
┌────▼─────┐
│ GPU │ ← UI"画 / 算"
└────┬─────┘
│ framebuffer
┌────▼─────┐
│ DRM │ ← "合成 + 显示"
└────┬─────┘
│
LCD / HDMI
在
RK3566上,GPU / VPU / RGA / DRM是 硬件完全独立、职责严格分离 的四个模块:
VPU负责"解"RGA负责"搬 / 变"GPU负责"画"DRM负责"合 / 显"它们通过共享内存形成 流水线协同工作,而不是互相替代。
一句话记忆:
VPU解视频
RGA搬/缩/转
GPU画UI
DRM显示合成
1.1.1、GPU(图形处理单元)------"画画的人"
1.1.1.1、GPU的本质定位
GPU= 图形渲染引擎
它的目标不是"处理数据",而是:
- 把 几何 / 像素 /
shader算成最终画面 - 为
UI、动画、3D提供算力
GPU负责什么?
Qt/QtQuick/OpenGL ESUI控件绘制- 动画、透明度、特效
OpenGL shaderWayland/EGL渲染
GPU不负责什么?
- ❌ 视频解码
- ❌ 大规模
memcpy - ❌ 视频缩放(效率不如
RGA)
1.1.1.2、 GPU 的软件栈
css
Qt / OpenGL / Wayland
↓
EGL / GLES
↓
Mali GPU Driver
↓
GPU Hardware
典型特征
bash
/dev/mali0
libEGL.so
libGLESv2.so
1.1.1.3、GPU 的工程角色总结
GPU决定的是:画面"好不好看、顺不顺"
UI 卡 → 第一时间怀疑 GPU
动画掉帧 → GPU / 合成方式
Qt 性能差 → GPU 或 DRM fallback
1.1.2、VPU(视频处理单元)------"解片的人"
1.1.2.1、VPU 的本质定位
VPU= 专用视频编解码硬件
它的存在目的只有一个:
用最小的
CPU代价,把压缩视频变成原始帧
VPU 负责什么?
H.264 / H.265 / VP9解码JPEG解码- 视频编码(部分规格)
- 高分辨率视频硬解
VPU 不画、不显示、不合成
1.1.2.1、VPU 的软件栈
css
GStreamer / FFmpeg
↓
MPP / V4L2
↓
VPU Driver
↓
VPU Hardware
关键词:
bash
mppvideodec
librockchip_mpp.so
/dev/mpp_service
1.1.2.2、工程角色总结
VPU决定的是:视频"能不能流畅播、CPU会不会爆"
CPU 播视频 80% → 一定没用 VPU
4K 播不了 → 看 VPU 能力
视频卡顿 → 先确认是否硬解
1.1.3、RGA(Raster Graphic Accelerator)------"搬砖的人"
1.1.3.1、RGA的本质定位
RGA= 高速2D图像处理器
它不"画",不"理解 UI",只做一件事:
又快又省地处理"整张图"
RGA擅长什么?
memcpy(超快)resize(视频缩放)rotate / flipcropYUV↔RGB转换
不支持:
- 字体
UI控件shaderOpenGL
1.1.3.2、RGA的软件栈
css
App / MPP / Camera
↓
librga
↓
RGA Driver
↓
RGA Hardware
设备特征:
bash
/dev/rga
librga.so
1.1.3.3、RGA工程角色总结
RGA 决定的是:数据"搬得快不快、转得省不省
CPU"
大量拷贝 → RGA
视频缩放 → RGA
旋转摄像头画面 → RGA
1.1.4、DRM(显示子系统)------"最后把画面送上屏的人"
1.1.4.1、DRM的本质定位
DRM= 显示控制 + 硬件合成
它不是"算力模块",而是:
- 硬件扫描输出
- 硬件
plane合成 Z-order / alpha
DRM负责什么?
- 多
plane overlay alpha混合- 硬件合成
- 双屏 / 异显
- 最终输出到
LCD / HDMI
DRM 不解码、不画 UI、不做复杂运算
1.1.4.2、DRM的软件栈
css
Qt / Wayland / KMS
↓
libdrm
↓
DRM Driver (VOP2)
↓
Display Hardware
会用到的工具:
bash
modetest
kmscube
1.1.4.3、DRM工程角色总结
DRM决定的是:画面"怎么叠、怎么出屏、效率高不高"
多层视频 → DRM plane
UI + 视频 → DRM overlay
双屏异显 → DRM
1.1.5、四者的"关系本质总结表"
| 模块 | 本质 | 是否算力密集 | 是否独立硬件 |
|---|---|---|---|
GPU |
图形渲染 | 高 | Y |
VPU |
视频解码 | 专用 | Y |
RGA |
图像处理 | 中 | Y |
DRM |
显示合成 | 低 | Y |
硬件完全独立,但共享 DDR 带宽
1.1.6、真实项目中的典型组合
-
场景 1:
Qt UI+ 视频背景nginxVPU 解视频 GPU 画 UI DRM 合成 -
场景 2:双路视频叠加
nginxVPU × 2 DRM plane × 2 -
场景 3:摄像头 +
UInginxISP → RGA → GPU → DRM