跳到主要内容

CIG4-8H 应用

工作原理:完整的视频注入流程

Video Injection System Selection Guide

智能驾驶数据注入系统框图

1

数据准备

将预录制摄像头数据或仿真数据加载到主机 PC 内存中,用于算法验证

2

GMSL 信号生成

CIG4-8H 板卡生成与真实摄像头输出一致的 GMSL 信号,包括时序和电气特性

3

ECU 集成

目标 ECU 通过标准 GMSL 解串器接收视频数据,并像处理真实摄像头数据一样处理这些数据

系统架构

  • IPC(工业计算机): 通过 PCIe Gen3 接口提供源视频数据。
  • CIG4-8H 视频注入卡: 接收来自 IPC 的数据,基于时间戳进行处理,并输出同步视频流。
  • ACU(自动驾驶控制单元): 接收注入的视频数据,用于测试和验证。

软件安装与配置

1. 安装依赖

系统要求与依赖:

sudo apt-get update
sudo apt-get install openssh-server
sudo apt-get install libtool
sudo apt-get install git vim sshpass

2. SDK 下载

SDK 软件包

请根据操作系统和 CIG4-8H 硬件版本选择合适的 SDK 软件包:

操作系统硬件版本SDK 版本下载链接下载工具
Ubuntu 18.04 LTS
Ubuntu 20.04 LTS
CIG4-8H v1.0SDK v2.1.0下载DownGit
下载工具使用说明

DownGit 可在不克隆整个仓库的情况下,从 GitHub 仓库下载指定文件夹或文件:

  1. 复制“下载链接”列中的 GitHub 仓库 URL
  2. 在浏览器中打开 DownGit
  3. 将仓库 URL 粘贴到输入框中
  4. 点击“下载”,获取包含 SDK 的 ZIP 文件
  5. 将 ZIP 文件解压到目标位置

当只需要 SDK 文件而不需要完整 Git 历史时,该方法尤其适用。

3. FFmpeg 环境配置

下载 FFmpeg: ffmpeg-4.4.4.tar.xz (9.12MB)

安装步骤:

  1. 解压软件包:

    tar -xf ffmpeg-4.4.4.tar.xz
  2. 安装开发库:

    sudo apt-get install libsdl2-dev
    sudo apt-get install libsdl1.2-dev
    sudo apt-get install x264 libx264-dev
  3. 配置并编译 FFmpeg:

    sudo ./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-ffmpeg --enable-ffplay --enable-ffprobe --enable-gpl --enable-libx264 --enable-nonfree --disable-x86asm
  4. 构建并安装:

    make -j8
    sudo make install
  5. 配置环境变量:

    vim ~/.bashrc

    添加以下行:

    export PATH="$PATH:/usr/local/ffmpeg/bin"
    export CPATH="$CPATH:/usr/local/ffmpeg/include"
    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/ffmpeg/lib"
  6. 应用配置:

    sudo ldconfig

4. 软件架构概览

Software Framework Diagram

软件框架架构

架构组件:

该软件架构由多个处理阶段组成,并针对高吞吐视频注入进行了优化:

  • 视频输入处理: 处理 H.264、H.265、JPEG、YUV422 和 RAW 等多种输入格式
  • GPU 加速: 利用 CUDA 实时进行格式转换与处理
  • FPGA 接口: 与板载 FPGA 直接通信,实现低延迟视频流传输
  • 多通道同步: 确保全部 8 路 GMSL 通道的精确时序
  • 缓冲管理: 优化内存分配,以支持持续高带宽运行

5. SDK 使用指南

5.1 SDK 结构概览

SDK 提供完整的视频注入操作工具。解压 SDK 后进入工作目录:

~/pcie_xdma_transfer_sdk/xdma

目录结构:

目录/文件说明
bash包含自动化测试脚本的 Shell 脚本目录
bash1包含额外测试场景的备用 Shell 脚本目录
include头文件目录
xdma主 XDMA 驱动源代码目录
tools/pcie_reg_rwPCIe 寄存器读写工具目录
tools/pcie_xdma_transfer主视频传输工具目录
Makefile用于 SDK 编译和工具目录管理的构建配置文件

5.2 SDK 编译

进入 SDK 目录并编译:

~/pcie_xdma_transfer_sdk/xdma
make

5.3 编译工具

在 tools 目录中执行以下命令:

~/pcie_xdma_transfer_sdk/tools
make clean
make

5.4 脚本修改

修改以下位置的传输脚本: ~/pcie_xdma_transfer_sdk/bash

编辑 transfer_run.sh 脚本以配置具体需求。

6. 视频传输配置

6.1 传输文件命名规则

视频源文件应放置在 /bash/data/yuv 目录中。传输卡要求按指定命名规则配置文件,以便映射到对应通道:

语法:

transfer_file_name[<n>]="<file name>"

参数:

  • transfer_file_name: 视频源文件名配置
  • <n>: 目标卡通道号(0-7)
  • <file name>: 视频源文件名

示例:

通道 0 使用名为 "input0.h264" 的视频文件时:

transfer_file_name[0]="input0.h264"

通道 0 使用名为 "picture19201080yuyv.yuv" 的视频文件时:

