从零构建嵌入式视觉系统:RK3588S与Rockit框架的深度适配与调试实战

从零构建嵌入式视觉系统:RK3588S与Rockit框架的深度适配与调试实战

在嵌入式视觉系统的开发过程中,将Camera采集的图像数据通过HDMI稳定输出是一个常见但极具挑战性的任务。RK3588S作为一款高性能的嵌入式处理器,结合Rockit多媒体框架,为开发者提供了强大的硬件加速和软件支持。然而,在实际工程中,我们往往会遇到官方Demo无法直接运行、代码存在缺陷、依赖库冲突等问题。本文将基于真实项目经验,深入探讨如何在RK3588S平台上基于Rockit框架构建从Camera到HDMI的完整显示流水线,并解决其中遇到的各种技术难题。

1. 环境准备与基础配置

在开始适配之前,我们需要确保开发环境正确搭建。RK3588S平台支持多种操作系统环境,其中Buildroot和Debian是最常见的两种选择。Buildroot系统通常已经集成了Rockit框架所需的所有依赖库,而Debian系统则需要手动移植这些库文件。

对于Buildroot系统,编译完成后会在output目录下生成完整的根文件系统镜像。我们可以通过以下命令查看编译输出:

ls output/rockchip_rk3588/images/

该目录下包含各种格式的根文件系统镜像,如rootfs.ext2rootfs.squashfsrootfs.tar等。选择适合的镜像烧写到设备中即可。

对于Debian系统,我们需要从Buildroot的根文件系统中提取Rockit所需的依赖库,包括但不限于:

  • libgraphic_lsf.so
  • librkAlgoDis.so
  • libRkSwCac.so
  • librockit.so

这些库文件需要复制到Debian系统的/usr/lib目录下。此外,还需要注意mali库的版本兼容性问题,否则可能导致屏幕显示异常。

注意:在不同系统环境间移植库文件时,务必确保架构一致(均为aarch64),并注意库文件依赖关系。

2. Rockit框架源码分析与Demo编译

Rockit框架的MPI接口示例代码通常位于SDK的external/rockit/mpi/example/mod/目录下。我们需要重点关注test_mpi_vi.cpp文件,这是Camera采集和显示的核心示例。

首先需要编辑CMakeLists文件,确保Demo的编译选项已打开:

set(RK_MPI_TEST_VI_SRC test_mpi_vi.cpp)

add_executable(rk_mpi_vi_test ${RK_MPI_TEST_VI_SRC} ${RK_MPI_TEST_COMMON_SRC})
target_link_libraries(rk_mpi_vi_test ${ROCKIT_DEP_COMMON_LIBS})
install(TARGETS rk_mpi_vi_test RUNTIME DESTINATION "bin")

在实际编译过程中,我们发现官方Demo存在多处问题需要修复。以下是主要的修改点:

修改记录1:注释掉有问题的fread调用

// 注释以下问题代码
// fread(RK_MPI_MB_Handle2VirAddr(srcBlk), 1, stMbPicCalResult.u32MBSize, fp);

修改记录2:移除有问题的函数绑定

// 注释掉有问题的VI-VDEC-VO绑定循环函数
// static RK_S32 test_vi_bind_vdec_bind_vo_loop(TEST_VI_CTX_S *ctx)

修改记录3:修正VO创建函数的执行顺序

这是最关键的一处修改,官方源码中的VO初始化顺序存在问题,正确的执行顺序应该是:

  1. 获取VO公共属性(RK_MPI_VO_GetPubAttr)
  2. 定义PubAttr参数
  3. 设置VO公共属性(RK_MPI_VO_SetPubAttr)
  4. 使能VO设备(R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值