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

相关推荐
桑榆4162 小时前
双系统(Windows + Ubuntu)安装流程
linux·windows·ubuntu
ltl8 小时前
实时 OS 巡礼:VxWorks、QNX、Zephyr 与 PREEMPT_RT
linux
我是谁??9 小时前
Ubuntu22.04更换清华源
linux·运维·服务器
Shell运维手记9 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
测试运维日常笔记11 小时前
Linux系统安装配置TigerVNC服务器完整指南
linux·运维·服务器
雾时之林12 小时前
Linux----cron定时服务
linux·运维·服务器
zlinear数据采集卡12 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
wengqidaifeng13 小时前
1.从“会敲命令”到理解 Linux:15 个基础指令、文件树与命令执行的本质
linux·运维·服务器·ubuntu
奔跑的架构师15 小时前
[A-49]ARMv9/v8-PSCI接口规范与工作流程简介
android·linux·arm开发·arm
(╹◡╹)16 小时前
11.RK3588本地大模型内存评估优化
java·linux·前端