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 的测试用例中,使用的是方式不分帧的方式。在瑞芯微AndroidSDK 中,使用的是分帧的方式。用户可以根据自己的应用场景和平台条件进行选择

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 得到的内存空间。

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

    关注

    0

    文章

    173

    浏览量

    27267
  • 开发板
    +关注

    关注

    25

    文章

    4704

    浏览量

    95757
  • MPP
    MPP
    +关注

    关注

    0

    文章

    23

    浏览量

    10538
  • RK3588
    +关注

    关注

    6

    文章

    270

    浏览量

    3832
收藏 人收藏

    评论

    相关推荐

    迅为RK3588开发板运行openkylin麒麟系统

    迅为在 RK3588开发板移植了银河麒麟和开放麒麟系统 迅为优先 RK3588开发板上支持Android13系统 迅为在 RK3588开发板移植了银河麒麟和开放麒麟系统 迅为优先 RK3588
    发表于08-19 10:38

    外协:RK3588适配linux

    RK3588适配linux 功能: RK3588J+16GB+64GB 接口支持: 1.HDMI1 2.EDP1 3.USB3.02,USB2.04 4.电池管理1 5.网络2 6.GPIO*8 7.音频功能 有开发经验的请留联系方式。
    发表于07-09 16:31

    迅为电子RK3588S与RK3588硬件性能区别及板卡选型

    迅为电子 RK3588S与 RK3588硬件性能区别及板卡选型
    的头像 发表于06-25 15:30 1493次阅读
    迅为电子<b class='flag-5'>RK3588</b>S与<b class='flag-5'>RK3588</b>硬件性能区别及板卡选型

    亮钻科技推出重磅新品:基于RK3588S平台的K-3588S

    近日,基于 RK3588S平台,亮钻科技推出重磅新品:K- 3588S,其性能与 RK3588相媲美,拥有高性能、高算力和8K视频编 解码等优势,且性价比更高,满足用户降本需求。
    的头像 发表于05-09 14:11 1215次阅读
    亮钻科技推出重磅新品:基于<b class='flag-5'>RK3588</b>S平台的K-<b class='flag-5'>3588</b>S

    迅为RK3588最小系统板发布

    迅为 RK3588最小系统板发布
    的头像 发表于03-08 15:32 483次阅读
    迅为<b class='flag-5'>RK3588</b>最小系统板发布

    基于RK3588的NPU案例分享!6T是真的强!

    RK3588NPU简 介 作为瑞芯微新一代旗舰工业处理器, RK3588NPU性能可谓十分强大,6TOPS设计能够实现高效的神经网络推理计算。这使得 RK3588在 图像识别、语音识别、自然语言处理
    的头像 发表于02-27 14:14 1210次阅读
    基于<b class='flag-5'>RK3588</b>的NPU案例分享!6T是真的强!

    RK3588RK3588s性能对比

    RK3588RK3588s是两款由Rockchip公司推出的高性能处理器。它们都采用了先进的制程工艺和新一代的架构设计,为用户提供出色的性能和功能。 首先,让我们来看一下 RK3588的性能
    的头像 发表于01-07 17:17 8802次阅读

    Banana Pi为何选择rk3588开发与Jetson Nano引脚兼容的嵌入式产品

    RK3588芯片具有四核ARM Cortex-A76和四核Cortex-A55,搭载Mali-G610 GPU,8核CPU提供卓越的多核性能,8K编 解码,以及双16M的ISP处理能力,适用于处理
    发表于11-02 12:30

    Banana Pi BPI-W3(ArmSoM-W3)RK3588解码MPP环境配置

    空间转换,场视频解交织(Deinterlace) 2. 环境介绍 硬件环境: ArmSoM-W3 RK3588开发板 软件版本: OS:ArmSoM-W3 Debian11 3. RK3588 MPP
    发表于11-02 12:28

    极小极轻LGA封装 |RK3588核心板SOM-3588-LGA现货发售!

    SOM- 3588-LGA 是一款基于Rockchip RK3588芯片平台,采用LGA(506pin)封装设计的一款极小尺寸的商规级核心板。现在核心板 SOM- 3588-LGA(商业级)及开发板
    的头像 发表于10-23 11:50 1906次阅读
    极小极轻LGA封装 |<b class='flag-5'>RK3588</b>核心板SOM-<b class='flag-5'>3588</b>-LGA现货发售!

    RK3588解码mpp解码demo解析: mpi dec test

    1. 简介 mpi_dec_test 是rockchip官方 解码demo 本篇文章进行mpi_dec_test 的代码解析, 解码流程解析 2. 环境介绍 硬件环境:ArmSoM-W3 RK3588
    发表于10-20 13:40

    ArmSoM-W3之RK3588MPP环境配置

    视频解交织(Deinterlace) 2. 环境介绍 硬件环境:ArmSoM-W3 RK3588开发板 软件版本:OS:ArmSoM-W3 Debian11 3. RK3588 MPP环境配置3.1.
    发表于10-19 10:39

    armsom:为何选择rk3588开发与Jetson Nano引脚兼容的嵌入式产品

    引言: 当armsom决定采用 RK3588芯片开发一款与Jetson Nano引脚兼容的产品时,这意味着一次重要的技术决策,为开发者和制造商提供了更大的灵活性。这篇文章将解释我们选择 RK3588
    发表于10-18 17:35

    RK3588RK3399强在哪里?如何选择

    RK3588RK3399作为瑞芯微两款高性能的通用型SoC,有各自的特点和优势。香橙派的开发板都有采用这两款芯片,比如OrangePi5Plus用的 RK3588,OrangePi4系列用
    的头像 发表于10-09 13:48 2965次阅读
    <b class='flag-5'>RK3588</b>比<b class='flag-5'>RK</b>3399强在哪里?如何选择

    迅为RK3588在 Linux 系统中使用 NPU

    迅为 RK3588在 Linux 系统中使用 NPU
    的头像 发表于09-08 14:14 1319次阅读
    迅为<b class='flag-5'>RK3588</b>在 Linux 系统中使用 NPU