3.4. sample_vse 使用说明

3.4.1. 功能概述

sample_vse 完成 VSE 模块的初始化,配置输入和输出通道的参数,实现1路图像的输出,6路图像的经过缩放、crop 后输出的功能。

3.4.1.1. 软件架构说明

sample_vse 主要依赖 libcam.so libvpf.so libhbmem.so,将 YUV 文件读入 hbm 申请的内存,并传入 VSE 通道做缩小或放大处理,最后将处理好的 YUV 数据 dump 到文件系统中。

sample_vse_software_arch.png

3.4.1.2. 数据流说明

测试程序 pipeline 如下所示,仅创建一个 vflow,vflow 仅包含一个 VSE vnode。通过 VSE vnode 内部6个 Channel 实现不同分辨率缩放。

sample_vse_pipeline.png

3.4.1.3. 代码位置及目录结构

  • 代码位置 app/samples/platform_samples/sample_vse

  • 目录结构

sample_vse/
├── Makefile
└── sample_vse.c

3.4.1.4. API流程说明

sample_vse_code_flow.png

3.4.2. 编译部署

3.4.2.1. 编译

  • 进入 sample_vse 目录,执行make编译

  • 输出成果物是 sample_vse 源码目录下的 sample_vse

  • 详细程序编译方式请查阅 编译方法 章节

3.4.2.2. 程序部署

sample_vse/sample_vse 上传到开发板上之后,运行chmod +x sample_vse命令给程序赋予可执行权限。

3.4.3. 运行

3.4.3.1. 程序运行方法

直接执行程序 ./sample_vse 可以获得帮助信息:

3.4.3.2. 程序参数选项说明

./sample_vse
Usage: sample_vse [OPTIONS]
Options:
-i, --input_file FILE           Specify the input file
-w, --input_width WIDTH         Specify the input width
-h, --input_height HEIGHT       Specify the input height
-f, --feedback                  Specify feedback mode
-V, --verbose                   Enable verbose mode
  • i: 指定输入的YUV文件,测试程序默认使用 NV12 格式

  • w: 输入 YUV 图像的宽度

  • h: 输入 YUV 图像的高度

  • f: 以 feedback 模式运行 VSE 节点(不创建 vflow 流)

3.4.3.3. 运行效果

以输入分辨率为 1280 x 960 的 YUV 图片为例,执行 sample_vse -i 1280x960_NV12.yuv -w 1280 -h 960

把一张 YUV 图像送入 VSE,并且初始化6个通道,0~4通道执行图像缩小,5通道执行图像放大,并且把处理后的图像保存为 yuv 图像:

  • 0 通道输出输入图像的原分辨率:1280 x 960。

  • 1 通道输出16像素对齐的常用算法图像使用的分辨率:512 x 512。

  • 2 通道输出非16像素对齐的常用算法图像使用的分辨率:224 x 224。

  • 3 通道输出ROI为原图中心点不变,宽、高各裁剪一半,输出图像宽、高等于ROI区域宽高,输出缩小到支持的最小分辨率:64 x 64。

  • 4 通道输出常用算法图像使用的分辨率:672 x 672。

  • 5 通道输出放大到支持的最大分辨率(注意:图像只能最大放到4倍):2560 x 1920。

输出 log 如下:

VSE vnode work mode: vflow
Using input file:1280x960_NV12.yuv, input:1280x960
(read_yuvv_nv12_file):file read(1280x960_NV12.yuv), y-size(1228800)
ichn input width = 1280
ichn input height = 960
hbn_vnode_set_ochn_attr: 0, 1280x960
hbn_vnode_set_ochn_attr: 1, 512x512
hbn_vnode_set_ochn_attr: 2, 224x224
hbn_vnode_set_ochn_attr: 3, 64x64
hbn_vnode_set_ochn_attr: 4, 672x672
hbn_vnode_set_ochn_attr: 5, 2560x1920

运行 Feedback 模式以输入分辨率为 1920 x 1080 的 YUV 图片为例,执行 ./sample_vse -i input_1920x1080_nv12.yuv -w 1920 -h 1080 -f

输出 log 如下:

VSE vnode work mode: feedback
Using input file:input_1920x1080_nv12.yuv, input:1920x1080
(read_yuvv_nv12_file):file read(input_1920x1080_nv12.yuv), y-size(2073600)
ichn input width = 1920
ichn input height = 1080
hbn_vnode_set_ochn_attr: 0, 1920x1080
hbn_vnode_set_ochn_attr: 1, 512x512
hbn_vnode_set_ochn_attr: 2, 224x224
hbn_vnode_set_ochn_attr: 3, 64x64
hbn_vnode_set_ochn_attr: 4, 672x672
hbn_vnode_set_ochn_attr: 5, 3840x2160
  • 浏览YUV图​​​

    请参考Hobot player静态图片章节浏览图像,图像的参数配置说明如下:​​ 按照如下图所示步骤配置选项,其中 file config 里面关注 pic_type 、 yuv_type 、width 和 height 的配置,以 vse_output_nv12_chn0_1280x960_stride_1280.yuv 为例, 配置为(PIC_YUV, YUV_NV12, 1280, 960)。 vin_hobot_use.png

3.4.4. 提示说明

VSE 通道 5 只支持放大,如果输入分辨率小于测试程序 VSE 通道0-4设置的默认分辨率,将出现报错。 例如使用 64x64 图像作为输入,将提示报错信息如下:

[   51.037647] [L485]vse_ochn_attr_check: Invalid Param attr->target_w: 512, min: 64, max: 64
[   51.045960] vse_ochn_attr_check failed