RK3588---编解码之mpp解码demo解析:mpi_dec_test,源码讲解

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

软件版本:
OS:ArmSoM-W3 Debian11

3. mpp解码流程解析

图3.1 RKMPP解码器接口为用户提供了输入码流,输出图像的功能

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

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

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

decode_put_packet:输入码流:编码数据

MppPacket,H.264、H.265数据

decode_get_frame: 获取解码的数据存放到

MppFrame,例如YUV、RGB数据

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

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

4. 重要函数解析 4.1 mpp_init函数:初始化MppCtx 的编解码类型与格式

mpp_init函数原型:

MPP_RET mpp_init(MppCt
<think>好的,用户现在的问题是询问在之前的编译过程中提到的“可执行的编解码配置文件”是从哪里来的。用户提供的编译脚本执行后,在test目录下生成了一些可执行文件,比如mpi_dec_test,但用户可能对这些文件的来源不太清楚,或者需要确认这些文件是否就是所谓的“编解码配置文件”。 首先,我需要回顾用户提供的编译步骤。用户进入mpp-develop/build/android/aarch64目录,运行make-Android.bash脚本,并指定了NDK路径。编译完成后,在test目录下生成了多个可执行文件,如mpi_dec_testmpi_enc_test等。用户随后将这些可执行文件通过adb推送到设备的/data/local/tmp目录下执行,但可能对“编解码配置文件”这个术语感到困惑,或者不确定这些可执行文件是否就是所需的配置文件。 接下来,我需要解析用户的问题核心。用户提到的“可执行的编解码配置文件”可能是指用于配置编解码参数的文件,或者可能误解了可执行文件本身的作用。但根据上下文,用户将mpi_dec_test推送到设备并执行,生成h264流文件,因此这里的“编解码配置文件”实际上应该指的是这些可执行测试程序,比如mpi_dec_test,它们可能内置了测试用例或通过命令行参数指定输入输出配置,而非单独的配置文件。 需要确认的是,这些测试程序(如mpi_dec_test)是否在编译时自动生成,或者是否需要额外的配置步骤。根据用户提供的编译输出,test目录下的文件包括可执行文件,如mpi_dec_test,因此这些应该是编译过程中由源代码生成的测试程序,用于执行编解码任务。用户可能误将可执行文件称为配置文件,但实际上它们是需要运行的测试工具。 此外,用户可能在之前的步骤中遇到问题,比如找不到配置文件,或者不确定如何正确配置这些测试程序。需要解释这些测试程序的来源,以及它们是否需要额外的配置文件,或者是否所有配置都通过命令行参数完成。 还需注意用户提到的路径问题,比如libmpp.so应该推送到/system/lib64/还是其他目录,这可能涉及设备的具体文件系统结构,需要用户根据设备情况调整。但用户当前的主要问题集中在“编解码配置文件”的来源,因此需要重点解答这一点。 总结:用户的疑问在于“可执行的编解码配置文件”的来源,根据上下文,这指的是编译生成的测试程序(如mpi_dec_test),这些程序通过命令行参数指定输入输出,无需额外配置文件。需要明确告知用户这些文件是编译时自动生成的,并指导其正确使用命令行参数进行编解码操作。</think>### 一、问题核心 你提到的 **"可执行的编解码配置文件"** 实际上是 **编译生成的测试程序**(如 `mpi_dec_test`),而非独立配置文件。这些二进制程序通过 **命令行参数** 控制编解码行为。 --- ### 二、关键文件来源解析 #### **1. 测试程序生成路径** ```bash # 编译完成后在 test/ 目录下生成的可执行文件 ├── test/ ├── mpi_dec_test # 解码测试程序 ✅ ├── mpi_enc_test # 编码测试程序 ├── mpp_info_test # 硬件信息检测工具 └── vpu_api_test # VPU接口测试 ``` #### **2. 生成原理** - **源码位置**:在 MPP 框架源码的 `test/` 目录中存放测试用例源码 - **编译规则**:`CMakeLists.txt` 中定义了如何编译这些测试程序 ```cmake # 示例编译规则 (简化为伪代码) add_executable(mpi_dec_test test/mpi/dec/dec_test.c test/mpi/dec/dec_utils.c) target_link_libraries(mpi_dec_test mpp) ``` --- ### 三、操作流程修正 #### **1. 完整编译-部署流程** ```bash # 编译阶段 cd mpp-develop/build/android/aarch64 ./make-Android.bash --ndk /home/xxx/android-ndk-r21e # 部署阶段 adb push test/mpi_dec_test /data/local/tmp/ # 推送测试程序 ✅ adb push mpp/libmpp.so /system/lib64/ # 正确路径需要根据设备验证 # 执行阶段 adb shell cd /data/local/tmp chmod 777 mpi_dec_test ./mpi_dec_test -t 7 -i /dev/video0 -o cam.h264 # 参数化运行 ``` #### **2. 参数配置原理** 程序通过 **命令行参数** 实现配置,无需独立文件: | 参数 | 作用 | 示例值 | |------|------|--------| | `-t` | 指定编解码类型 | `7` 对应H.264 | | `-i` | 输入源 | `/dev/video0` (摄像头设备节点) | | `-o` | 输出文件 | `cam.h264` (原始码流文件) | | `-w/-h` | 分辨率 | `1920x1080` | --- ### 四、关于配置文件的常见误解 #### **可能存在的混淆点** | 用户预期 | 实际实现方式 | 验证方法 | |---------|--------------|----------| | 独立配置文件 (如.conf) | 硬编码参数 + 命令行参数 | 查看源码中的 `parse_args()` 函数 | | 动态加载配置 | 编译时参数宏定义 | 检查 `CMakeLists.txt` 中的 `add_definitions()` | --- ### 五、高级调试技巧 #### **1. 查看支持的参数列表** ```bash adb shell /data/local/tmp/mpi_dec_test --help ``` #### **2. 获取硬件能力信息** ```bash adb shell /data/local/tmp/mpp_info_test ``` 输出示例: ``` H264 decoder: support 1080p@30fps H265 encoder: not supported VPU type: rk3588 ``` #### **3. 多线程编解码测试** ```bash # 使用 -n 参数指定线程数 ./mpi_dec_mt_test -t 7 -i input.h264 -o output.yuv -n 4 ``` --- ### 六、路径验证方法 #### **1. 库文件路径确认** ```bash adb shell ls -l /system/lib64/libmpp.so # 优先尝试此路径 adb shell ls -l /vendor/lib64/libmpp.so # 部分设备可能在此 ``` #### **2. 环境变量检查** ```bash adb shell "echo $LD_LIBRARY_PATH" # 正常应包含 /system/lib64 或 /vendor/lib64 ``` --- ### 七、编译参数扩展建议 若需深度定制功能,可在编译时修改 `CMake` 参数: ```bash # 在 make-Android.bash 执行前修改 CMake 配置 # 启用高级调试功能 cmake -DHAVE_DEBUG_LOG=ON .. # 禁用不需要的组件 cmake -DMPP_ENC_TEST=OFF .. ``` --- ### 八、关键源码定位 | 功能模块 | 源码路径 | 关键文件 | |---------|----------|----------| | 解码测试 | `test/mpi/dec/` | `dec_test.c`, `dec_utils.c` | | 编码测试 | `test/mpi/enc/` | `enc_test.c`, `enc_utils.c` | | 参数解析 | `test/common/` | `mpp_parse.c` | --- 通过上述流程,`mpi_dec_test` 等可执行程序将直接通过命令行参数完成编解码配置,无需额外配置文件。这是嵌入式媒体处理框架的典型设计模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛毛虫的爹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值