0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK3588-MPP解码详解

ARMSOM 2023-11-21 11:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一. 简介

[RK3588从入门到精通] 专栏总目录

本篇文章进行RK3588-MPP解码的详细解析

二. 环境介绍

硬件环境: ArmSoM-W3 RK3588开发板

软件版本: OS:ArmSoM-W3 Debian11

三. 解码器数据流接口

3.1 decode_put_packet

wKgaomVcHbiAD337AADexm3LGiU067.png

输入码流的形式:分帧与不分帧 MPP 的输入都是没有封装信息的裸码流,裸码流输入有两种形式:

不分帧 这种方式是已经按帧分段的数据,即每一包输入给 decode_put_packet 函数的 MppPacket 数据都已经包含完整的一帧,不多也不少。在这种情况下,MPP 可以直接按包处理码流,是 MPP 的默认运行情况。

分帧 按长度读取的数据,这样的数据无法判断一包 MppPacket 数据是否是完整的一帧,需要 MPP 内部进行分帧处理。MPP 也可以支持这种形式的输入,但需要在 mpp_init 之前,通过 control 接口的 MPP_DEC_SET_PARSER_SPLIT_MODE 命令,MPP 内的 need_split 标志打开。

// NOTE: decoder split mode need to be set before init // 按帧输入码流 RK_U32 need_split = 1; mpi_cmd = MPP_DEC_SET_PARSER_SPLIT_MODE; param = &need_split; ret = mpi->control(ctx, mpi_cmd, param); if (MPP_OK != ret) { mpp_err("mpi->control failed\n"); deInit(&packet, &frame, ctx, buf, data); }

这样,调用 decode_put_packet 输入的 MppPacket 就会被 MPP 重新分帧,进入到情况一的处理。

如果这两种情况出现了混用,会出现码流解码出错的问题。

分帧方式处理效率高,但需要输入码流之前先进行解析与分帧;

不分帧方式使用简单,但效率会受影响。

在 mpi_dec_test 的测试用例中,使用的是方式不分帧的方式。在瑞芯微Android SDK 中,使用的是分帧的方式。用户可以根据自己的应用场景和平台条件进行选择

3.2 decode_get_frame

wKgaomVcHcGAIbvsAADtW8WXlpc304.png

3.3 给解码器提供足够大小的保存像素数据的内存空间

解码器在解码时,需要为输出图像获取保存像素数据的内存空间,用户需要给解码器提供足够大小,这个空间大小的需求,会在 MPP 解码器内部根据不同的芯片平台以及不同的视频格式需求进行计算,计算后的内存空间需求会通过MppFrame 的成员变量 buf_size 提供给用户。用户需要按 buf_size的大小进行内存分配,即可满足解码器的要求。

RK_U32 buf_size = mpp_frame_get_buf_size(frame); ret = mpp_buffer_group_limit_config(data->frm_grp, buf_size, 24); if (ret) { mpp_err("%p limit buffer group failed ret %d\n", ctx, ret); break; }

3.4 输出图像的变宽高信息(Info change)

当码流的宽高,格式,像素位深等信息发生变化时,需要反馈给用户,用户需要更新解码器使用的 内存池,把新的内存更新给解码器。这里涉及到解码内存分配与使用模式。 图像内存分配以及交互模式:

模式一:纯内部分配模式 模式二:半内部分配模式 模式三:纯外部分配模式: 直接使用外部显示用的内存,容易实现零拷贝。

模式一:纯内部分配模式

图像内存直接从 MPP 解码器内部分配,内存由解码器直接分配,用户得到解码器输出图像,在使用 完成之后直接释放。 在这种方式下,用户不需要调用解码器 control 接口的 MPP_DEC_SET_EXT_BUF_GROUP 命令,只 需要在解码器上报 info change 时直接调用 control 接口的 MPP_DEC_SET_INFO_CHANGE_READY 命令即可。解码器会自动在内部进行内存分配,用户需要把获取到的每帧数据直接释放。

模式二:半内部分配模式

用户需要根据get_frame返回的MppFrame的buf_size 来创建 MppBufferGroup,并通过 control 接口的 MPP_DEC_SET_EXT_BUF_GROUP 配置给解码器。用户可以通过 mpp_buffer_group_limit_config 接口来限制解码器的内存使用量。

模式三:纯外部分配模式

