3.1. 示例代码介绍
本章
本章
通过
理解
每个 硬件加速 模块 的 基本功能 和 适用 场景。 学习
如何 高效 地 将 多个 模块 组合,解决 实际 问题。 快速
掌握 示例 代码 的 使用 方法,从而 节省 开发 时间。
3.1.1. 示例源码目录结构
所有app/samples/platform_samples 目录
源码
.
├── chip_base_test # 驱动功能单元测试,请查阅 [ BSP 开发指南 - 驱动功能单元测试 ] 了解使用方法
├── Makefile # 所有模块的编译总入口( sunrise_camera 不使用这个 Makefile)
├── Makefile.in # Makefile 的参数配置,包括交叉编译工具链,头文件、库文件引用等
├── README.md
├── sample_audio # 基于 ALSA( Advanced Linux Sound Architecture)库开发的音频录音、播放示例
├── sample_codec # 视频图像编、解码模块的示例代码,包括 H264\H265\JPEG\MJPEG 的编码和解码
├── sample_crypto # 通过多个操作示例演示常用安全操作接口的使用方法
├── sample_dsp # 主要说明如何在芯片上简单的使用 DSP 进行任务处理
├── sample_gdc # GDC 模块支持的各种转换模式的示例代码
├── sample_gpu_2d # 2D GPU 支持的各种功能示例代码
├── sample_hbmem # 本示例介绍一套基于 ION 的内存管理库的 API 使用方法
├── sample_imu # 本示例是一个用于使用惯导传感器的命令行案例
├── sample_isp # ISP 模块的示例代码,包括如何初始化 ISP,获取 ISP 处理后的数据,动态设置 ISP 参数等
├── sample_osd # 介绍如何使用 OSD 功能
├── sample_pipeline # 串联多功能模块的示例代码,例如: VIN->ISP->VSE->CODEC 编码的数据流通路功能测试
├── sample_usb # 提供 USB 的 UVC 和 UAC 功能示例
├── sample_trustzone # TA 和 CA 的简单示例代码
├── sample_vin # 初始化 Camera Sensor,从 VIN 模块获取图像
├── sample_vot # 提供基于 DRM 框架的视频图像显示功能
├── sample_vse # 初始化 VSE 模块,使用 VSE 对图像进行缩放操作
├── sunrise_camera # 集成大部分模块实现的应用方案示例代码,支持智能摄像头和智能分析盒,在 Web 上可以浏览视频图像和智能算法结果
├── tuning_tool # ISP 图像效果调试时需要使用到本程序
├── utils # 包含通用的函数及结构体
└── vp_sensors # Camera Sensor 配置代码,本代码会被其他需要使用 Camera Sensor 的模块使用
注:vp_sensors 目录Camera Sensor 和Camera Sensor 添加vp_sensors/README.md。
3.1.2. 示例使用指南
所有/app/platform_samples 目录
cd /app/platform_samples/sample_vse
# 执行 sample_vse 获取程序的帮助信息
./sample_vse
Usage: sample_vse [OPTIONS]
Options:
-i, --input_file FILE Input NV12 file path
-w, --input_width W Input width in pixels
-h, --input_height H Input height in pixels
-f, --feedback Feedback mode (hbn_vnode_start)
-V, --verbose Verbose dump of frame structures
-a, --async Use hbn_vnode_sendframe_async (default: sync sendframe)
-b, --buf-num N Ichn buffer index rotation count [1..16], default 1
-n, --frames N Send/Get frame loop iterations (default 1)
-y, --save-yuv Save ochn NV12 to ./vse_output_nv12_run*_chn*.yuv
其他
3.1.3. 示例开发指南
3.1.3.1. 编译方法
本Makefile.in 文件
-I ${HR_BUILD_OUTPUT_DIR}/build/hbre_deps/include/
-L ${HR_BUILD_OUTPUT_DIR}/build/hbre_deps/usr/lib
-L ${HR_BUILD_OUTPUT_DIR}/deploy/system/usr/lib
因此,在
整体
编译 所有 示例 完成
编译 整个 BSP ,所有 示例 代码 都 会 进行 编译,并且 安装 到 BSP 的 out/deploy/app/platform_samples下:./bd.sh
单个
示例 编译 方法 在
完成 BSP 的 整体 编译 后,可以 对 app/samples/platform_samples中的 各 示例 单独 进行 开发 与 编译。以下 提供 两种 编译 方法: 直接
进入 模块 目录 编译 进入
需要 编译 的 模块 目录 并 执行 make命令。例如,单独编译 sample_vin示例:cd samples/platform_samples/sample_vin/get_vin_data make
直接 make 编译
的 程序 会 生成 在 当前 示例 的 源码 目录 下,不会 安装 到 BSP 的out/deploy/app/platform_samples下。通过 BSP 编译
框架 编译 使用 BSP 的
编译 框架,在 BSP 根目录 下 执行 以下 命令 即可 编译 指定 示例: ./bd.sh app samples/platform_samples
通过 BSP 提供out/deploy/app/platform_samples 下。
3.1.4. 常见问题
3.1.4.1. /app 目录下空间不足导致示例运行失败
问题
解决
3.1.4.2. 串口终端登陆的情况下内核日志刷屏
在
echo 4 > /proc/sys/kernel/printk