首页 > 其他分享 >RK3588编解码之mpp解码demo解析: mpi_dec_test

RK3588编解码之mpp解码demo解析: mpi_dec_test

时间:2023-10-20 13:55:48浏览次数:38  
标签:编解码 RK3588 解码 mpi decode init mpp dec

1. 简介

  • mpi_dec_test 是rockchip官方解码 demo

  • 本篇文章进行mpi_dec_test 的代码解析,解码流程解析

2. 环境介绍

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

  • 软件版本: OS:ArmSoM-W3 Debian11

3. mpp解码流程解析

 

在这里插入图片描述

  • mpp_create :获取 MppCtx 实例以及 MppApi 结构体

  • mpp_init: 初始化MppCtx 的编解码类型与格式

  • mpi->control:通过相应的命令来配置解码参数

  • decode_put_packet:输入码流:编码数据 MppPacke,例如264、265数据

  • decode_get_frame: 获取解码的数据存放到MppFrame,例如YUV、RGB数据

  • mpi->reset:使解码器恢复为正常初始化后的状态。

  • mpp_destroy:释放申请的内存空间,做销毁善后工作

4. 重要函数解析

mpp_init函数:初始化MppCtx 的编解码类型与格式

mpp_init函数原型:

MPP_RET mpp_init(MppCtx ctx, MppCtxType type, MppCodingType coding)

mpp_init函数调用实例:

ret = mpp_init(ctx, MPP_CTX_DEC, MppCodingType::MPP_VIDEO_CodingAVC);
if (ret)
{
   mpp_err("mpp_init failed ret %d\n", ret);
   goto MPP_TEST_OUT;
}

mpp_init函数参数解析:

  • MppCtxType 参数:初始化编码还是解码

    MPP_CTX_DEC : 解码
    MPP_CTX_ENC : 编码
  • MppCodingType 参数:编解码的格式

    MPP_VIDEO_CodingAVC :   H.264
    MPP_VIDEO_CodingHEVC:   H.265
    MPP_VIDEO_CodingVP8 :   VP8
    MPP_VIDEO_CodingVP9 :   VP9
    MPP_VIDEO_CodingMJPEG : MJPEG

5. mpi_dec_test 流程解析

mpi_dec_test 解码命令举例:

sudo mpi_dec_test -i /oem/200frames_count.h264 -t 7 -n 200 -o /oem/decode.yuv -w 1920 -h 1080

mpi_dec_test 流程解析:

main(  ) ---> dec_decode(  ) ---> thread_decode(  ) ---> dec_simple(  ) ---> mpp_destroy(  )
  • main函数根据传进来的参数(参数char **argv 对应命令中的 -i /oem/200frames_count.h264 -t 7 -n 200 -o /oem/decode.yuv -w 1920 -h 1080)对参数进行解析保存到  MpiDecTestCmd * cmd 结构体中

  • dec_decode(cmd) 函数是封装好的解码函数,传入 MpiDecTestCmd * cmd 结构体即可完成解码

  • dec_decode 函数执行了一些MPP的初始化操作:mpp_create() mpp_init() ,mpp_dec_cfg_init() , mpi->control。初始化之后创建解码线程: thread_decode 进行解码。

  • 解码线程: thread_decode 线程根据 cmd->simple 变量判断是使用 dec_simple 解码还是 dec_advanced 解码

  • 解码完最后一帧之后执行 pthread_join() 函数等待解码线程: thread_decode 结束后做线程释放工作

  • 线程释放完毕之后执行reset复位操作:mpi->reset(ctx)把解码器恢复为正常初始化后的状态。

  • 解码器复位之后通过mpp_destroy()释放申请的内存空间,进行一些销毁操作防止内存泄漏。

6. mpi_dec_test使用实例

终端执行解码命令:

sudo mpi_dec_test -i /oem/200frames_count.h264 -t 7 -n 200 -o /oem/decode.yuv -w 1920 -h 1080
  • 其中,-t 7 表示是输入 H.264 码流,-i 表示输入文件,-n 200 表示解码 200 帧 -w 图像宽度 -h 图像高度

