RK3528 RGA+DRM框架 HDMI out视频输出:从多图层合成到显示送显

RK3528 RGA硬件加速:多分辨率输入源切换与尺寸自适应完全解析

标签 :RK3528 DRM 硬件缩放 尺寸适配 RGA HDMI输出 MEDAI V2

目录

  • [一、为什么需要 DRM:从 FBDEV 到现代显示框架](#一、为什么需要 DRM:从 FBDEV 到现代显示框架)
  • [二、DRM 框架核心技术](#二、DRM 框架核心技术)
    • [2.1 DRM 是什么:内核显示子系统](#2.1 DRM 是什么:内核显示子系统)
    • [2.2 KMS 五大对象:显示流水线](#2.2 KMS 五大对象:显示流水线)
    • [2.3 GEM 与显存管理:dumb buffer / PRIME](#2.3 GEM 与显存管理:dumb buffer / PRIME)
    • [2.4 libdrm 与一次标准送显流程](#2.4 libdrm 与一次标准送显流程)
  • [三、RK3528 显示硬件:VOP2 + HDMI 2.0](#三、RK3528 显示硬件:VOP2 + HDMI 2.0)
  • [四、RGA + DRM 协同:从多图层合成到 HDMI 送显](#四、RGA + DRM 协同:从多图层合成到 HDMI 送显)
    • [4.1 为什么是 RGA 先合成、DRM 后送显](#4.1 为什么是 RGA 先合成、DRM 后送显)
    • [4.2 完整流水线拆解](#4.2 完整流水线拆解)
  • [五、设备实战:结合 MEDAI V2 使用说明书](#五、设备实战:结合 MEDAI V2 使用说明书)
    • [5.1 视频输出源选择(决定送显主画面)](#5.1 视频输出源选择(决定送显主画面))
    • [5.2 镜像 / 旋转(编码参数同步到显示帧)](#5.2 镜像 / 旋转(编码参数同步到显示帧))
    • [5.3 视频叠加 Mode 1~5(RGA 多图层合成)](#5.3 视频叠加 Mode 1~5(RGA 多图层合成))
    • [5.4 绿幕抠图与 LOGO 叠加(RGBA / 色键合成)](#5.4 绿幕抠图与 LOGO 叠加(RGBA / 色键合成))
    • [5.5 系统状态验证 HDMI 输出接入](#5.5 系统状态验证 HDMI 输出接入)
  • 六、图层与模式速查表
  • 七、排障速查表
  • 八、要点回顾

一、为什么需要 DRM:从 FBDEV 到现代显示框架

早期嵌入式 Linux 用 FBDEV(Framebuffer Device) 显示:应用直接写一段显存,驱动只负责把这段内存刷到屏幕。它简单,但只能应付"单层、固定分辨率、无硬件加速"的场景------一旦要叠 LOGO、画中画、绿幕合成、多输入源预览,FBDEV 就无能为力了。

DRM(Direct Rendering Manager,直接渲染管理器) 是 Linux 内核中接管图形显示与 GPU 加速的子系统,自 Kernel 4.4 起成为 Rockchip 平台的标准显示框架(MEDAI V2 的 RK3528 即采用此框架)。它把"显示模式设置、显存分配、图层合成、时序扫描"统一抽象成一套对象模型,让应用层(通过 libdrm)可以精确控制每一帧如何被合成、何时被翻页、送到哪个物理接口。

💡 一句话理解:FBDEV 像"直接往屏幕上糊一张图";DRM 像"导演调度多个图层、在垂直消隐期精准换帧、再送到指定接口"。MEDAI V2 的 HDMI 本地画面输出,正是建立在 DRM 这套调度之上。


二、DRM 框架核心技术

2.1 DRM 是什么:内核显示子系统

DRM 分为用户空间 与内核空间 两部分,通过 libdrm 库封装 ioctl 交互:

  • 用户空间:libdrm 把 DRM 的 IOCTL 封装成友好 API,供 Wayland 合成器、Qt EGLFS、SDL 以及本设备的预览/送显程序调用。
  • 内核空间 :DRM 核心(通用逻辑)+ DRM 驱动(Rockchip 硬件适配层,drivers/gpu/drm/rockchip/)。
  • 设备节点 :/dev/dri/cardX(X 为 0~15,默认 card0)。打开该节点即可枚举显示资源、分配缓冲区、提交显示状态。

DRM 的两大支柱是 KMS(Kernel Mode Setting,内核显示模式设置) 与 GEM(Graphics Execution Manager,图形执行管理器) ,外加 PRIME(跨设备缓冲共享)。

2.2 KMS 五大对象:显示流水线

KMS 把一条"图像 → 屏幕"的显示流水线抽象为五个对象,顺序如下:

复制代码
Framebuffer → Plane → CRTC → Encoder → (Bridge) → Connector → Panel(屏幕)
对象 角色 在 Rockchip / RK3528 上的对应
Framebuffer (FB) 描述显存中一幅图像的布局(宽高、FourCC 像素格式、pitch、offset),与硬件无关 一幅合成好的 NV12 / RGB 帧
Plane(图层) 硬件图层,支持多层叠加。类型:Primary(主图层)、Overlay(视频/OSD/摄像预览层)、Cursor(光标层) VOP2 的 Cluster / Esmart / Overlay 窗口
CRTC 扫描输出流水线,保存显示时序(drm_display_mode),合并各 Plane,产生 VBLANK,连接像素流到 Encoder RK3528 的 Video Port(VP0 / VP1)
Encoder 把 CRTC 像素流转换成显示接口格式(HDMI / DP / DSI / LVDS 等) HDMI TX 控制器前的格式转换
Connector 物理显示接口,读取 EDID、检测热插拔、上报连接状态 HDMI 2.0 接口(含 HPD 热插拔检测)

Plane 的关键属性(决定能否做特效):

  • FB_ID / CRTC_ID:绑定哪个帧缓冲、送给哪个 CRTC;
  • SRC_X/Y/W/H:源区域,使用 16.16 定点坐标 ;CRTC_X/Y/W/H:目标显示区域(整数像素);
  • 当源尺寸 ≠ 目标尺寸时,VOP 自动做缩放;
  • alpha(透明度)、zpos(图层 Z 序)、rotation(0/90/180/270)、pixel blend mode(混合模式)、COLOR_ENCODING / COLOR_RANGE、IN_FENCE_FD(同步栅栏)。

⚠️ 注意:一个可见 Plane 必须满足------有效的 Framebuffer、兼容的 CRTC、受支持的像素格式、合法的缩放比、可见的目标矩形、合适的 alpha 与 Z 序、足够的带宽,否则该图层不会显示(黑屏/花屏的常见根因)。

2.3 GEM 与显存管理:dumb buffer / PRIME

GEM 负责显存的分配、映射与生命周期,并解决 GPU/CPU/视频解码器之间的同步:

  • Dumb Buffer :基于 CMA(连续物理内存)实现,仅支持连续物理内存,适合低分辨率简单场景。通过 drmModeCreateDumb() 创建,再用 drmModeAddFB2() 关联成 Framebuffer。
  • PRIME Buffer :基于 DMA-BUF 的跨设备缓冲共享机制,支持连续/非连续物理内存,用于 GPU、VPU(MPP 解码)、RGA 之间零拷贝传递帧数据。
  • Fence(dma_fence):保证 GPU 写入与 DRM 扫描之间的先后顺序,避免数据竞争与撕裂。

2.4 libdrm 与一次标准送显流程

一次"把一幅图送到 HDMI"的标准流程:

  1. 初始化 :驱动 drm_dev_register() 注册设备,KMS 初始化 CRTC / Encoder / Connector;
  2. 模式设置 :用户空间用 drmModeSetCrtc()(或原子接口 drm_atomic_commit())配置分辨率、刷新率,KMS 更新硬件时序;
  3. 显存分配 :用 drmModeCreateDumb() + drmModeAddFB2() 创建 Framebuffer,GEM 分配显存并返回句柄;
  4. 渲染与提交 :合成器把画面写入显存,调用 drmModePageFlip() 触发页面翻转;
  5. VBLANK 同步 :翻转发生在垂直消隐期(Vertical Blank),确保无撕裂;
  6. 资源释放:关闭 fd 时 DRM 自动回收显存与对象。

💡 原子提交(Atomic Commit) :通过 drm_atomic_commit() 一次性批量提交 CRTC / Plane / Connector 的所有参数,保证"要么全部生效、要么全部不变",是避免中间态花屏的关键机制。现代 Rockchip 显示驱动默认走原子模式设置。


三、RK3528 显示硬件:VOP2 + HDMI 2.0

RK3528 采用 VOP2 架构 (与 RK3562/3566/3568/3588 同代):整颗 SoC 只有一个 VOP,但 VOP 内部有多个独立的 Video Port(VP) 输出通道。

根据 RK3528 数据手册:

显示资源 规格
Video Port0 (VP0) 最大输出 4096×2304@60Hz(HDMI 主通道)
Video Port1 (VP1) 最大输出 720×576@60Hz
Cluster 窗口 最大 4096×2304,支持 AFBC、RGB/YUV/YUYV、缩放、旋转
Esmart 0/1/2/3 最大输入 2048×2160,输出 4096×2304,支持 4 区域
Overlay Port0 最多 4 层叠加,Port1 最多 2 层
图层能力 逐像素 alpha(颜色/alpha 分离)、Porter-Duff 混合、色键(Chroma Key)、抖动(Dither)、0/90/180/270° 旋转、X/Y 镜像
HDMI 符合 HDMI 2.0b,支持 4K×2K@60、带宽 18Gbps、HDCP 1.4/2.2、HPD 热插拔检测

RK3528 的 HDMI 与 VOP 绑定关系 :HDMI 的图像数据来自 VOP,在 RK3528 上 HDMI 固定绑定到 VP0 ,并固定使用 HDMI PHY PLL 作为 dclk 时钟源,无需在 DTS 中额外配置 PLL 即可输出标准分辨率(如 1080P60)。MEDAI V2 的 HDMI 2.0 本地输出规格为 1920×1080@60(见技术参数表),完全落在 VP0 能力范围内。

💡 理解层级:DRM 的 CRTC 对象在 RK3528 上就映射为 VOP2 的某一个 Video Port(VP0);Plane 映射为 VOP2 的 Cluster/Esmart/Overlay 窗口;Encoder/Connector 映射为 HDMI TX 控制器与 HDMI 物理接口。软件看到的"五大对象",硬件上就是这一套。


四、RGA + DRM 协同:从多图层合成到 HDMI 送显

4.1 为什么是 RGA 先合成、DRM 后送显

MEDAI V2 的画面不是"一幅现成的图",而是多路来源 + 多层特效实时拼出来的:

  • 主输入源:UVC 摄像头(经 V4L2 采集、MPP 硬解得到 NV12 帧);
  • 副输入源:NDI / NET1 / NET2(经网络拉流、MPP 硬解);
  • 特效层:视频叠加(Mode 1~5 双路拼接)、绿幕抠图(前景+背景合成)、LOGO(RGBA 叠加)、镜像/旋转(编码参数里配置);
  • 输出:本地 HDMI 电视 + 编码推流(两路共用同一合成结果)。

RGA(Rockchip 2D 硬件加速器) 在这里承担"合成车间":它把主源、副源、背景图、LOGO 按模式做缩放、色彩转换、Alpha 混合、色键抠图、旋转/镜像,产出一个统一格式的完整帧 。然后这个帧被交给 DRM,由 VOP2 扫描输出到 HDMI。

为什么不全部交给 VOP2 的硬件 Plane 去做多层合成?------因为 MEDAI V2 的叠加模式(如画中画、左右拼接、绿幕前景合成)逻辑复杂、图层数量与位置关系随配置动态变化,用 RGA 在内存里"先合成成一整张",再让 DRM 用单个 Primary Plane 扫描输出,是最稳、最省带宽、也最容易同时喂给编码链路的做法。RGA 输出帧既送 HDMI 预览,也送 MPP 编码,实现"预览/推流同源"。

4.2 完整流水线拆解

复制代码
[UVC 摄像头]──V4L2采集──┐
[NDI/NET1/NET2]─MPP硬解─┤
                        ├─→ [RGA 2D 合成车间]
[背景图/前景图]──────────┤      • 缩放/色彩转换(imcvtcolor)
[LOGO 图片 RGBA]────────┤      • Alpha混合(imblend)
                        │      • 色键抠图(chroma key) → 绿幕
                        │      • 旋转/镜像(imrotate/imflip)
                        │      • 按 Mode1~5 拼接双路
                        ▼
            [合成后统一帧 NV12/RGB]
                        │  (DMA-BUF 零拷贝 / dumb buffer)
                        ▼
            [DRM / GEM] 分配 Framebuffer
                        │  drmModeAddFB2() 注册
                        ▼
            [KMS] Plane(Primary) → CRTC(=VOP2 VP0)
                        │  drm_atomic_commit() 原子提交
                        ▼
            [Encoder] HDMI TX 格式转换
                        ▼
            [Connector] HDMI 2.0 接口 + EDID/HPD 热插拔
                        ▼
            [本地电视 / 监视器]  1920×1080@60
                        └─ 同时:合成帧送 MPP 编码 → RTMP/RTSP/SRT... 推流

要点:

  • RGA 与 DRM 通过 DMA-BUF 衔接:RGA 输出的帧 buffer 以 dma-buf 形式导入 DRM,避免 CPU 侧 memcpy,降低延迟与内存带宽占用;
  • 原子提交保证不花屏 :所有图层参数一次性 drm_atomic_commit(),切换叠加模式/绿幕时不会出现半帧错乱;
  • VBLANK 页翻转保证不撕裂:HDMI 显示用页面翻转在垂直消隐期换帧;
  • EDID/HPD 热插拔:Connector 上报 HDMI 是否接入、支持的分辨率,对应说明书"系统状态 → HDMI 输出接入状态"。

五、设备实战:结合 MEDAI V2 使用说明书

下面把上面的框架落到 MEDAI V2 的实际配置上,所有截图均来自设备真实 WEB 界面。

5.1 视频输出源选择(决定送显主画面)

进入 编码配置 > 信号配置,在"视频输出(HDMI 显示与编码源选择)"中选择送显主源:

  • UVC:USB 摄像头源(默认主输入源);
  • NDI:NDI 输入源;
  • NET1 / NET2:网络源 1 / 网络源 2 输入源。

页面底部的预监状态区会实时显示所有输入源的视频画面------这正是由 DRM/VOP2 把多路采集帧合成后在本地 HDMI 上呈现的预览。

注意:UVC 为主输入源;副输入源 NDI / NET1 / NET2 三者只能选其一(NDI 与网络流互斥)。

5.2 镜像 / 旋转(编码参数同步到显示帧)

进入 编码配置 > 高级编码配置,可设置影响显示/编码帧的变换:

  • 镜像配置 :视频编码画面镜像显示(对应 RGA 的 imflip X/Y 镜像);
  • 旋转配置 :0° / 90° / 180° / 270°(对应 RGA 的 imrotate,也对应 VOP2 Plane 的 rotation 属性)。

这些变换在 RGA 合成阶段即作用于帧,因此 HDMI 本地预览与推流画面保持一致。

5.3 视频叠加 Mode 1~5(RGA 多图层合成)

进入 特效配置 > 视频叠加,这是 RGA 合成最直接的体现:

  • 背景图片:本地上传;
  • 主输入源:固定为 UVC;
  • 副输入源:下拉选择 NDI / NET1 / NET2;
  • 模式选择:Mode 1~5 共五种叠加模式。

五种模式效果(来自说明书):

  • 模式 1:左右中间视频叠加;
  • 模式 2:左上右下视频叠加;
  • 模式 3:左下右上视频叠加;
  • 模式 4:画中画,主 UVC + 右上第二路视频;
  • 模式 5 :画中画,主 UVC + 右下第二路视频。

⚠️ 五种模式切换时,需先点击"应用"参数,再重新开关启用开关方可生效(说明书明确提示)。在底层即对应一次 RGA 合成参数的重配 + 一次 DRM 原子提交。

  • 绿幕抠图 (特效配置 > 绿幕配置):用背景图片与前景(人形)合成,可调色差容忍度、边缘平滑度、绿色溢出色抑制、亮度/对比度、边缘侵蚀/模糊。底层用 RGA 的 色键(Chroma Key)+ Alpha 混合 实现"去绿留人、换背景"。
  • LOGO 水印 (特效配置 > LOGO 参数):上传 LOGO 图片,支持以视频左上角为基准的 X/Y 偏移(最大 100 像素),以 RGBA 叠加 方式合成到画面(技术参数注明"支持 RGBA 叠加")。

两者合成结果同样进入 RGA 的统一帧,再经 DRM 送 HDMI 预览与编码推流。

5.5 系统状态验证 HDMI 输出接入

进入 系统状态 页,在"输出状态"中可看到 HDMI 输出接入状态、RTMP 推流时长、USB 本地录制时长;"输入状态"显示 UVC/NDI/NET1/NET2 的连接与接入分辨率。这正对应 DRM Connector 上报的 HDMI 连接状态(HPD/EDID)。

六、图层与模式速查表

项目 取值 / 说明 对应底层机制
本地输出接口 HDMI 2.0,1920×1080@60 DRM Connector + VOP2 VP0
显示框架 DRM/KMS(替代 FBDEV) /dev/dri/card0 + libdrm
合成方式 RGA 2D 先合成 → DRM 送显 RGA 输出帧 → DMA-BUF → drmModeAddFB2
主输入源 UVC(固定) V4L2 采集 + MPP 硬解
副输入源 NDI / NET1 / NET2(三选一) 网络拉流 + MPP 硬解
视频叠加 Mode 1~5(5 种拼接) RGA Alpha 混合 + 缩放拼接
绿幕 色键抠图 + 背景合成 RGA Chroma Key + imblend
LOGO RGBA 叠加,X/Y 偏移 ≤100px RGA 逐像素 alpha
镜像 / 旋转 支持 X/Y 镜像,0/90/180/270° RGA imflip/imrotate(或 VOP2 Plane 属性)
防撕裂 VBLANK 页翻转 drmModePageFlip
防花屏 原子提交 drm_atomic_commit
热插拔 HDMI 接入状态上报 DRM Connector HPD/EDID

七、排障速查表

现象 可能原因 排查 / 解决
HDMI 电视无画面 线缆 / 接口未接好,或电视输入源选错 确认 HDMI 线接设备 HDMI 2.0 口;电视切到对应 HDMI 通道;看系统状态"HDMI 输出接入状态"是否变"已接入"
切换叠加模式后画面不变 未重新开关启用 先点"应用",再关掉再打开启用开关(说明书提示)
HDMI 与推流画面镜像不一致 镜像仅对编码画面生效理解偏差 镜像/旋转在 RGA 合成阶段统一作用,预览与推流同源;若不一致多为配置未点"应用"
绿幕边缘有绿边/锯齿 溢出色未抑制、边缘平滑不足 调大"绿色溢出色抑制"与"边缘平滑度",必要时加"边缘模糊"
LOGO 位置偏移异常 X/Y 偏移超过 100px 被截断 LOGO 偏移以视频左上角为基准,最大 100 像素,控制在范围内
预览卡顿/掉帧 RGA 合成带宽或 VOP 带宽不足 降低副源分辨率;避免 Port0 4 层叠加同时开绿幕+LOGO+画中画;确认输入分辨率与帧率匹配
切换 UVC 分辨率后无变化 需重启生效 UVC 分辨率(2160P/1080P)切换后需重启设备方可生效
花屏/半帧错乱 非原子提交的中间态 确认驱动走原子模式设置(drm_atomic_commit);避免直接写 fb 绕过 KMS

八、要点回顾

  1. DRM 是 RK3528 的显示基石 :取代 FBDEV,用 KMS 五大对象(Framebuffer→Plane→CRTC→Encoder→Connector)把"多图层合成 + 时序扫描 + 接口输出"统一调度,设备节点 /dev/dri/card0,用户层经 libdrm 控制。
  2. RK3528 显示硬件是 VOP2:单 VOP 多 VP,HDMI 固定绑 VP0(最大 4K),支持逐像素 alpha、Porter-Duff、色键、旋转/镜像、4 层叠加;HDMI 2.0b 输出 1080P@60 毫无压力。
  3. RGA + DRM 分工明确:RGA 当"合成车间",把 UVC/NDI/NET 多源 + 叠加/绿幕/LOGO/镜像旋转合成统一帧;DRM 当"送显调度",用原子提交 + VBLANK 页翻转把帧稳稳送到 HDMI,且无撕裂、无花屏。
  4. 预览即推流同源:RGA 合成帧经 DMA-BUF 同时喂给 HDMI 预览与 MPP 编码,保证本地电视看到的就是推流出去的画面。
  5. 说明书对应点:视频输出源选择(信号配置)、镜像/旋转(高级编码)、视频叠加 Mode1~5、绿幕、LOGO(特效配置)、HDMI 接入状态(系统状态)------每一项都能在 DRM/RGA 框架里找到对应的技术落点。

相关推荐
释厄6231 小时前
智能体释放度子集律——文本 ⊂ 音频 ⊂ 视频⊂ 游戏
开发语言·游戏·microsoft·音视频
揽秀亭长1 小时前
音频如何转换为乐谱?扒谱流程与关键技术分析
人工智能·音视频
VisionDataLab2 小时前
老旧产线机器视觉技改难点剖析:基于布线干扰、通讯不稳定、空间受限的落地优化方案
自动化·视觉检测
乐橙开放平台2 小时前
通道国标 ID 贴反会串店:海康大华宇视摄像头怎么用 GB28181 统一接入?
网络·笔记·物联网·自动化·音视频·智能家居
h397411 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
美狐美颜sdk15 小时前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
揽秀亭长16 小时前
从音频到五线谱|扒谱过程中的关键技术环节
人工智能·音视频
hz5678917 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
乐橙开放平台20 小时前
智慧连锁客流检测和离岗检测怎么对接
大数据·人工智能·笔记·物联网·自动化·音视频·智能家居