# sample **Repository Path**: eclaw-kvm/sample ## Basic Information - **Project Name**: sample - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-16 - **Last Updated**: 2026-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # eclawkvm Sample 示例程序 ## 项目介绍 本项目是基于 eclawkvm 平台的示例程序集合,展示了平台的各种功能模块的使用方法。每个示例程序都是一个独立的可执行文件,可以单独运行来测试特定功能。 ## 模块介绍 ### 基础模块 | 模块名称 | 可执行文件 | 功能描述 | |---------|-----------|---------| | **VIO** | `sample_vio` | 视频输入输出模块,演示 VI(视频输入)和 VO(视频输出)的基本功能 | | **VENC** | `sample_venc` | 视频编码模块,演示 H.264/H.265 视频编码功能 | | **VDEC** | `sample_vdec` | 视频解码模块,演示 H.264/H.265 视频解码功能 | | **VDA** | `sample_vda` | 视频分析模块,演示视频数据分析功能 | | **VGS** | `sample_vgs` | 视频图形处理模块,演示视频缩放、裁剪等图形处理功能 | | **TDE** | `sample_tde` | 2D 图形引擎模块,演示 2D 图形处理和显示功能 | | **GFBG** | `sample_gfbg` | 帧缓冲区模块,演示帧缓冲区的使用和管理 | | **HDMI** | `sample_hdmi` | HDMI 输出模块,演示 HDMI 视频输出功能 | ### 高级模块 | 模块名称 | 可执行文件 | 功能描述 | |---------|-----------|---------| | **Audio** | `sample_audio` | 音频处理模块,演示音频采集、编码、解码和输出功能 | | **Region** | `sample_region` | 区域覆盖模块,演示 OSD(屏幕显示)和区域覆盖功能 | | **Bitrate Auto** | `sample_bitrate_auto` | 码率自适应模块,演示动态码率控制功能 | | **SVC Rate Auto** | `sample_svc_rate_auto` | SVC 码率自适应模块,演示可伸缩视频编码的码率控制 | ### 智能处理模块 | 模块名称 | 可执行文件 | 功能描述 | |---------|-----------|---------| | **SVP-IVE** | `sample_svp_ive` | 智能视频处理-IVE 模块,演示图像处理算法(边缘检测、光流、运动检测等) | | **SVP-NNIE** | `sample_svp_nnie` | 智能视频处理-NNIE 模块,演示神经网络推理引擎(CNN、SSD、YOLO、Faster-RCNN 等) | | **SVP-MAU** | `sample_svp_mau` | 智能视频处理-MAU 模块,演示矩阵运算单元功能 | ## 环境要求 ### 开发环境 - **操作系统**: Linux (Ubuntu 18.04+ 推荐) - **CMake**: 3.10 或更高版本 - **交叉编译器**: arm-mix410-linux-gcc (版本 7.3.0) - **Make**: GNU Make 3.81 或更高版本 ### 运行环境 - **目标平台**: ARM Mix410 Linux - **硬件**: eclawkvm 开发板 - **依赖库**: - ss_mpi (系统 MPI 库) - ss_tde (2D 图形引擎库) - ss_hdmi (HDMI 输出库) - ss_md (运动检测库) - ss_ive (图像处理库) - ss_nnie (神经网络推理库) - ss_mau (矩阵运算库) - 其他音频和视频处理库 ## 编译说明 ### 1. 准备工作 确保已安装 CMake 和交叉编译器工具链: ```bash # 检查 CMake 版本 cmake --version # 检查交叉编译器 arm-mix410-linux-gcc --version ``` ### 2. 编译步骤 #### 方法一:使用一键编译脚本(推荐) ```bash # 显示帮助信息 ./build.sh -h # 编译所有模块 ./build.sh # 指定线程数编译 ./build.sh -j 8 # 清理构建产物 ./build.sh -c # 清理并重新编译 ./build.sh -r ``` #### 方法二:手动编译 ```bash # 进入项目目录 cd /home/nhl/opensource/gitee/eclawkvm/sample # 创建构建目录 mkdir -p build && cd build # 配置 CMake(指定交叉编译工具链) cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain-arm-mix410-linux.cmake # 编译项目(使用 4 个线程并行编译) make -j4 # 清理构建产物(如需重新编译) make clean ``` ### 3. 单独编译特定模块 可以通过 CMake 选项选择编译特定模块: ```bash # 禁用所有模块,然后启用特定模块 cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain-arm-mix410-linux.cmake \ -DBUILD_ALL=OFF \ -DBUILD_HDMI=ON \ -DBUILD_VIO=ON # 编译指定模块 make -j4 ``` ### 4. 编译选项列表 | 选项 | 默认值 | 说明 | |------|-------|------| | `BUILD_ALL` | ON | 编译所有模块 | | `BUILD_AUDIO` | ON | 编译音频模块 | | `BUILD_BITRATE_AUTO` | ON | 编译码率自适应模块 | | `BUILD_GFBG` | ON | 编译帧缓冲区模块 | | `BUILD_HDMI` | ON | 编译 HDMI 输出模块 | | `BUILD_REGION` | ON | 编译区域覆盖模块 | | `BUILD_SVC_RATE_AUTO` | ON | 编译 SVC 码率自适应模块 | | `BUILD_TDE` | ON | 编译 2D 图形引擎模块 | | `BUILD_VDA` | ON | 编译视频分析模块 | | `BUILD_VDEC` | ON | 编译视频解码模块 | | `BUILD_VENC` | ON | 编译视频编码模块 | | `BUILD_VGS` | ON | 编译视频图形处理模块 | | `BUILD_VIO` | ON | 编译视频输入输出模块 | | `BUILD_SVP` | ON | 编译智能处理模块 | | `BUILD_SVP_IVE` | ON | 编译 IVE 图像处理模块 | | `BUILD_SVP_NNIE` | ON | 编译 NNIE 神经网络推理模块 | | `BUILD_SVP_MAU` | ON | 编译 MAU 矩阵运算模块 | ### 5. 编译产物 编译成功后,所有可执行文件将输出到 `output` 目录: ```bash ls -lh output/ ``` 输出文件包括: - `sample_audio` - 音频处理示例 - `sample_bitrate_auto` - 码率自适应示例 - `sample_gfbg` - 帧缓冲区示例 - `sample_hdmi` - HDMI 输出示例 - `sample_region` - 区域覆盖示例 - `sample_svc_rate_auto` - SVC 码率自适应示例 - `sample_tde` - 2D 图形引擎示例 - `sample_vda` - 视频分析示例 - `sample_vdec` - 视频解码示例 - `sample_venc` - 视频编码示例 - `sample_vgs` - 视频图形处理示例 - `sample_vio` - 视频输入输出示例 - `sample_svp_ive` - 智能图像处理示例 - `sample_svp_mau` - 矩阵运算示例 - `sample_svp_nnie` - 神经网络推理示例 ## 使用说明 ### 在目标设备上运行 1. 将 `output` 目录下的可执行文件复制到目标设备 2. 确保目标设备上已安装所需的依赖库 3. 根据需要配置相应的参数文件 4. 运行对应的示例程序 ### 示例:运行 VIO 模块 ```bash # 在目标设备上 ./sample_vio ``` ### 示例:运行 HDMI 输出模块 ```bash # 在目标设备上 ./sample_hdmi ``` ### 示例:运行智能处理模块 ```bash # IVE 图像处理 ./sample_svp_ive 0 # 运行边缘检测示例 # NNIE 神经网络推理 ./sample_svp_nnie # 运行目标检测示例 ``` ## 项目结构 ``` sample/ ├── CMakeLists.txt # 主 CMake 配置文件 ├── build.sh # 一键编译脚本 ├── cmake/ # CMake 配置目录 │ ├── toolchain-arm-mix410-linux.cmake # 交叉编译工具链配置 │ ├── common.cmake # 公共模块配置 │ ├── audio.cmake # 音频模块配置 │ ├── bitrate_auto.cmake # 码率自适应模块配置 │ ├── gfbg.cmake # 帧缓冲区模块配置 │ ├── hdmi.cmake # HDMI 输出模块配置 │ ├── region.cmake # 区域覆盖模块配置 │ ├── svc_rate_auto.cmake # SVC 码率自适应模块配置 │ ├── tde.cmake # 2D 图形引擎模块配置 │ ├── vda.cmake # 视频分析模块配置 │ ├── vdec.cmake # 视频解码模块配置 │ ├── venc.cmake # 视频编码模块配置 │ ├── vgs.cmake # 视频图形处理模块配置 │ ├── vio.cmake # 视频输入输出模块配置 │ └── svp.cmake # 智能处理模块配置 ├── include/ # 公共头文件目录 │ ├── iniparser.h # INI 文件解析头文件 │ ├── iniparser.c # INI 文件解析实现 │ ├── sample_cv_saveblob.h # OpenCV blob 保存头文件 │ ├── sample_draw_rect.h # 矩形绘制头文件 │ └── sample_cv_resize.h # 图像缩放头文件 ├── lib/ # 依赖库文件目录 ├── source/ # 源代码目录 │ ├── common/ # 公共代码模块 │ ├── audio/ # 音频处理模块 │ ├── bitrate_auto/ # 码率自适应模块 │ ├── gfbg/ # 帧缓冲区模块 │ ├── hdmi/ # HDMI 输出模块 │ ├── region/ # 区域覆盖模块 │ ├── svc_rate_auto/ # SVC 码率自适应模块 │ ├── tde/ # 2D 图形引擎模块 │ ├── vda/ # 视频分析模块 │ ├── vdec/ # 视频解码模块 │ ├── venc/ # 视频编码模块 │ ├── vgs/ # 视频图形处理模块 │ ├── vio/ # 视频输入输出模块 │ └── svp/ # 智能处理模块 │ ├── common/ # 智能处理公共代码 │ ├── ive/ # IVE 图像处理模块 │ ├── mau/ # MAU 矩阵运算模块 │ └── nnie/ # NNIE 神经网络推理模块 ├── vendor/ # 第三方库目录 │ ├── nvp6158/ # NVP6158 视频解码器驱动 │ ├── tp2854b/ # TP2854B 视频解码器驱动 │ ├── tp2856/ # TP2856 视频解码器驱动 │ ├── lt8618sx/ # LT8618SX HDMI 驱动 │ └── es8388/ # ES8388 音频编解码器驱动 ├── output/ # 编译输出目录(自动生成) └── build/ # 构建目录(自动生成) ``` ## 注意事项 1. **交叉编译**: 本项目使用 `arm-mix410-linux-gcc` 交叉编译器,确保工具链已正确安装 2. **库依赖**: 编译和运行需要平台特定的库文件,确保 `lib/` 目录下有所有必需的库 3. **头文件路径**: 项目已配置好所有必要的头文件搜索路径,包括 vendor 目录下的驱动头文件 4. **编译警告**: 编译过程中可能会有一些警告信息,这些通常是正常的,不影响功能 5. **目标设备**: 编译生成的可执行文件只能在 ARM Mix410 平台上运行 6. **模块结构**: `source/` 下的每个一级目录都是一个独立的模块/进程程序,模块下的子目录是该模块的源码分类 ## 故障排除 ### 编译错误 1. **找不到交叉编译器**: 检查 `arm-mix410-linux-gcc` 是否在 PATH 中 2. **缺少头文件**: 确保所有依赖的头文件都在正确的位置 3. **链接错误**: 检查 `lib/` 目录下是否有所有必需的库文件 ### 运行错误 1. **找不到库文件**: 在目标设备上设置 `LD_LIBRARY_PATH` 环境变量 2. **权限问题**: 确保可执行文件有执行权限 3. **设备节点问题**: 确保目标设备上的设备节点已正确创建 ## 技术支持 如有问题,请参考: - 项目文档 - 平台技术手册 - 示例代码注释 ## 更新日志 ### v1.0.0 (2026-06-17) - 初始版本发布 - 支持 15 个功能模块 - 完整的 CMake 构建系统 - 支持单独编译和全部编译 - 一键编译脚本支持 - 交叉编译支持