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

相关推荐
木心月转码ing17 小时前
WSL+Cpp开发环境配置
linux
崔小汤呀2 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应2 天前
vi编辑器使用
linux·后端·操作系统
何中应2 天前
Linux进程无法被kill
linux·后端·操作系统
何中应2 天前
rm-rf /命令操作介绍
linux·后端·操作系统
何中应2 天前
Linux常用命令
linux·操作系统
葛立国2 天前
从 / 和 /dev 说起:Linux 文件系统与挂载点一文理清
linux
哇哈哈20212 天前
信号量和信号
linux·c++
不是二师兄的八戒2 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
一个人旅程~2 天前
如何用命令行把win10/win11设置为长期暂停更新?
linux·windows·经验分享·电脑