解码输出如下:

标签:编解码,RK3588,解码,mpi,decode,init,mpp,dec
From: https://www.cnblogs.com/armsom/p/17776898.html

相关文章

  • Java拾贝第七天——包装类、BigInteger、BigDecimal
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么基本数据类型怎么变化引用数据类型(对象)Java为每种基本类型都提供了对应的包装类型:基本数据类型包装类intIntegercharCharactershortShortlongLongfloatFloatdoubleDoublebooleanBoolean......
  • docker exec 报错 decoding init error from pipe caused \"read parent: connection
    复现方法,限制容器内pid个数dockerrun--pids-limit=1000 -dcentossleep100000dockerexec-itidbash  3.执行 foriin $(seq12000);do(sleep100&);done[root@host-226~]#dockerstatseaecCONTAINER      CPU%      ......
  • [USACO19DEC] Greedy Pie Eaters P 区间dp
    题目背景FarmerJohnhasMMcows,convenientlylabeled1…M1…M,whoenjoytheoccasionalchangeofpacefromeatinggrass.Asatreatforthecows,FarmerJohnhasbakedNNpies(1≤N≤3001≤N≤300),labeled1…N1…N.Cowiienjoyspieswithlabelsinther......
  • ArmSoM-W3之RK3588 MPP环境配置
    1.简介瑞芯微提供的媒体处理软件平台(MediaProcessPlatform,简称MPP)是适用于瑞芯微芯片系列的通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不同芯片的差异,为使用者提供统一的视频媒体处理接口(MediaProcessInterface,缩写MPI)。MPP......
  • RK3588开发笔记(二):基于方案商提供sdk搭建引入mpp和sdk的宿主机交叉编译Qt5.12.10环境
    前言  上一篇项目已经构建好了Qt,板子接入mipi屏幕也跑起来了,Qt也能正常运行了,现在需要接入定制开发的sdk,sdk中使用了硬解码等资源涉及到bsp的mpp,所以下一步就是引入mpp和sdk到Qt开发环境中,从而Qt中可以调用sdk接口进行进一步的应用结合开发了。 注意  本文公开了Q......
  • Decoding Genome
    prologue到底是谁查UB查了半天啊,原来是菜鱼啊。analysis这个题目我们不难推出来这个转移方程:\[f_{i,j}\gets\sum_{k=1}^{m}f_{i-1,k}[k\inj\text{后面的合法集合}]\]我们看到\(n\)的值很大,而且上面的转移方程可以考虑写成一个矩阵乘法的形式。我们构造一......
  • Decorator 装饰者模式简介与 C# 示例【结构型4】【设计模式来了_9】
    〇、简介1、什么是装饰者模式一句话解释:  通过继承统一的抽象类来新增操作,再在使用时通过链式添加到对象中,达到与原有设定无关联可灵活附加。装饰者模式是一种行为设计模式,它允许向一个现有的对象添加新的行为,同时又不改变其结构。装饰者模式的基本概念是,将一个对象包装在......
  • armsom:为何选择rk3588开发与Jetson Nano引脚兼容的嵌入式产品
    引言: 当armsom决定采用RK3588芯片开发一款与JetsonNano引脚兼容的产品时,这意味着一次重要的技术决策,为开发者和制造商提供了更大的灵活性。这篇文章将解释我们选择RK3588的原因以及如何实现与JetsonNano引脚的兼容性。JetsonNano一直是嵌入式计算领域的领先产品,具有强大的性......
  • 装饰模式(Decorator)
    定义动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。装饰模式的结构和说明Component:组件对象的接口,可以给这些对象动态地添加职责。ConcreteComponent:具体的组件对象,实现组件对象接口,通常就是被装饰器装饰的原始对象,也就是可以给这个对象......
  • 【JAVA】org.apache.commons.codec依赖
     <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency>......