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

相关推荐
信创工程师-小杨10 小时前
Linux内网环境如何解决依赖的问题
linux·运维·服务器
设计师小聂!10 小时前
宝塔 Linux 面板保姆级教程
linux·mysql·开源·运维开发
不吃土豆的马铃薯10 小时前
C++ 高性能网络缓冲区 Buffer 源码解析
linux·服务器·开发语言·网络·c++
java知路10 小时前
linux yum 下载docker安装包及依赖安装包,并离线安装
linux·运维·docker
fanged10 小时前
设备树学习2--一个DTBO实验
linux·嵌入式开发
星间都市山脉11 小时前
Android STS(Security Test Suite)完整介绍与测试流程
android·java·linux·windows·ubuntu·android studio·androidx
qq_1631357511 小时前
Linux 【02-tac命令超详细教程】
linux
Jurio.11 小时前
tmux 安装与使用教程:SSH 断开后任务继续运行,终端分屏与多窗口管理
linux·经验分享·ssh·tmux
YJlio11 小时前
《Sysinternals实战指南》16.5 Ctrl2Cap 工具详解:把 Caps Lock 变成 Ctrl 的键盘改造与回退方法
linux·运维·服务器·网络·python·学习·计算机外设
l'm coming11 小时前
[linux]内核启动加载驱动文件的流程
linux·arm开发·驱动开发·嵌入式