跳到主要内容

K230 图像实战 - 开机视频和开机logo

概述

本文将讲解如何通过视频解码在k230 evb开发板上实现开机视频和开机logo。 视频解码模块支持H.264/H.265/MJPEG解码,屏幕显示最大分辨率为1920x1080,可旋转。

1. 环境准备

1.1 硬件环境

  • K230-USIP-LP3-EVB-V1.0/K230-UNSIP-LP3-EVB-V1.1
  • Typec USB线,用于供电。
  • SD卡
  • 屏幕及连线
  • 摄像头子板(IMX335)

1.2 软件环境

k230_sdk中提供了工具链,分别在如下路径。

  • 大核rt-samrt工具链
k230_sdk/toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu
  • 小核linux工具链
k230_sdk/toolchain/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0

也可通过以下链接下载工具链

wget https://download.rt-thread.org/rt-smart/riscv64/riscv64-unknown-linux-musl-rv64imafdcv-lp64d-20230222.tar.bz2
wget https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1659325511536/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0-20220715.tar.gz

2. 源码位置

SDK中包含一个用户态解码demo,路径位于k230_sdk/src/big/mpp/userapps/sample/sample_vdec。编译生成的可执行文件在k230_sdk/src/big/mpp/userapps/sample/elf/sample_vdec.elf,默认没有加载到大核镜像中,需要按照执行方式章节修改Makefile才能在大核启动后的/mnt目录中生成可执行文件。

3. 源码解析

  1. sample_vb_init:配置vb pool cnt,并初始化vb。
  2. vb_create_pool:配置vb总各个pool的block大小和个数。
  3. kd_mpi_vdec_create_chn:创建解码通道。
  4. kd_mpi_vdec_start_chn:开启解码通道。
  5. sample_vdec_bind_vo:将解码绑定到vo。
  6. input_thread:从文件中读取数据,并调用kd_mpi_vdec_send_stream将数据送给VPU。
  7. output_thread:从VPU获取解码数据。

4. 程序执行

  1. 修改k230_sdk/Makefilempp-apps的编译脚本。 将

    cp userapps/sample/fastboot_elf/* $(RTSMART_SRC_DIR)/userapps/root/bin/; \

    改为

    cp userapps/sample/elf/sample_vdec.elf $(RTSMART_SRC_DIR)/userapps/root/bin/; \
  2. 将需要显示的H.264/H.265/MJPEG/JPEG文件拷贝到k230_sdk/src/big/rt-smart/userapps/root/bin目录中

  3. 修改k230_sdk/src/big/rt-smart/init.sh为如下命令:

    /bin/sample_vdec -i <filename> [-t <sec>]
    • <filename>为上一步中拷贝的视频文件
    • -t仅在显示图片时使用,为显示图片的时间。
  4. k230_sdk目录下执行make命令。

  5. 将编译生成的k230_sdk/output/k230_evb_defconfig/images/sysimage-sdcard.img烧写到SD卡中,EVB板拨码开关全拨到OFF(从SD卡启动),即可实现开机显示视频。

显示效果如下: boot_logo