news 2026/4/16 14:31:33

RK 平台实战:从 VGS 绿屏到 RGA 稳定运行 —— 一次真实的视频处理架构升级复盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RK 平台实战:从 VGS 绿屏到 RGA 稳定运行 —— 一次真实的视频处理架构升级复盘

背景

在 RK3588 平台上做多路 RTSP 解码、处理、再编码的项目中,我们最初沿用了旧 SDK 中常见的 VGS 处理方案,用于对解码后的帧进行裁剪 / 拷贝。

在旧版本 SDK 上,这套方案长期“看起来是正常的”。
但在升级到新版本 SDK(Rockit / 新驱动)后,问题集中爆发:

  • VGS 处理后画面绿屏
  • 偶尔不绿,但像素错位 / 花屏
  • cache / stride 已反复确认,问题仍不稳定

最终,我们用 RGA 替换 VGS,问题全部消失,性能还明显提升。

本文完整记录这次问题的成因分析、踩坑过程和最终结论


一、问题现象回顾

1️⃣ VGS 处理前帧是正常的

通过RK_MPI_MB_Handle2VirAddr+ OpenCV 保存VGS 处理前的帧

  • NV12 数据正确
  • 图像内容完整
  • stride / virHeight 与 SDK 返回一致

👉说明解码器输出是“可读且正确的”


2️⃣ VGS 处理后出现异常

使用RK_MPI_VGS_AddCropTask/AddScaleTask后:

  • 要么整帧绿屏
  • 要么局部绿 + 像素错位
  • 偶现“正常”,但不可复现

即便已经处理了:

  • NV12 对齐
  • cache flush / invalidate
  • virWidth / virHeight 不乱改
  • pVirAddr 补齐

问题仍然存在。


二、误区:为什么“保存出来是正常的”,VGS 却不行?

这是很多 RK 工程师都会掉进去的坑。

关键误区是:

“CPU 能读 ≠ 硬件 DMA 能正确处理”


1️⃣ VDEC / VI 输出帧的真实身份

VDEC / VI 输出的VIDEO_FRAME_INFO_S

  • 不是标准线性 YUV 帧

  • 可能是:

    • NV21
    • 私有 stride
    • 内部重排布局
    • 仅对 CPU 映射友好

CPU 通过Handle2VirAddr读取,是 SDK 帮你做了兼容映射


2️⃣ VGS 在新 SDK 中的行为变化(关键)

旧 SDK:
  • VGS 内部可能走CPU + DMA 混合路径
  • 容忍非标准布局
  • 甚至有隐式 memcpy / 兜底逻辑
新 SDK:
  • VGS 完全走硬件 DMA

  • 严格要求:

    • 线性 NV12
    • COMPRESS_MODE_NONE
    • 可 DMA 直接访问的布局

👉DMA 不理解 VDEC 的私有帧布局

结果就是:

  • UV plane 解析错误 → 绿屏
  • stride 偏移错误 → 像素错位

三、为什么旧 SDK 正常,新 SDK 出问题?

结论很明确:

旧 SDK 的“正常”,建立在隐式容错之上
新 SDK 把这层容错移除了

这是一次SDK 行为的“纠偏”,不是 Bug。


四、RGA 为什么能一换就好?

RGA 的定位,和 VGS 完全不同

模块设计初衷
VGSISP / IPC 流水线内部使用
RGASoC 通用图像处理(解码 / App / 算法)

RGA 天然支持的能力

  • 直接吃VDEC / VI 原始帧

  • 支持:

    • NV12 / NV21
    • 私有 stride
    • dmabuf fd
  • 内部完成:

    • layout 解析
    • cache 协调
    • 数据线性化

👉RGA 是“合法中转站”


五、最终方案:用 RGA 替换 VGS

原 pipeline(问题来源)

VDEC / VI ↓ VGS (不稳定,绿屏) ↓ 后处理 / 编码

新 pipeline(稳定方案)

VDEC / VI ↓ RGA(copy / crop / resize / NV21→NV12) ↓ 后处理 / 编码

实际效果对比

指标VGSRGA
稳定性
绿屏常见
像素错位偶发
单帧处理耗时不稳定~1.1 ms
CPU 占用极低
SDK 兼容性

六、性能数据(RK3588 实测)

  • 单帧处理耗时:≈ 1.1 ms
  • 端到端延迟:6 ~ 15 ms
  • FPS:稳定 25~26 fps
  • VDEC timeout:偶发(正常现象,处理能力 > 输入)

这是一个非常健康的实时视频 pipeline


七、工程结论(强烈建议收藏)

✅ 结论 1

VGS 不应直接处理 VDEC / VI 原始输出帧

✅ 结论 2

旧 SDK 的“可用”不代表架构正确

✅ 结论 3

RGA 是 RK 平台长期推荐的解码后图像处理模块


八、经验总结(给后来者)

凡是“解码 / 摄像头”出来的帧:
👉 先 RGA
👉 再进入后续 pipeline

这条经验可以帮你避开:

  • 绿屏
  • stride 错位
  • cache 地狱
  • SDK 升级灾难

结语

这次问题的解决,本质不是“修一个 Bug”,
而是完成了一次视频处理架构的升级

从“能跑”,走向“正确、稳定、可长期维护”。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 7:03:29

java计算机毕业设计宿舍管理系统 高校学生宿舍信息管理与调宿平台的设计与实现 基于SpringBoot的校园宿舍事务一体化系统

计算机毕业设计宿舍管理系统l1h7n9(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。迎新季一到,几千名新生同时涌向宿管科抢床位,纸质登记Excel 汇总让楼长…

作者头像 李华
网站建设 2026/4/16 7:06:29

YAML2ModelGraph【v1.0】:一键生成 Ultralytics 模型结构图

YAML2ModelGraph v0.1 版本在这篇文档 https://blog.csdn.net/weixin_43694096/article/details/154486575 项目地址:https://github.com/WangQvQ/YAML2ModelGraph 📖 项目简介 YAML2ModelGrap 是一个专业的 YOLO 模型架构可视化工具,能够将…

作者头像 李华
网站建设 2026/4/16 7:05:07

java计算机毕业设计摊位管理系统分析与设计 基于SpringBoot的夜市摊位租赁与费用管理平台 校园集市摊位在线申请与合同管理系统

计算机毕业设计摊位管理系统分析与设计t00069(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。早市、夜市、校园集市,摊位一“位”难求:商贩凌晨三点去现场…

作者头像 李华