二、linux系统 应用开发:整体Pipeline流程

1.2、整体 Pipeline 总览

buffer 流向

sql 复制代码
┌──────────────────────────────────────────────────────────────┐
│                        DDR (共享内存)                         │
│                                                              │
│  ┌──────────────┐                                            │
│  │ Compressed   │                                            │
│  │ Video Stream │  (H.264 / H.265 / VP9)                      │
│  └──────┬───────┘                                            │
│         │                                                    │
│         ▼                                                    │
│  ┌──────────────┐      DMA Buffer (YUV)                      │
│  │     VPU      │──────────────────────────────┐            │
│  │ (MPP / VDEC) │                              │            │
│  └──────┬───────┘                              │            │
│         │                                      │            │
│         │ (optional)                           │            │
│         ▼                                      │            │
│  ┌──────────────┐   DMA Buffer (RGB/YUV)       │            │
│  │     RGA      │──────────────────────────────┘            │
│  │ (Resize/CSC) │                                           │
│  └──────┬───────┘                                           │
│         │                                                    │
│         │                                                    │
│         ▼                                                    │
│  ┌──────────────┐   GPU Framebuffer (RGBA)                   │
│  │     GPU      │◀──────── Qt / OpenGL / EGL ─────────┐     │
│  │ (Mali-G52)   │                                      │     │
│  └──────┬───────┘                                      │     │
│         │                                              │     │
│         ▼                                              │     │
│  ┌──────────────────────────────────────────────────┐  │     │
│  │                    DRM / VOP2                    │◀─┘     │
│  │                                                  │        │
│  │   Plane-0 : Video (from VPU/RGA buffer)          │        │
│  │   Plane-1 : UI (from GPU framebuffer)            │        │
│  │   Plane-2 : Cursor / Overlay                     │        │
│  │                                                  │        │
│  └──────────────┬───────────────────────────────────┘        │
│                 │                                            │
│                 ▼                                            │
│            LCD / HDMI / MIPI                                 │
└──────────────────────────────────────────────────────────────┘
1.2.1、逐模块 + Buffer流向详解(非常关键)

下面我不讲概念,只讲真实数据是怎么走的。

1.2.1.1、VPU(视频解码路径)
css 复制代码
Compressed stream
      ↓
VPU (MPP / V4L2)
      ↓
DMA buffer (YUV420 / NV12)

要点:

  • VPU 输出的是 原始帧
  • 帧放在 DMA buffer(物理连续内存)
  • CPU 不拷贝、不参与像素处理

这一步决定:CPU 占用是否低

1.2.1.2、RGA(可选:图像处理)
css 复制代码
VPU YUV buffer
      ↓
RGA
 (resize / rotate / CSC)
      ↓
DMA buffer (目标尺寸 / RGB)

什么时候一定要 RGA

  • 视频分辨率 ≠ 屏幕分辨率
  • 视频是 YUV,但 DRM/GPU 需要 RGB
  • 需要旋转 / 镜像

RGA 是"视频帧进入显示系统前的整形器"

1.2.1.3、GPUUI 渲染路径)
css 复制代码
Qt / OpenGL
      ↓
GPU (Mali)
      ↓
Framebuffer (RGBA8888)

注意:

  • GPU 不解视频
  • GPU buffer 通常是 GEM / dumb buffer
  • UI 动画、透明度、文字都在这里完成

这一路和 VPU 是完全并行的

1.2.1.4、DRM / VOP2(最终合成 + 输出)
css 复制代码
Plane-0 ← Video buffer (VPU / RGA)
Plane-1 ← UI buffer (GPU)
Plane-2 ← Overlay / Cursor
        ↓
Hardware composition
        ↓
Scanout

关键点(非常重要):

  • DRM 不拷贝 buffer
  • DRM 不"算"像素
  • DRM 只是:
    • 绑定 buffer
    • 设置 plane
    • 设置 alpha / z-order
    • 扫描输出

这是为什么 DRM overlay 几乎不耗 CPU/GPU

1.2.2、真实项目常见 Pipeline
  1. UI + 单视频(最常见)

    nginx 复制代码
    VPU ──────▶ DRM plane-0
    GPU ──────▶ DRM plane-1

    性能最好
    GPU 压力最小

    推荐方案

  2. 双视频叠加

    nginx 复制代码
    VPU(0) ─▶ DRM plane-0
    VPU(1) ─▶ DRM plane-1 (alpha=0.5)
    GPU    ─▶ DRM plane-2

    GPU 几乎不参与视频
    DRM plane 数量是瓶颈

  3. 不用 DRM overlay(性能最差)

    nginx 复制代码
    VPU → RGA → GPU → GPU 合成 → DRM

    GPU 负担重
    UI + 视频一起掉帧

    只在 DRM plane 不够时才用

1.2.3、Buffer 类型对照表
Buffer 来源 用途
DMA buffer VPU / RGA 视频帧
GEM buffer GPU UI / OpenGL
dumb buffer DRM scanout
ION / CMA kernel 连续内存池

相关推荐
Doro再努力14 分钟前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene18 分钟前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
忧郁的橙子.25 分钟前
02-本地部署Ollama、Python
linux·运维·服务器
醇氧34 分钟前
【linux】查看发行版信息
linux·运维·服务器
No8g攻城狮1 小时前
【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤
linux·运维·ubuntu
XiaoFan0122 小时前
免密批量抓取日志并集中输出
java·linux·服务器
souyuanzhanvip2 小时前
ServerBox v1.0.1316 跨平台 Linux 服务器管理工具
linux·运维·服务器
HalvmånEver3 小时前
Linux:线程互斥
java·linux·运维
番茄灭世神3 小时前
Linux应用编程介绍
linux·嵌入式
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [drivers][mmc][mmc_sdio]
linux·笔记·学习