transfer_file_name[0]="picture19201080yuyv.yuv"

6.2 传输文件类型配置

指定视频文件类型以便正确处理:

语法:

transfer_file_type[<n>]="<file type>"

参数:

  • transfer_file_type: 视频文件类型配置
  • <n>: 目标卡通道号(0-7)
  • <file type>: 文件类型说明("Original" 或 "H264")

示例:

transfer_file_type[0]="Original"

文件类型说明:

  • Original: 表示将未压缩视频文件直接传输到目标卡,再转换格式后发送到 ACU
  • H264: 表示 H.264 格式传输,由 CPU 或 GPU 完成格式转换后发送到 ACU

6.3 传输重复次数配置

配置文件重复传输次数:

语法:

transfer_file_replay[<n>]=<n1>

参数:

  • transfer_file_replay: 文件重复次数配置
  • <n>: 目标卡通道号(0-7)
  • <n1>: 重复次数(0-1000000)

示例: 通道 0 重复传输 100 次时:

transfer_file_replay[0]=100

6.4 传输格式配置

配置目标卡支持的传输格式(YUV、RAW10、RAW12、RAW14):

语法:

transfer_type[<n>]="<model>"

参数:

  • transfer_type: 目标卡传输格式配置
  • <n>: 目标卡通道号(0-7)
  • <model>: 目标卡传输格式("YUV"、"RAW10"、"RAW12" 或 "RAW14")

示例: 通道 0 传输 YUV422 格式数据时:

transfer_type[0]="YUV"

6.5 传输分辨率配置

通过指定宽度和高度参数,为每个通道的视频流配置分辨率:

宽度配置:

transfer_resolution_width[<n>]=<n1>

高度配置:

transfer_resolution_height[<n>]=<n1>

参数:

  • transfer_resolution_width: 宽度分辨率配置
  • transfer_resolution_height: 高度分辨率配置
  • <n>: 目标卡通道号(0-7)
  • <n1>: 图像分辨率值

示例: 通道 0 分辨率为 1920×1080 时:

transfer_resolution_width[0]=1920
transfer_resolution_height[0]=1920
⚠️ 重要说明:
  • 通道 0 需要配置 1 路分辨率
  • 通道 2 需要配置 3 路分辨率
  • 通道 4 需要配置 5 路分辨率
  • 通道 6 需要配置 7 路分辨率

6.6 内部与外部触发配置

内部触发配置:

../tools/reg_rw /dev/xdma0_user 0x30020 w <n1>

参数:

  • <n1>: 0x22222222 表示内部触发,0x11111111 表示外部触发

示例: 通道 0 工作在内部触发模式时:

../tools/reg_rw /dev/xdma0_user 0x30020 w 0x22222222

6.7 内部频率配置

配置视频传输的内部频率:

../tools/reg_rw /dev/xdma0_user <n> w <n1>

参数:

  • <n>: 目标卡通道号
  • <n1>: 频率值,实际频率 = 200M/配置频率值

通道映射:

  • 0x30024 → 通道 0
  • 0x30028 → 通道 1
  • 0x3002c → 通道 2
  • 0x30030 → 通道 3
  • 0x30034 → 通道 4
  • 0x30038 → 通道 5
  • 0x3003c → 通道 6
  • 0x30040 → 通道 7

示例:

将通道 0-7 设置为 30fps 传输:

#1fps
#30fps: 6666666
#20fps: 10000000
#15fps: 13333333
#10fps: 20000000
../tools/reg_rw /dev/xdma0_user 0x30024 w 6666666
../tools/reg_rw /dev/xdma0_user 0x30028 w 6666666
../tools/reg_rw /dev/xdma0_user 0x3002c w 6666666
../tools/reg_rw /dev/xdma0_user 0x30030 w 6666666
../tools/reg_rw /dev/xdma0_user 0x30034 w 6666666
../tools/reg_rw /dev/xdma0_user 0x3003c w 6666666
../tools/reg_rw /dev/xdma0_user 0x30040 w 6666666

7. 驱动加载与系统启动

7.1 驱动加载

进入 /pcie_xdma_transfer_sdk/bash 目录并执行驱动加载脚本:

sudo ./load_driver.sh

预期输出:

interrupt_injection: 0
Loading driver: insmod xdma.ko interrupt_mode=1 ...
The kernel module installed correctly and the xdma devices were recognized.
DONE

加载成功后,应能看到以下设备文件创建于 /dev/:

  • xdma0_h2c_0, xdma0_h2c_1, xdma0_h2c_2, xdma0_h2c_3 - 主机到板卡传输设备
  • xdma0_c2h_0, xdma0_c2h_1, xdma0_c2h_2, xdma0_c2h_3 - 板卡到主机传输设备
  • xdma0_user - 用于寄存器访问的用户控制接口

7.2 目标卡数据传输配置

7.2.1 启动配置

进入: ~/pcie_xdma_transfer_sdk/bash 并执行传输脚本:

sudo ./transfer_run.sh
7.2.2 停止配置

如需停止数据传输,请进入: ~/pcie_xdma_transfer_sdk/bash 并执行:

sudo ./stop.sh