这种模式通过创建空的 external 模式的 MppBufferGroup,从用户那里导入外部分配器分析的内存块 文件句柄(一般是 dmabuf/ion/drm)。在 Android 平台上,Mediaserver 通过 gralloc 从 SurfaceFlinger 获取显示用内存,把 gralloc 得到的文件句柄提交(commit)到 MppBufferGroup 里,再把 MppBufferGroup 通过 control 接口 MPP_DEC_SET_EXT_BUF_GROUP 命令配置给解码器,然后 MPP 解码器将循环使用 gralloc 得到的内存空间。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 解码
    +关注

    关注

    0

    文章

    189

    浏览量

    28907
  • 开发板
    +关注

    关注

    26

    文章

    6433

    浏览量

    121221
  • MPP
    MPP
    +关注

    关注

    0

    文章

    26

    浏览量

    11882
  • RK3588
    +关注

    关注

    8

    文章

    592

    浏览量

    7599
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    瑞芯微RK3588 RKNN模型推理环境部署与功能测试技巧(上)

    触觉智能(RK方案商)分享瑞芯微RK3588RKNN端侧模型的开发环境搭建方法与测试方法。【测试环境说明】开发板系统:Ubuntu22.04开发环境:Ubuntu22.04虚拟机演示设备:触觉智能
    的头像 发表于 04-21 10:37 534次阅读
    瑞芯微<b class='flag-5'>RK3588</b> RKNN模型推理环境部署与功能测试技巧(上)

    RK3588的GMAC 时钟怎么一直没有?

    使用RK3588芯片,linux6.6内核,将自己设计的phy芯片驱动起来后,ifconfig 查看有eth0,phy 芯片驱动正常,但是RK3588芯片一直没有产生GMAC时钟信号,其他配置均正确,通过命令查看时钟配置也都正确的,但是为什么一直没有这个clock出来呢?
    发表于 03-26 22:47

    RK3588操控终端

    RK3588操控终端全国产化无人装备手持操控终端,搭载工业级瑞芯微RK3588J芯片,适配麒麟等自主操作系统,从硬件核心到软件应用实现 100% 国产化,彻底摆脱外部技术依赖。设备标配16G
    发表于 02-28 09:42

    你的专属“数字员工”已到岗!迅为RK3588系列适配OpenClaw

    你的专属“数字员工”已到岗!迅为RK3588系列适配OpenClaw
    的头像 发表于 02-27 15:33 843次阅读
    你的专属“数字员工”已到岗!迅为<b class='flag-5'>RK3588</b>系列适配OpenClaw

    RK3588 平台 MPP 编译 + VPU 格式测试

                大家在做瑞芯微  RK3588  开发时,是不是经常困惑「怎么验证  VPU  到底支持哪些编解码格式?」「 MPP  媒体库该怎么编译?」今天手把手带你走一遍流程
    的头像 发表于 12-25 11:33 2405次阅读
    <b class='flag-5'>RK3588</b> 平台 <b class='flag-5'>MPP</b> 编译 + VPU 格式测试

    RK3588采集Cameralink图像快速搭建系统办法

    : CL-U3,便携式应用。 瑞芯微的RK3588开发板很多,种类各式各样。如何快速搭建一套自己的基于RK3588的嵌入式Cameralink图像采集处理方案呢。下面推荐一下。 快速原型机的搭建方案如下: (1
    发表于 12-19 10:07

    【技术分享】RK3588如何搭建xenomai3+ethercat

    说明使用的RK3588的分支版本是linux-6.1-stan-rkr6内核版本是6.1.99把瑞芯微的SDK更新到linux-6.1-stan-rkr6这个版本即可。编译xenomai3的内核请参考上一篇技术分享:技术分享|RK3588如何增加Xenomai3实时补丁修
    的头像 发表于 12-11 17:26 1427次阅读
    【技术分享】<b class='flag-5'>RK3588</b>如何搭建xenomai3+ethercat

    迅为RK3588开发板Android系统烧写及注意事项

    迅为RK3588开发板Android系统烧写及注意事项
    的头像 发表于 12-03 15:17 7458次阅读
    迅为<b class='flag-5'>RK3588</b>开发板Android系统烧写及注意事项

    瑞芯微RK3588RK3576技术参数详解

    电子发烧友网报道(文/李弯弯)瑞芯微不久前表示,2025年上半年AIoT市场延续蓬勃发展趋势,因应AI在端侧应用发展需求,公司旗舰产品RK3588、次新产品RK3576等带领AIoT各产品线继续
    的头像 发表于 09-23 08:20 9249次阅读
    瑞芯微<b class='flag-5'>RK3588</b>与<b class='flag-5'>RK</b>3576技术参数<b class='flag-5'>详解</b>

    RK3588数据手册

    RK3588的资料
    发表于 08-01 16:08 54次下载

    RK这2款旗舰芯片RK3588 PK RK3576,谁是最优选

    (64bit 对比 32bit),数据传输上 RK3588 更有优势。三、超强的视频编解码能力• 编码能力:RK3588 最高支持 8K@30fps H.264/H.265,RK357
    发表于 07-10 18:24

    干货分享 | RK3588 Ubuntu系统Docker容器使用指南

    前言:在瑞芯微RK3588高性能AIoT平台上运行Ubuntu系统时,Docker容器技术能极大提升开发部署效率。通过轻量级虚拟化实现环境隔离与快速迁移,本文将从零开始详解RK3588平台
    的头像 发表于 06-27 12:01 4273次阅读
    干货分享 | <b class='flag-5'>RK3588</b> Ubuntu系统Docker容器使用指南

    RK3576 vs RK3588:为何越来越多的开发者转向RK3576?

    高端平板、边缘计算)。 NPU 算力相同,但 RK3588 支持更复杂的 AI 计算(如 INT4/FP16)。 2. 多媒体与存储:满足主流需求 [td]项目RK3576RK3588 视频解码
    发表于 05-30 08:46

    RK3588参数与主要特性 RK3588数据手册解读

    RK3588参数与主要特性 RK3588数据手册解读
    的头像 发表于 05-19 18:34 1.5w次阅读
    <b class='flag-5'>RK3588</b>参数与主要特性  <b class='flag-5'>RK3588</b>数据手册解读

    RK3588S和RK3588S2差异说明

    RK3588S2 较 RK3588S少了一组 MIPI D/C-PHY CSI_RX PORT0,新增一组 MIPI DPHY CSI_RX PORT1,同时接口位置除 MIPI D/C-PHY
    的头像 发表于 05-13 14:23 3263次阅读
    <b class='flag-5'>RK3588</b>S和<b class='flag-5'>RK3588</b>S2差异说明