欢迎光临散文网 会员登陆 & 注册

RK3588 MPP 硬编码之mpi_enc_test .c解析

2023-11-14 11:26 作者:磊子啊_  | 我要投稿


一. 简介

  • mpi_enc_test 是rockchip官方编码 demo

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

二. 环境介绍

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

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

三. mpp编解码流程解析

在这里插入图片描述
图3.1 RKMPP编码器接口为用户提供了输入图像数据,输出码流的功能


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

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

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

  • encode_put_frame:输入图像数据MppFrame,例如YUV、RGB数据

  • encode_get_packet: 获取编码后的码流数据存放到MppPacket,例如H.264、H.265数据

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

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

四. 重要函数解析

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

mpp_init函数原型:

mpp_init函数调用实例:

mpp_init函数参数解析:

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


  • MppCodingType 参数:编解码的格式

等等,详细参看rk_type.h定义

4.2 设置编码器参数:test_mpp_enc_cfg_setup

函数原型:

函数解析: 主要是设置编码器参数,并将编码器参数保存到 MpiEncMultiCtxInfo 结构体中

4.3 编码函数:test_mpp_run

函数原型:

函数解析: 输入图像数据MppFrame,获取编码后的码流数据存放到MppPacket

五. mpi_enc_test 流程解析

mpi_enc_test 编码命令举例:

mpi_enc_test 流程解析:

主要流程:init 初始化 ---> test_mpp_enc_cfg_setup设置编码器相关参数  ---->  test_mpp_run(info):输入图像数据,输出码流

  • main函数根据传进来的参数参数char **argv 对应命令中的 -i /oem/decode.yuv -t 7 -n 200 -o /oem/encode.h264 -w 1920 -h 1080 -fps 60)对参数进行解析保存到  MpiEncTestArgs *cmd 结构体中

  • enc_test_multi(cmd, argv[0]); 函数是封装好的编码函数,传入 MpiDecTestCmd * cmd 结构体即可实现 H.265/H.264 视频编码的多路并发处理

  • enc_test_multi(cmd, argv[0]); 函数使用for循环创建新线程并调用 enc_test 来执行编码任务

  • enc_test  函数是整个的编码流程函数。首先执行了一些MPP的初始化操作:mpp_create() mpp_init()  ,mpp_enc_cfg_init() , mpi->control。初始化之后执行 test_mpp_enc_cfg_setup函数来设置编码器相关参数。随后再进行最重要的编码操作:test_mpp_run(info):输入图像数据,输出码流

  • 编码完成之后执行reset复位操作:p->mpi->reset(p->ctx)把编码器恢复为正常初始化后的状态。

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

  • pthread_join 函数等待编码线程结束,随后调用MPP_FREE(ctxs)函数做线程释放工作

  • 编码线程结束,回到主线程的main()函数,执行mpi_enc_test_cmd_put(cmd), 释放 cmd 对象所占内存

六. mpi_enc_test 使用实例

  • 终端执行编码命令:


  • 将decode.yuv转成h264,分辨率1920x1080,fps60,总帧数200。

  • 其中,-i 表示输入文件,-t 7 表示输出 H.264 码流,-n 200 表示编码 200 帧 -w 图像宽度 -h 图像高度,fps 60

  • 查看编解码输出的信息:

  • 编码输出如下:



RK3588 MPP 硬编码之mpi_enc_test .c解析的评论 (共 条)

分享到微博请遵守国家法律