二、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 连续内存池

相关推荐
orion5719 小时前
Missing Semester Class1:course overview and introduction of shell
linux
用户120487221611 天前
Linux驱动编译与加载
linux·嵌入式
用户805533698031 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式
用户805533698031 天前
RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设
linux·github·嵌入式
七歌杜金房2 天前
我终于又有了自己的 Linux 电脑
linux·debian·mac
tntxia3 天前
linux curl命令详解_curl详解
linux
扛枪的书生3 天前
Linux 网络管理器用法速查
linux
顺风尿一寸3 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode3 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫3 天前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux